CodePipeline не может найти мой шаблон Yaml - PullRequest
0 голосов
/ 31 января 2019

Я строю конвейер CD, используя AWS CodePipeline.Я извлекаю свой шаблон YAML из использования корзины S3 в качестве источника для конвейера, а затем помещаю его в качестве выходного артефакта, чтобы он был входом для этапа развертывания в качестве входного артефакта.

Проблема, с которой я сталкиваюсь, заключается вэтот CodePipeline зашифровывает шаблон YAML и помещает его в хранилище артефактов S3, поэтому, когда CloudFormation просматривает входную артефакт, он находит файл, так как его имя изменяется, так как можно остановить конвейер от шифрования артефакта?

Вот мой шаблон CodePipeline CloudFormation:

Resources:
  ArtifactStoreBucket:
    Type: AWS::S3::Bucket
    Properties:
      VersioningConfiguration:
        Status: Enabled

  Pipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:

      ArtifactStore:
        Location: !Ref 'ArtifactStoreBucket'
        Type: S3

      DisableInboundStageTransitions: []

      Name: !Ref 'PipelineName'

      RoleArn: !GetAtt [PipelineRole, Arn]

      Stages:

        - Name: S3Source
          Actions:
          - Name: TemplateSource
            ActionTypeId:
              Category: Source
              Owner: AWS
              Provider: S3
              Version: '1'
            Configuration:
              S3Bucket: !Ref 'S3Bucket'
              S3ObjectKey: !Ref 'CFNTemplateName'
            OutputArtifacts:
              - Name: TemplateSource
                EncryptionDisabled: true
            RunOrder: '1'    

        - Name: DeployToTest
          Actions:
            - Name: CreateChangeSetTest
              ActionTypeId:
                Category: Deploy
                Owner: AWS
                Version: 1
                Provider: CloudFormation
              Configuration:
                ChangeSetName: sample-lambda-dev
                ActionMode: CHANGE_SET_REPLACE
                StackName: sample-lambda-dev
                Capabilities: CAPABILITY_NAMED_IAM
                TemplatePath: !Sub "TemplateSource2::${CFNTemplateName}"
                RoleArn: !GetAtt [CFNRole, Arn]
              RunOrder: 1

            - Name: DeployChangeSetTest
              ActionTypeId:
                Category: Deploy
                Owner: AWS
                Version: 1
                Provider: CloudFormation
              Configuration:
                ChangeSetName: sample-lambda-dev
                ActionMode: CHANGE_SET_EXECUTE
                StackName: sample-lambda-dev
                RoleArn: !GetAtt [CFNRole, Arn]
              RunOrder: 2

Я убедился, что предоставляю правильный артефакт и правильные имена шаблонов.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

В действии CreateChangeSetTest есть две проблемы:

1) Отсутствует раздел входных артефактов - вы должны объявить, какие артефакты доступны для каждого действия.2) Имя артефакта неверно - вы определили выходной артефакт TemplateSource на исходной стадии, но используете TemplateSource2 name.

Измените шаг следующим образом:

            - Name: CreateChangeSetTest
          ActionTypeId:
            Category: Deploy
            Owner: AWS
            Version: 1
            Provider: CloudFormation
          Configuration:
            ChangeSetName: sample-lambda-dev
            ActionMode: CHANGE_SET_REPLACE
            StackName: sample-lambda-dev
            Capabilities: CAPABILITY_NAMED_IAM
            TemplatePath: !Sub "TemplateSource::${CFNTemplateName}"
            RoleArn: !GetAtt [CFNRole, Arn]
          RunOrder: 1
          InputArtifacts:
            - Name: TemplateSource
0 голосов
/ 31 января 2019

в этой строке:

TemplatePath:! Sub "TemplateSource2 :: $ {CFNTemplateName}"

- это Артефакт с именем TemplateSource2 - но у вас естьНет Output-Artifact TemplateSource2, определенного в вашем шаблоне.Это должно быть переименовано.

Для CFNTemplateName: Вы уже использовали это в разделе исходного кода, чтобы определить , где находится артефакт (который является zip-файлом )на s3 .

Когда вы объявляете TemplatePath, вы ссылаетесь на артефакт и объявляете путь внутри артефакта.

Fromt docs :

Расположение файла шаблона AWS CloudFormation, которое соответствует формату ArtifactName :: TemplateFileName.

Обновите эту строку следующим образом:

TemplatePath:! Sub "TemplateSource :: your / path / inside / the / zip / file"

...