はじめに
AWS CLI による CloudFormation スタックのパラメータ更新は --parameter-overrides オプションを使用する。
参考:
このパラメータに JSON 形式の文字列を渡したい。このパラメータのデフォルト値はテンプレートでは次のように定義されている:
Transform: AWS::Serverless-2016-10-31
Parameters:
Headers:
Type: String
Description: Headers for HTTP requests
Default: >
{
"User-Agent": "Mozilla/5.0",
"Connection": "keep-alive"
}
Resources:
DemoFunction:
Type: AWS::Serverless::Function
CodeUri: ./
Handler: demo.lambda_handler
Runtime: Python3.13
Role: arn:aws:iam::123456789012:role/service-role/demo-role
Environment:
Variables:
HEADERS: !Ref Headers
このテンプレートで作成したスタックのパラメータ Headers の値は以下のようになる:
デフォルト値を更新したテンプレートでスタックを更新しても、スタックのパラメータの値は更新されないため、上記のオプションを利用する必要がある。
参考:
正しい渡し方
- スペースを入れない
- ダブルクォーテーションをエスケープする
例:
sam deploy --parameter-overrides \
Headers='{\"User-agent\":\"Mozilla/5.0\",\"Connection\":\"keep-alive\",\"a\":\"b\"}'
更新後のパラメータ:
"a":"b" が追加され、意図したとおりに更新できている。
間違った渡し方
コロンやコンマの後にスペースを入れる
例:
sam deploy --parameter-overrides \
Headers='{\"User-agent\": \"Mozilla/5.0\", \"Connection\": \"keep-alive\", \"a\": \"b\"}'
ドキュメントに記載のとおり、スペースをいれるとそこで1つのパラメータとみなされるためうまくいかない。
AWS SAM CLI 形式は明示的なキーと値のキーワードで構成され、各オーバーライドはスペースで区切られます。
エスケープしない場合
ダブルクォーテーションをエスケープしない場合、正しくパラメータを渡すことができない。
例:
sam deploy --parameter-overrides \
Headers='{"User-agent":"Mozilla/5.0","Connection":"keep-alive","a":"b"}'
参考



