LoginSignup
0
0

More than 1 year has passed since last update.

AWS SAMでDocker + Lambdaで環境変数が渡せない

Last updated at Posted at 2022-02-21

なぜか公式ドキュメントでも情報が少ないのでこちらで共有しておきます。

困ったこと

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 を使いましょう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0