0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】SAMデプロイのパラメータにJSON形式の文字列を渡す

Posted at

はじめに

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 の値は以下のようになる:

image.png

デフォルト値を更新したテンプレートでスタックを更新しても、スタックのパラメータの値は更新されないため、上記のオプションを利用する必要がある。

参考:

正しい渡し方

  • スペースを入れない
  • ダブルクォーテーションをエスケープする

例:

sam deploy --parameter-overrides \
  Headers='{\"User-agent\":\"Mozilla/5.0\",\"Connection\":\"keep-alive\",\"a\":\"b\"}'

更新後のパラメータ:

image.png

"a":"b" が追加され、意図したとおりに更新できている。

間違った渡し方

コロンやコンマの後にスペースを入れる

例:

sam deploy --parameter-overrides \
  Headers='{\"User-agent\": \"Mozilla/5.0\", \"Connection\": \"keep-alive\", \"a\": \"b\"}'

image.png

ドキュメントに記載のとおり、スペースをいれるとそこで1つのパラメータとみなされるためうまくいかない。

AWS SAM CLI 形式は明示的なキーと値のキーワードで構成され、各オーバーライドはスペースで区切られます。

参考:
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html

エスケープしない場合

ダブルクォーテーションをエスケープしない場合、正しくパラメータを渡すことができない。

例:

sam deploy --parameter-overrides \
  Headers='{"User-agent":"Mozilla/5.0","Connection":"keep-alive","a":"b"}'

image.png

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?