Облакообразование условного шаблонаURL - PullRequest
1 голос
/ 21 апреля 2020

Есть ли способ сделать условные URL-адреса шаблонов в облачной информации?

Это не удается, поскольку он не оценивается до шага aws cloudformation deploy и выдает ошибку, говоря, что templateURL должен быть ссылкой s3. Когда я жестко запрограммировал один из URL-адресов, он загрузит этот относительный файл в s3, а в упакованном окончательном шаблоне будет только URL-адрес s3.

Это не работает (предварительно aws шаг пакета с информацией об облачности)

   Vpc:
    Type: 'AWS::CloudFormation::Stack'
    Properties:
      Parameters:
        AlertingModule: !GetAtt 'Alerting.Outputs.StackName'
        NatGateways: 'true'
      TemplateURL: !If [IsProduction, './default-vpc-module.yml', './production-vpc-module.yml']

Когда URL-адрес жестко закодирован в нем, он будет упакован в этот файл (шаг * после публикации облачной информации)

    VpcModule:
          Fn::GetAtt:
          - Vpc
          - Outputs.StackName
        AlertingModule:
          Fn::GetAtt:
          - Alerting
          - Outputs.StackName
        Priority: '2'
        HealthCheckPath: /health-check.php
      TemplateURL: https://s3.amazonaws.com/my-cicd-bucket-/fe556ff9386a28c063c4a110b31b.template

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Вот что я в итоге сделал, но мне это не нравится.

  Vpc:
    Condition: IsProduction
    Type: 'AWS::CloudFormation::Stack'
    Properties:
      Parameters:
        AlertingModule: !GetAtt 'Alerting.Outputs.StackName'
        NatGateways: 'true' # reduce costs
      TemplateURL: ./production-vpc-module.yml
  Vpc:
    Condition: IsNotProduction
    Type: 'AWS::CloudFormation::Stack'
    Properties:
      Parameters:
        AlertingModule: !GetAtt 'Alerting.Outputs.StackName'
        NatGateways: 'true' # reduce costs
      TemplateURL: ./default-vpc-module.yml
0 голосов
/ 21 апреля 2020

Да, вы, безусловно, можете добиться того, чего добились после того, как я сделал это, ссылаясь на URL-адрес s3, используя пакет aws cloudformaiton, а также s3 cp на этапе сборки кода для обеспечения соблюдения соглашений об именах для URL. Пока пути вашего шаблона различаются по-разному.

Чтобы обеспечить очень гибкий пример, вы можете использовать! Sub с оператором! If для замены в имени компонента Dynami c, что также позволит вам используйте! Ref внутри оператора! If:

Parameters:
  StageProd:
    Description: Environment
    Default: "production"
    Type: String
.......

......
    TemplateURL: !Sub 
        - https://${CfnBucketName}.s3-ap-southeast-2.amazonaws.com/${CfnKeyPrefix}/SomeFileName-${Stage}.yaml
        - { Stage: !If [ IsProduction, !Ref StageProd, "default"]}

Вышеприведенное должно соответствовать практически любой комбинации названий динамических c, которых вы хотите достичь; тем не менее, вы также можете очень сильно упростить вышесказанное с помощью простого! Sub, заменяющего сценическое имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...