なぜか公式ドキュメントでも情報が少ないのでこちらで共有しておきます。
困ったこと
Dockerイメージ環境変数を渡したいけどできない!?
ラムダレイヤーなどと同じ扱いで、ビルド済みのコンテナに環境変数は渡せなさそう
(いい方法あったら教えてください。)
結論
DockerBuildArgs
を使ってdcoker build 引数に環境変数を追加する
template.yml
Resource:
Function:
Type: AWS::Serverless::Function
Properties:
PackageType: Image
MemorySize: 512
Metadata:
DockerTag: python3.9
DockerContext: ./function
Dockerfile: Dockerfile
# ここ重要
DockerBuildArgs:
BUCKET_NAME: my-s3-backet-name
TABLE_NAME: !Ref TableName
そして Dockerfile内で取得する
# ARG ブロックで取得
ARG BUCKET_NAME
ARG TABLE_NAME
# 環境変数にわたす
ENV S3_BUCKET_NAME=$BUCKET_NAME
ENV DYNAMO_DB_TABLE_NAME=$TABLE_NAME
これでSAMテンプレートで作成したリソース情報を取得できますね。
app.py
TABLE_NAME = os.environ.get("DYNAMO_DB_TABLE_NAME")
BUCKET_NAME = os.environ.get("S3_BUCKET_NAME")
トークンやパスワードなど機密情報をわたす際は Secrets Manager を使いましょう