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-instances や docker 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 で確認するのが安全です。
参考リンク
-
Floci GitHub
https://github.com/floci-io/floci -
Floci Services Overview
https://floci.io/floci/services/ -
Floci Quick Start
https://floci.io/floci/getting-started/quick-start/ -
Docker Engine for Ubuntu
https://docs.docker.com/engine/install/ubuntu/ -
Docker Linux post-installation steps
https://docs.docker.com/engine/install/linux-postinstall/ -
AWS CLI v2 インストール
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html