0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows + VirtualBox + Ubuntu 24.04 Server で Floci を使ってローカル AWS 環境を作る Step 2

0
Posted at

Windows + VirtualBox + Ubuntu 24.04 Server で Floci を使ってローカル AWS 環境を作る Step 2

はじめに

前回の Step 1 では、Floci を使って以下の基本サービスをローカルで検証しました。

  • S3
  • DynamoDB
  • Lambda
  • IAM
  • STS
  • KMS
  • Secrets Manager

今回は Step 2 として、より重い Docker-backed 系のサービスを試します。

  • RDS
  • ECS
  • EC2

Floci では、Lambda / RDS / ECS など一部のサービスは、実際に Docker コンテナを起動して動作を模擬します。
そのため Step 1 よりも CPU / メモリ / ディスクに余裕が必要です。

Step 2 の目的

Step 2 の目的は、ローカル環境で以下を確認することです。

対象 確認内容
RDS ローカル DB コンテナとして DB インスタンス相当を作る
ECS コンテナタスクを AWS CLI 風に操作する
EC2 EC2 インスタンス相当のコンテナを起動する
Docker Floci から追加コンテナが起動されることを確認する

前提環境

Step 1 の環境が構築済みであることを前提にします。

Windows 11
  └─ VirtualBox
      └─ Ubuntu 24.04 Server
          ├─ Docker
          ├─ Docker Compose
          ├─ AWS CLI v2
          └─ Floci

推奨スペックは以下です。

項目 推奨
CPU 4 vCPU 以上
メモリ 8GB以上、できれば16GB
ディスク 80GB以上
ネットワーク NAT + SSH、またはブリッジ
Docker保存先 Ubuntu VM 内の ext4 領域

RDS / ECS / EC2 は追加コンテナが起動するため、Step 1 より重くなります。

注意点

Step 2 では /var/run/docker.sock を Floci コンテナへ渡します。

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

これは Floci がホスト側 Docker を操作し、RDS / ECS / EC2 相当のコンテナを起動するために必要です。

ただし Docker socket を渡す構成は強い権限を持ちます。
そのため、外部公開せず、ローカル検証用の閉じた環境で利用します。

compose.yaml の確認

Step 1 の compose.yaml に、すでに Docker socket のマウントが入っていればそのまま使えます。

services:
  floci:
    image: floci/floci:latest
    container_name: floci
    env_file:
      - .env
    ports:
      - "127.0.0.1:4566:4566"
    environment:
      FLOCI_STORAGE_MODE: persistent
      FLOCI_STORAGE_PERSISTENT_PATH: /app/data
    volumes:
      - ./data/floci:/app/data
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

Floci を起動する

./scripts/01_start_floci.sh
source ./scripts/02_export_env.sh

確認します。

docker compose ps
aws sts get-caller-identity

RDS を試す

まずは RDS の DB インスタンス作成を試します。

aws rds create-db-instance \
  --db-instance-identifier step2-rds-postgres \
  --db-instance-class db.t3.micro \
  --engine postgres \
  --master-username postgres \
  --master-user-password postgrespass \
  --allocated-storage 20

状態を確認します。

aws rds describe-db-instances

Docker コンテナも確認します。

docker ps

RDS 相当のコンテナが起動していれば成功です。

接続情報を確認します。

aws rds describe-db-instances \
  --db-instance-identifier step2-rds-postgres

必要に応じて、PostgreSQL クライアントを入れて接続確認します。

sudo apt install -y postgresql-client
psql -h 127.0.0.1 -U postgres -d postgres

※ 実際の接続先ホストやポートは、describe-db-instancesdocker ps で確認してください。

ECS を試す

ECS クラスターを作成します。

aws ecs create-cluster \
  --cluster-name step2-local-cluster

確認します。

aws ecs list-clusters

タスク定義を作成します。

