【问题标题】:override parameters in parameter file for cloudformation覆盖参数文件中的参数以进行 cloudformation
【发布时间】:2019-03-26 17:21:14
【问题描述】:

假设我有在 json 文件中创建 cloudformation 堆栈所需的所有参数,但想覆盖参数文件中的一些参数..这可能吗?

aws cloudformation create-stack \
 --stack-name sample-stack \
 --template-body file://sample-stack.yaml \
 --parameters file://sample-stack.json \
 --capabilities CAPABILITY_IAM \
 --disable-rollback \
 --region us-east-1 \
 --output json && \
aws cloudformation wait stack-create-complete \
 --stack-name sample-stack

所以可以说sample-stack.json 文件中有 10 个参数,但我有 2 个参数我想从该文件中覆盖。

这可能吗?

谢谢

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    目前在 AWS CLI 中不可用,但在 GitHub 上有一个 feature request。现在,您需要编写脚本以在创建堆栈之前生成覆盖。另一种可能的选择是将您的值存储在您可以动态引用的东西中,例如 Parameter Store,并在创建堆栈之前通过 API 更新它们。

    【讨论】:

      【解决方案2】:

      如果您想更新一个堆栈并仅指定更改的参数列表,您可以查看我编写的this shell 脚本。

      用法:

      ▶ bash update_stack.sh -h
      Usage: update_stack.sh [-h] STACK_NAME KEY1=VAL1 [KEY2=VAL2 ...]
      Updates CloudFormation stacks based on parameters passed here as key=value pairs. All
        other parameters are based on existing values.
      

      为了解决你的问题,你可以借用edit()函数:

      PARAMS='sample-stack.json'
      
      edit() {
        local key value pair
      
        for pair in "$@" ; do
          IFS='=' read -r key value <<< "$pair"
          jq --arg key "$key" \
             --arg value "$value" \
            '(.[] | select(.ParameterKey==$key)
            | .ParameterValue) |= $value' \
            "$PARAMS" > x ; mv x "$PARAMS"
        done
      }
      
      cp $PARAMS $PARAMS.bak
      edit param1=newval1 param2=newval2
      

      然后像往常一样创建你的堆栈。

      【讨论】:

      • 如果我想替换 parameters.json 文件中的 3 个参数值怎么办? jq 命令看起来如何?..例如 param-key1, param-key2, param-key3 => param-value1, param-value2, param-value3
      • @uberrebu,我已更新答案以显示我编写的用于处理多个参数的情况的 shell 脚本。让我知道你的想法!
      • 我真的很想运行一个不涉及创建另一个 json 文件的命令..想使用jq 替换..用例只是修改一些参数跨度>
      【解决方案3】:

      将文件中的所有值作为变量,并使用另一个脚本传递默认值或覆盖它们。 例如,我有我的 jason 文件 sample-stack.json,如下所示:

      [
          {
            "ParameterKey": "InstanceType",
            "ParameterValue": "${instance_type}"
          },
          {
            "ParameterKey": "DesiredSize",
            "ParameterValue": "${ASG_DESIRED_Number}"
          }
      ]
      

      在脚本文件中,运行以下命令替换

      instance_type=t3.small 
      envsubst < "${IN_FILENAME}" > "${OUT_FILENAME}"
      
      

      你需要做的是替换那些你需要的变量。对于那些不需要更改的,将传入默认值。

      【讨论】:

        猜你喜欢
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-02
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多