🐷
LocalStackについて
1. LocalStackとは
AWS環境をローカル環境で再現できるもの。AWSサービスを使ったアプリケーション開発を行う際に、クラウド環境を用意しなくても、ローカルの環境で開発・テストを行うことができる。今回はS3に画像データのアップロード処理を行う実装をし、その際に利用した。S3以外にも以下に記載のサービスを再現できるらしい。
- DynamoDB
- Lambda
- SQS
- SNS
2. 環境構築方法
今回はcompose.ymlに以下のような記述を行い、LocalStackの環境を構築した。
services:
...
localstack:
container_name: localstack
ports:
- "4566:4566" # Edge port for LocalStack
volumes:
- "./localstack-scripts:/etc/localstack/init/ready.d" # ready hook
- "./var/run/docker.sock:/var/run/docker.sock"
image: localstack/localstack:s3-latest
env_file:
- ./compose.env
environment:
DEBUG: 1
AWS_ENDPOINT_URL: http://localstack:4566
AWS_ACCESS_KEY_ID: test
AWS_SECRET_ACCESS_KEY: test
AWS_DEFAULT_REGION: ap-northeast-1
AWS_S3_BUCKET_NAME: myBucket
AWS_S3_BUCKET_REGION: ap-northeast-1
AWS_S3_ENDPOINT_URL: http://localstack:4566
FILE_ID_SALT: DEV
TZ: Asia/Tokyo
networks:
- backend
stop_grace_period: 1s # LocalStack のコンテナが停止する際の待機時間を 1秒 に設定。
./localstack-scriptsディレクトリ配下にS3のバケットを初期で作成するshを作成している。コンテナ内の /etc/localstack/init/ready.d にマウントすることで、LocalStack起動時に実行されるスクリプトを配置する。
また、LocalStackは認証不要のため、AWSアクセスキーなど任意で設定することができる。
3. AWS CLIを使ってできること
上記で作成したLocalStack環境に対してAWS CLIを使用することができる。(aws configure
でアクセスキーなどの設定は必要)
バケットの作成
aws --endpoint-url=http://localhost:4566 s3 mb s3://myBucket
作成されたバケットの確認
aws --endpoint-url=http://localhost:4566 s3 ls
ファイルのアップロード
echo "Hello, World!" > hello-world.txt
aws --endpoint-url=http://localhost:4566 s3 cp hello-world.txt s3://myBucket/
ファイルの確認
aws --endpoint-url=http://localhost:4566 s3 ls s3://myBucket/
Discussion