🦔
CloudFormation resolve:secretsmanagerの罠
はじめに
resolve:secretsmanager
とは何かはここに詳しくのってます。
イメージとしては、以下のようにテンプレート内の値をSecretsManagerから取得できます。
便利ですね。
Function:
Type: AWS::Serverless::Function
Properties:
FunctionName: "Hello_World"
MemorySize: 2048
CodeUri: .
Handler: main
Runtime: go1.x
Environment:
Variables:
DB_PASSWORD: !Join ['', ['{{resolve:secretsmanager:', !ImportValue SecretsArn, ':SecretString:DB_PASSWORD}}']]
何の罠があるのか
上のテンプレートのDB_PASSWORDが要らなくなったので、SecretsManagerからキーを削除して、テンプレートも以下に更新します。
Function:
Type: AWS::Serverless::Function
Properties:
FunctionName: "Hello_World"
MemorySize: 2048
CodeUri: .
Handler: main
Runtime: go1.x
そしてデプロイしてみましょう。
そうすると、以下のようなエラーメッセージが表示されてしまいます。
Could not find a value associated with JSONKey in SecretString
参照していないはずなのにおかしいです。
なぜなのか
公式のissueがありますが、CloudformationのDeploy時に過去のテンプレートファイルのSecrets Keyが参照されてしまうようです。
対処法
テンプレートは以下のままでOKで、SecretsManagerに削除したKeyを一時的に追加します。(Valueは空でOK)
Function:
Type: AWS::Serverless::Function
Properties:
FunctionName: "Hello_World"
MemorySize: 2048
CodeUri: .
Handler: main
Runtime: go1.x
それでデプロイ完了です。
後処理
不要になったKeyを再度削除する必要があります。
SARAHでは一皿に特化したごはん情報の投稿・配信・収集・解析するサービスをtoC,toBと多角的に展開しています。アプリ / Web / SaaS / データサイエンス を最新の環境と技術で広く運用します。 技術スタック詳細はこちら→ stackshare.io/companies/sarah-inc
Discussion