【问题标题】:Dynamically create resource names in AWS SAM using parameters使用参数在 AWS SAM 中动态创建资源名称
【发布时间】:2020-01-06 07:59:34
【问题描述】:

如果可能,我想在使用 AWS SAM 时为我的 Cloud Formation 堆栈中的资源动态创建名称。

例如当我打包或部署时,我希望能够像这样在命令行中添加一些东西:

sam package --s3-bucket..... --parameters stage=prod

当在我的template.yml 文件中以某种方式执行以下操作时:

Resources:
  OrdersApi:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: orders-api-${stage}
      CodeUri: ./src/api/services/orders/
      ...

注意FunctionNameOrdersApi 属性我想将其动态设置为orders-api-prod,这是我尝试在CLI 上传递的值。

使用无服务器框架我可以很容易地做到这一点,但我不知道如何用 SAM 做到这一点。

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation aws-sam


    【解决方案1】:

    您可以使用 Sub 等函数在 CloudFormation 中构造资源名称。类似的东西:

    Parameters:
      stage:
        Type: String
        Default: dev
        AllowedValues:
          - dev
          - prod
    Resources:
      OrdersApi:
        Type: AWS::Serverless::Function
        Properties:
          FunctionName: !Sub 'orders-api-${stage}'
    

    【讨论】:

      【解决方案2】:

      lexicore 发布的答案是正确的,您可以使用!Sub 函数在template.yaml 文件的某些部分中形成值,例如

      FunctionName: !Sub 'orders-api-${stage}'

      这不起作用的原因是您需要以特定格式将参数传递给sam deploy 命令。通过阅读 AWS 文档,sam deployaws cloudformation deploy... 的简写。该命令允许您使用以下语法传递参数:

      aws cloudformation deploy .... --parameter-overrides stage=dev

      此语法也可以与sam deploy 命令一起使用,例如

      sam deploy --template-file packaged.yml ..... --parameter-overrides stage=dev

      请注意,在此示例中,stage=dev 适用于 template.yaml 文件的 Parameters 部分,例如

      Parameters:
        stage:
          Type: String
          AllowedValues:
            - dev
            - stage
            - prod
      

      这种方法允许我在部署云形成堆栈时传入参数并动态更改值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-05
        • 1970-01-01
        • 2022-09-24
        • 2020-06-18
        • 1970-01-01
        • 2019-10-02
        • 2019-06-20
        • 2018-03-03
        相关资源
        最近更新 更多