cat > task-definition.json <<'EOF'
{
  "family": "step2-nginx-task",
  "networkMode": "bridge",
  "containerDefinitions": [
    {
      "name": "nginx",
      "image": "nginx:latest",
      "cpu": 128,
      "memory": 128,
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 8081,
          "protocol": "tcp"
        }
      ]
    }
  ]
}
EOF

登録します。

aws ecs register-task-definition \
  --cli-input-json file://task-definition.json

タスクを実行します。

aws ecs run-task \
  --cluster step2-local-cluster \
  --task-definition step2-nginx-task

Docker コンテナを確認します。

docker ps

nginx コンテナが起動していれば、ECS 相当の動作確認は成功です。

EC2 を試す

EC2 は、実際の VM ではなく Docker コンテナとしてインスタンス相当を起動するイメージです。

まずはキーペアを作成します。

aws ec2 create-key-pair \
  --key-name step2-key \
  --query 'KeyMaterial' \
  --output text > step2-key.pem

chmod 600 step2-key.pem

セキュリティグループを作成します。

aws ec2 create-security-group \
  --group-name step2-sg \
  --description "step2 local security group"

インスタンス相当を起動します。

aws ec2 run-instances \
  --image-id ami-local \
  --instance-type t3.micro \
  --key-name step2-key \
  --security-groups step2-sg \
  --count 1

確認します。

aws ec2 describe-instances
docker ps

EC2 相当のコンテナが起動していれば成功です。

状態確認スクリプト例

Step 2 用に、以下のような確認スクリプトを作ると便利です。

#!/usr/bin/env bash
set -euo pipefail

export AWS_ENDPOINT_URL="${AWS_ENDPOINT_URL:-http://127.0.0.1:4566}"
export AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION:-us-east-1}"
export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID:-test}"
export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY:-test}"
export AWS_PAGER=""

aws_local() {
  aws --endpoint-url "$AWS_ENDPOINT_URL" "$@"
}

echo "[RDS]"
aws_local rds describe-db-instances || true

echo "[ECS]"
aws_local ecs list-clusters || true
aws_local ecs list-task-definitions || true

echo "[EC2]"
aws_local ec2 describe-instances || true

echo "[Docker]"
docker ps

停止・削除の考え方

Step 2 ではコンテナが増えるため、検証後はこまめに停止・削除します。

RDS 削除例です。

aws rds delete-db-instance \
  --db-instance-identifier step2-rds-postgres \
  --skip-final-snapshot

ECS タスクやクラスターも不要になったら削除します。

aws ecs list-clusters

EC2 相当のインスタンスも停止・削除します。

aws ec2 describe-instances

最後に Docker 側も確認します。

docker ps -a

不要なコンテナが残っている場合は、削除します。

docker rm -f <container_id>

Step 2 でよくある問題

メモリ不足

RDS / ECS / EC2 は追加コンテナを起動するため、メモリ不足になりやすいです。

free -h
docker stats

VirtualBox のメモリを 8GB 以上、できれば 16GB にします。

ディスク不足

Docker イメージや DB データでディスクを使います。

df -h
docker system df

不要なコンテナやイメージを削除します。

docker system prune

Docker socket 権限

Floci から Docker を操作できない場合は、Docker socket のマウントや権限を確認します。

ls -l /var/run/docker.sock
docker ps

まとめ

Step 2 では、Floci を使って RDS / ECS / EC2 のローカル検証を行いました。

Step 1 では軽量な AWS 互換 API の検証が中心でしたが、Step 2 では Docker コンテナを実際に起動するサービスを扱います。

そのため、以下が重要です。

  • VM の CPU / メモリ / ディスクに余裕を持たせる
  • /var/run/docker.sock の扱いに注意する
  • 4566 番ポートを外部公開しない
  • 検証後は不要なコンテナを削除する
  • 最終確認は実 AWS でも行う

ローカルで AWS の雰囲気をつかむには便利ですが、本番 AWS と完全一致するわけではありません。
特に IAM / VPC / セキュリティグループ / RDS / ECS / EC2 の本番差分は、最終的に実 AWS で確認するのが安全です。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?