🗂
LocalStackの起動時にS3バケットを作成する
LocalStackはAWSの各種APIをモックしてローカル環境で簡単に利用することができますがPRO版でないとデータを永続化できません。そのため、起動するたびにS3のバケットなどを作成する必要があります。
LocalStackにはこの問題を解決するための仕組みとして特定のタイミングでスクリプトを自動的に実行できるイベントフックがあります。これを利用すれば、起動時にS3バケットの作成などを自動化できます。
フックタイミング
以下の4つのタイミングでスクリプトをフックできます。
-
boot
:LocalStackの起動前に実行 -
start
:LocalStackが起動時に実行 -
ready
:LocalStackが起動完了後(利用可能になった時点)に実行 -
shutdown
:LocalStackの終了時に実行
フック用スクリプトの配置
スクリプトを実行するには、以下のディレクトリに実行権限を付けたスクリプトを配置します。使用可能なスクリプトはシェルスクリプト(.sh
)またはPythonスクリプト(.py
)です。実行権限がついていないとエラーになってしまうので注意してください。
/etc
└── localstack
└── init
├── boot.d # 起動前
├── start.d # 起動時
├── ready.d # 起動完了後(利用可能になった時点)
└── shutdown.d # 終了時
起動スクリプトの作成
スクリプトファイル名をinit_s3.sh
とし、以下の内容で作成します。
#!/bin/bash
awslocal s3 mb s3://assets
awslocal s3api put-bucket-cors --bucket assets --cors-configuration '{"CORSRules": [{"AllowedHeaders": ["*"], "AllowedMethods": ["GET","PUT","POST","DELETE"], "AllowedOrigins": ["*"], "MaxAgeSeconds":3000}]}'
docker-composeでLocalStackコンテナにマウントする
作成したスクリプトをdocker-composeでマウントします。
services:
localstack:
image: localstack/localstack
ports:
- "4566:4566"
environment:
- DEBUG=${DEBUG:-0}
volumes:
- localstack:/var/lib/localstack
- /var/run/docker.sock:/var/run/docker.sock
- ./init_s3.sh:/etc/localstack/init/ready.d/init_s3.sh
これにより、LocalStackを起動するだけで、自動的にS3バケットが作成され、CORS設定も完了した状態になります。
Discussion