LocalStack とは、AWS のリソースのモックをローカルに作成するツール。
LocalStack は AWS CLI の練習をするのに最適なのではと思い立ち実験してみた。
前提
- Docker がインストールされていること
- AWS CLI がインストールされていること(AWS CLI のイメージへのエイリアスでも可)
LocalStack のコンテナ作成
LocalStack の Docker イメージを使用することでコマンド1発で LocalStack 環境が出来上がる。
docker run -itd --rm -p 4566:4566 localstack/localstack:latest
※ docker run のオプションの説明
-
-itd
:-i -t -d
の略。ざっくり言うと「バックグラウンド」で「起動しっぱなし」にする -
--rm
: コンテナ停止時にコンテナを削除 -
-p
: ホストとコンテナとのポート疎通設定。4566:4566
は「ホストの 4566 ポート」と「コンテナの 4566 ポート」を疎通させる設定
動作確認
localstack で作成されたリソースは http://localhost:4566 に公開される。( localstack v0.11.0 からの変更点)
--endpoint-url=http://localhost:4566
を設定することで localstack で作成されたリソースにアクセスできる。
※ AWS CLI の Docker イメージ を使用している場合、 localhost
でホストOSにアクセスできないため、以下の手順の localhost
を host.docker.internal
に読み替える。
パラメータストア作成
aws ssm put-parameter \
--name sample-param \
--value sample-value \
--type String \
--endpoint-url=http://localhost:4566
パラメータストア取得
aws ssm get-parameter --name sample-param --endpoint-url=http://localhost:4566
S3 バケット作成
aws s3 mb s3://sample-bucket --endpoint-url=http://localhost:4566
S3 バケット一覧取得
aws s3 ls --endpoint-url=http://localhost:4566
S3 ファイルアップロード
touch test.txt
aws s3 cp test.txt s3://sample-bucket/ --endpoint-url=http://localhost:4566
rm test.txt
S3 バケット内のオブジェクト一覧取得
aws s3 ls s3://sample-bucket --endpoint-url=http://localhost:4566
S3 バケット内のオブジェクト削除
aws s3 rm s3://sample-bucket/test.txt --endpoint-url=http://localhost:4566
まとめ
- LocalStack を使えば AWS CLI を試す環境が簡単に作れることが分かった
- 一部 AWS サービスのモックは 有料版 LocalStack が必要になるが、主要サービスは無料版で十分まかなえる
- LocalStack で心置きなくコマンドを実行して AWS CLI に慣れていきたいと思う
参考ページ
-
docker run
のリファレンス
https://docs.docker.com/engine/reference/commandline/run/ -
LocalStack のリポジトリ
https://github.com/localstack/localstack -
aws ssm
のリファレンス
https://docs.aws.amazon.com/cli/latest/reference/ssm/index.html -
aws s3
のリファレンス
https://docs.aws.amazon.com/cli/latest/reference/s3/index.html -
host.docker.internal の説明
https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds