3

我有一个SAM应用程序和一个CodePipeline设置来部署它。我想从Pipeline传递参数到SAM的YAML文件中。我试着用ParameterOverrides但似乎仍然得到:从CodePipeline传递参数的CloudFormation

参数:[AppName的]必须有值(服务:AmazonCloudFormation;状态代码:400;错误代码:ValidationError;请求ID:46d1dfd6-9a9a-11E7-a59d- 999618d6a174)

sam.yml参数definations

AWSTemplateFormatVersion : '2010-09-09' 
Transform: AWS::Serverless-2016-10-31 
Parameters: 
    AppName: 
    Type: String 
    Description: Prefix for resources 

定义参数的部分覆盖:

- Name: ExecuteChangeSet 
     Actions: 
     - Name: Lambda 
     ActionTypeId: 
      Category: Deploy 
      Owner: AWS 
      Version: 1 
      Provider: CloudFormation 
     Configuration: 
      ActionMode: CHANGE_SET_EXECUTE 
      ChangeSetName: !Sub 
      - '${PipelineName}-lambda' 
      - {PipelineName: !Ref PipelineName} 
      StackName: !Sub 
      - '${PipelineName}-lambda' 
      - {PipelineName: !Ref PipelineName} 
      ParameterOverrides: !Sub '{"AppName": "${PipelineName}-lambda"}' 

这是什么问题?

回答

2

看起来您正试图在CHANGE_SET_EXECUTE操作模式期间应用ParameterOverrides。如果我没弄错,在引擎盖下,这将映射到CloudFormations ExecuteChangeSet操作,该操作没有Parameters属性。

解决方法是在创建更改集时应用参数。这将在CodePipeline中以CHANGE_SET_REPLACE动作模式完成。或者,您可以查看CREATE_UPDATE。查看AWS CloudFormation Configuration Properties了解更多详情。

下面是创建了一个样本,然后执行更改组

- Name: CreateChangeSet 
    Actions: 
    - Name: Lambda 
     ActionTypeId: 
     Category: Deploy 
     Owner: AWS 
     Version: 1 
     Provider: CloudFormation 
     InputArtifacts: 
     - Name: BuildOutputArtifact 
     Configuration: 
     ActionMode: CHANGE_SET_REPLACE 
     ChangeSetName: !Sub 
      - '${PipelineName}-lambda' 
      - {PipelineName: !Ref PipelineName} 
     StackName: !Sub 
      - '${PipelineName}-lambda' 
      - {PipelineName: !Ref PipelineName} 
     ParameterOverrides: !Ref ProjectParameterOverrides 
     TemplatePath: BuildOutputArtifact::SamDeploymentTemplate.yaml 
- Name: ExecuteChangeSet 
    Actions: 
    - Name: Lambda 
    ActionTypeId: 
     Category: Deploy 
     Owner: AWS 
     Version: 1 
     Provider: CloudFormation 
    Configuration: 
     ActionMode: CHANGE_SET_EXECUTE 
     ChangeSetName: !Sub 
     - '${PipelineName}-lambda' 
     - {PipelineName: !Ref PipelineName} 
     StackName: !Sub 
     - '${PipelineName}-lambda' 
     - {PipelineName: !Ref PipelineName}