LocalStack内で動作している AWS Lambda から、他のリソースにアクセスするときのエンドポイントに localhost:4566
を設定してみたら、アクセスできなかったので調べた。
結論
環境変数 LOCALSTACK_HOSTNAME
を使う。
ドキュメント 上はこの変数はDEPRECATEDになっていて、 LOCALSTACK_HOST
を使うように言われているが、LocalStack 2.3.2 時点ではLambda上でos.Getenvしても LOCALSTACK_HOST
には値が入っていなかった。。
例
2024-03-05 追記
自分が読み間違えていた。 この環境変数はLocalStackのデフォルトのURL localhost.localstack.cloud:4566 を任意の値に設定するための環境変数であって、実行環境にセットされるものではなさそう。
https://github.com/localstack/localstack/blob/76292e1d01d3141cbedfc0aea9f7b36095d6a23a/localstack/services/lambda_/invocation/execution_environment.py#L146
LOCALSTACK_RUNTIME_ENDPOINT
で取得するのがよさそう。
⇒ この環境変数もセットされてなかった。なにもわからん…
Lambdaハンドラー内で環境変数を取得してみると、以下のような環境変数が取れた (一部抜粋)
AWS_ENDPOINT_URL=http://172.28.0.3:4566
AWS_EXECUTION_ENV=AWS_Lambda_python3.12
AWS_LAMBDA_FUNCTION_MEMORY_SIZE=128
AWS_LAMBDA_FUNCTION_NAME=my-function
AWS_LAMBDA_FUNCTION_TIMEOUT=3
AWS_LAMBDA_FUNCTION_VERSION=$LATEST
AWS_LAMBDA_INITIALIZATION_TYPE=on-demand
AWS_LAMBDA_RUNTIME_API=127.0.0.1:9001
AWS_REGION=ap-northeast-1
EDGE_PORT=4566
LAMBDA_RUNTIME_DIR=/var/runtime
LAMBDA_TASK_ROOT=/var/task
LANG=en_US.UTF-8
LC_CTYPE=C.UTF-8
LD_LIBRARY_PATH=/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib
LOCALSTACK_HOSTNAME=172.28.0.3
DEBUG=1
にしてログを取ると、Lambda発火時に以下のようなログが出ていた。
ここでは LOCALSTACK_RUNTIME_ENDPOINT
が取れているけど、求めているものとは違った。
素直に localhost.localstack.cloud:4566
を使うようにしよう
2024-03-05T03:40:04.269 DEBUG --- [cs:$LATEST_0] l.u.c.docker_sdk_client : Creating container with attributes: {'self': <localstack.utils.container_utils.docker_sdk_client.SdkDockerClient object at 0xffffa4d012d0>, 'image_name': 'public.ecr.aws/lambda/python:3.12', ... 'LOCALSTACK_RUNTIME_ID': '4b44dc24815c8c57feb4e2a55dc389a5', 'LOCALSTACK_RUNTIME_ENDPOINT': 'http://172.28.0.3:4566/_localstack_lambda/4b44dc24815c8c57feb4e2a55dc389a5', 'LOCALSTACK_FUNCTION_ACCOUNT_ID': '000000000000', 'AWS_ENDPOINT_URL': 'http://172.28.0.3:4566', '_HANDLER': 'main.lambda_handler', 'AWS_EXECUTION_ENV': 'AWS_Lambda_rapid', 'LOCALSTACK_INIT_LOG_LEVEL': 'debug', 'LOCALSTACK_MAX_PAYLOAD_SIZE': 6291556},