*️⃣

AWS SAMテンプレートに埋め込むSecret Manager値

2025/02/25に公開

テンプレートの書き方

Secret Managerに登録したシークレット値をSAMテンプレートで展開するやり方はこちら

SendRequestFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: path/to/function-code.ts
      Environment:
        Variables:
          SERVER_INFO: '{{resolve:secretsmanager:server_info}}'  # <-- これ

Secret値が変わったとき

Secret Manager上の値を差し替えただけでは、Lambda環境変数は更新されない。
方法は主に2つ。

1. 手で更新する

一番確実かつ楽な方法。
Lambda環境変数側の値もSecret Manager値と同様に更新する。

2. Lambda関数の更新を発生させる

先ほどの例だとこのように、適当な環境変数を追加するなどでLambda関数に更新を発生させる。

SendRequestFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: path/to/function-code.ts
      Environment:
        Variables:
          SERVER_INFO: '{{resolve:secretsmanager:server_info}}'
          DUMMY_VERSION: '1'  # <-- 追加

これでデプロイすればSecret Manager値の解決が行われるので、 SERVER_INFO は最新の値になる。
その後 DUMMY_VERSION は削除して再度デプロイ。

補足:公式ドキュメント

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/dynamic-references-secretsmanager.html

リファレンスパターンとしてシークレット値のバージョンを含められるようなので、ここで指定してデプロイすれば一発でいけるのかな?

{{resolve:secretsmanager:secret-id:secret-string:json-key:version-stage:version-id}}

Discussion