このエントリについて
- こちらのエントリ と同じく、以前残したメモを供養する目的で書きました
- LocalStack はv3がリリース済みですが、ここに書いたのはv2の使用時に確認した設定やコマンドです。v3のコンテナで動くことを確認したうえで書いていますが、v3に最適化した訳でない点はご承知おきください
コンテナの LocalStack に対しAWS CLIコマンドを発行する方法
- コンテナの外から
aws
コマンドを使う -
awslocal
コマンドを使う
(事前準備) LocalStack 用のプロファイルを定義
-
aws
コマンドの--profile
に与える LocalStack 用のプロファイルを用意しておく - 中身は適当でよいが、存在するAWS環境に有効なプロファイルを使うと LocalStack の方でエラーにしてしまうはず
(例) ~/.aws/config
[profile localstack]
region = ap-northeast-1 # この値は AWS_DEFAULT_REGION 環境変数と合わせるのが無難
output = json
(例) ~/.aws/credentials
[localstack]
aws_access_key_id = Dummy
aws_secret_access_key = Dummy
コンテナの外から aws
コマンドを使う
-
--endpoint-url
と--profile
を与えてaws
コマンドを発行する -
--profile
には、予め用意しておいた LocalStack 用のプロファイルを指定する
(例) s3
コマンドを発行
下記は s3
コマンドだが lambda
や dynamodb
なども同じやり方
- localstack/localstack イメージを使用
- "localstack" というプロファイルを使用し、ポート番号には 4566 を指定
% aws s3 --endpoint-url http://localhost:4566 --profile localstack mb s3://localstack-sample-bucket
make_bucket: localstack-sample-bucket
% aws s3 --endpoint-url http://localhost:4566 --profile localstack ls
2023-06-08 05:01:55 localstack-sample-bucket
awslocal
コマンドを使う
-
awslocal
は--endpoint-url
や--profile
を指定することなく、ローカルの LocalStack に対してaws
コマンドを発行するもの - Docker で localstack/localstack イメージから起動した場合、コンテナに入れば
awslocal
が使える状態になっている(コンテナ内でのインストールは不要) -
--endpoint-url
や--profile
の以外はaws
がawslocal
になるだけで、コマンドの体系は同じ-
aws s3 ls
は、そのままawslocal s3 ls
になる
-
- Docker にセットアップした LocalStack がデフォルトの設定なら、コンテナの外からでも
awslocal
によるコマンドが可能- デフォルトの 4566 ポート以外でセットアップするなどした場合は
AWS_ENDPOINT_URL
環境変数を設定して対応
- デフォルトの 4566 ポート以外でセットアップするなどした場合は
(例) s3 コマンドを実行
% docker container exec -it localstack-container /bin/bash
# awslocal s3 mb s3://localstack-sample-bucket
make_bucket: localstack-sample-bucket
# awslocal s3 ls
2023-06-08 05:47:43 localstack-sample-bucket
(補足) awslocal のインストール
- Mac なら pip で awscli-local パッケージ でインストールする
- Docker での起動も含めローカルに LocalStack をセットアップするなら、
awslocal
もローカルにインストールしておいた方が便利LocalStack コンテナに対してローカルからawslocal
を発行する方法もあると思いますが、aws
コマンドで足りるので調査しておらず、ここでは割愛します
pip install awscli-local