AWS Cloudformation: условно создайте свойства ресурсов - PullRequest
0 голосов
/ 05 декабря 2018

Я знаю, что с помощью Условия возможно условно (что еще?) Создавать ресурсы.

Я пытаюсь найти способ, хотя условно создать свойства ресурсов;

в моем случае я создаю несколько EC2 экземпляров в подсети с общедоступным назначением ip по умолчанию = false.

Иногда, хотя для целей отладки я хочу, чтобы мои экземпляры получали публичные IP-адреса.

Теперь я должен прокомментировать вход / выход SG / Subnet и NetworkInterfaces свойства ниже (они не идут вместе)

  myEC2:
    Type: AWS::EC2::Instance
    Metadata:
      Comment: My EC2 Instance
      AWS::CloudFormation::Init:
        config:
          commands:
            01_provision:
              command:
                !Sub |
                  sed -i "s/somestring/${somevar}/" /some/path/
    CreationPolicy:
      ResourceSignal:
        Timeout: PT4M
    Properties:
      ImageId: !FindInMap [ MyAamiMap, 'myami', amiid ]
      InstanceType: "t2.2xlarge"
      # SubnetId: !Ref SBNDemo1
      # SecurityGroupIds: [!Ref SGInternalDemo]
      NetworkInterfaces:
        - AssociatePublicIpAddress: "true"
          DeviceIndex: "0"
          GroupSet:
            - Ref: "SGInternalDemo"
          SubnetId:
            Ref: "SBNDemo1"
      UserData:
        "Fn::Base64":
          !Sub |
            #!/bin/bash -xe
            # Start cfn-init
            /usr/local/bin/cfn-init -s ${AWS::StackId} -r myEC2 --region ${AWS::Region} || echo 'Failed to run cfn-init'
            # All done so signal success
            /usr/local/bin/cfn-signal -e $? --stack ${AWS::StackId} --resource myEC2 --region ${AWS::Region}

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Это может быть немного поздно, но у меня недавно был такой же вопрос.

Из Документы AWS , вы можете использовать Fn :: If для установки свойствсоответственно.

Шаблон будет выглядеть следующим образом:

Properties:
  ImageId: !FindInMap [ MyAamiMap, 'myami', amiid ]
  InstanceType: "t2.2xlarge"
  # SubnetId: !Ref SBNDemo1
  # SecurityGroupIds: [!Ref SGInternalDemo]
  NetworkInterfaces:
    !If
    - YourCondition
    - 
      AssociatePublicIpAddress: "true"
      DeviceIndex: "0"
      GroupSet:
        - Ref: "SGInternalDemo"
      SubnetId:
        Ref: "SBNDemo1"
    - !Ref "AWS::NoValue"

AWS :: NoValue означает, что свойства NetworkInterfaces не будут установлены.

0 голосов
/ 05 декабря 2018

Возможно, я неправильно понимаю, но это похоже на вариант использования параметра, а не на случай использования условия.Я говорю это, потому что вы не говорите, при каких условиях вы хотели бы публичный IP.Просто "иногда для целей отладки" Как шаблон узнает, что вы отлаживаете?Вы должны указать это с помощью параметра.

проверить документы https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html

Таким образом, вы можете иметь публичный параметр ip и параметр идентификатора подсети и передавать то, что вам нравится при создании стека.,

Один из способов, которым могут быть полезны условия, - создать параметр отладки, который будет переключать общедоступные / приватные ip и подсеть.Это то, о чем вы думали?

Чтобы использовать условия для свойств, используйте функцию IF

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-conditions.html

Я предлагаю настроить вашу общедоступную подсеть для предоставления публичного IP-адреса назапустить, и, конечно, убедиться, что ваша частная подсеть этого не делает.Затем просто передайте подсеть в качестве параметра.

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip

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