CloudFormation передает параметры из CodePipeline

У меня есть приложение SAM и установка CodePipeline для его развертывания. Я хочу передать параметры из моего конвейера в файл YAML SAM. Я пробовал использовать ParameterOverrides, но все равно получаю:

Параметры: [AppName] должны иметь значения (Service: AmazonCloudFormation; код состояния: 400; код ошибки: ValidationError; идентификатор запроса: 46d1dfd6-9a9a-11e7-a59d-999618d6a174)

Мои sam.yml определения параметров

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"}'

Что в этом плохого?


person Jiew Meng    schedule 16.09.2017    source источник


Ответы (1)


Похоже, вы пытаетесь применить ParameterOverrides в CHANGE_SET_EXECUTE режиме действия. Если я не ошибаюсь, под капотом это отображается в CloudFormations ExecuteChangeSet, у которого нет свойства Parameters.

Решением этого является применение параметров при создании набора изменений. Это будет сделано в CodePipeline с CHANGE_SET_REPLACE режимом действия. В качестве альтернативы вы можете изучить CREATE_UPDATE. Ознакомьтесь с свойствами конфигурации AWS CloudFormation для более подробной информации.

Вот образец, который создает, а затем выполняет набор изменений

- 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}
person Jamie Starke    schedule 16.09.2017