💡
LocalStack Community版をインストール後にセットアップする
前回の続きです。
設定
- リージョン、資格情報(鍵)の設定ファイル/フォルダを作る
- Dockerネットワークを作る
- コンテナ定義用の
docker-compose.yaml
ファイルを作り、LocalStackを起動する - Lambda の関数一覧を表示する
1. リージョン、資格情報(鍵)の設定ファイル/フォルダを作る
aws configure --profile default
AWS Access Key ID [None]: test
AWS Secret Access Key [None]: test
Default region name [None]: ap-northeast-1
Default output format [None]:
出力
# Windows
C:\Users\<user-name>\.aws\config
C:\Users\<user-name>\.aws\credentials
# Linux, Mac
~/.aws/config
~/.aws/credentials
[default]
region = ap-northeast-1
[default]
aws_access_key_id = test
aws_secret_access_key = test
鍵をシェル変数として書きたい場合は以下のコマンドで実行する
# Windows
set AWS_ACCESS_KEY_ID=test
set AWS_SECRET_ACCESS_KEY=test
# Linux, Mac
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
2. Dockerネットワークを作る
docker network create localstack
docker-compose.yaml
ファイルを作り、LocalStackを起動する
3. コンテナ定義用の このファイルはどのディレクトリに置いてもOK
version: "3.8"
networks:
default:
external:
name: "localstack"
services:
localstack:
container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
image: localstack/localstack
ports:
- "127.0.0.1:4566:4566" # LocalStack Gateway
- "127.0.0.1:4510-4559:4510-4559" # external services port range
environment:
- DEBUG=${DEBUG-}
- LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR-}
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
LocalStackを起動します。前回のように localstack start -d
で作ったコンテナが既に存在する場合は、そのコンテナは削除してから、下のコマンドを実行して下さい。
docker-compose up -d
4. Lambda の関数一覧を表示する
# Windows
docker run -v %USERPROFILE%\.aws:/root/.aws --network localstack --rm -it amazon/aws-cli --endpoint-url=http://localstack:4566 lambda list-functions
# Linux, Mac
docker run -v ~/.aws:/root/.aws --network localstack --rm -it amazon/aws-cli --endpoint-url=http://localstack:4566 lambda list-functions
出力
Unable to find image 'amazon/aws-cli:latest' locally
latest: Pulling from amazon/aws-cli
d78505e61525: Pull complete
9d96058e0712: Pull complete
f5c06ad21880: Pull complete
f026ffcf4f51: Pull complete
f3bfdd5c5d77: Pull complete
Digest: sha256:77606beb4000a4bc206744f1ed2666474c9c572dd6e39c97e3fa1a711190674c
Status: Downloaded newer image for amazon/aws-cli:latest
{
"Functions": []
}
エラーについて
~/.aws
ディレクトリを -v
でマウントしてない場合
awscli
をDocker上で実行しているため、ホストOS上のストレージに設定ファイルがあっても awscli
がホストOS上のストレージにアクセス出来ません。
なので、Dockerコンテナ上でホストOS上の設定ファイルをアクセスできるようにマウントしておく必要があります。
You must specify a region. You can also configure your region by running "aws configure".
--region
を設定しても認証情報のエラーが出ます
Unable to locate credentials. You can configure credentials by running "aws configure".
localstack start
で実行している場合
Dockerコンテナ同士でネットワークの接続とホストOSでポートの接続が出来ていないので、 docker-compose.yaml
でLocalStackを起動し直す必要があります。
↑解釈が変かもしれないので
Could not connect to the endpoint URL: "http://localstack:4566/2015-03-31/functions/"
An error occurred (InternalError) when calling the ListFunctions operation
region
を存在しないリージョン名で実行している場合
LocalStackコンテナのログでエラーを見れます。
~/.aws/config
のregion = ここ
をリージョンとゾーンにある値で書き換えましょう。
2023-02-25 22:56:22 localstack_main | ValueError: 'local' is not a valid AWS region name for lambda
参考
Setting up local region and credentials to run LocalStack
AWS CLI v2 with Docker and LocalStack
localstack/docker-compose.yml
aws-cliとdockerを使う際、認証情報のマウントを飛ばしてしまった件
Discussion