繁体   English   中英

使用参数在AWS SAM中动态创建资源名称

[英]Dynamically create resource names in AWS SAM using parameters

如果可以的话,我想在使用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来做到这一点。

您可以使用Sub功能在CloudFormation中构造资源名称。 大致情况:

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

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

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

为什么这种方法行不通的缺失部分是您需要将参数以特定格式传递给sam deploy命令。 通过阅读AWS文档, sam deploy是AWS aws 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

这种方法使我可以传递参数并在部署云形成堆栈时动态更改值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM