Cloudformation AWS: выбор между группами безопасности - PullRequest
0 голосов
/ 31 октября 2019

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

Я определил параметр и два условия, чтобы включить одну или другую политику с тем же именем (для поддержки зависимостей)

Но шаблон не работает для обеих опций,

Когда параметр имеет параметр True, стек работает, и со значением False отображается следующая ошибка:

Template format error: Unresolved resource dependencies [mySecurityGroup] in the Resources block of the template

это фрагмент шаблона:

 Parameters:
  KeyName:
    Description: EC2 KeyPair 
    Type: 'AWS::EC2::KeyPair::KeyName'
  Reception:
    Description: Enable reception
    Default: False
    Type: String
    AllowedValues: 
      - True
      - False
Conditions:
  Enable:
    !Equals [True, !Ref Reception]
  Disable:
    !Equals [False, !Ref Reception]
Resources:
  myVPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: myVPC
  mySubNet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !Ref myVPC
      CidrBlock: 10.0.0.0/24
      Tags:
        - Key: Name
          Value: mySubNet
  mySecurityGroup:
    Condition: Disable
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      VpcId: !Ref myVPC
      GroupDescription: Security Group for EC2 
      SecurityGroupIngress:
        - IpProtocol: udp
          FromPort: 4114
          ToPort: 4114
          CidrIp: 0.0.0.0/0
      Tags:
        - Key: Name
          Value: mySecurityGroup
  mySecurityGroup:
    Condition: Enable
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      VpcId: !Ref myVPC
      GroupDescription: Security Group for EC2
      SecurityGroupIngress:
        - IpProtocol: udp
          FromPort: 5683
          ToPort: 5683
          CidrIp: 0.0.0.0/0
      Tags:
        - Key: Name
          Value: mySecurityGroup
  myEC2:
    Type: 'AWS::EC2::Instance'
    Properties:
      KeyName: !Ref KeyName
      ImageId: ami-028188d9b49b32a80
      InstanceType: t2.nano
      NetworkInterfaces:
        - SubnetId: !Ref mySubNet
          AssociatePublicIpAddress: 'true'
          DeviceIndex: 0
          GroupSet:
            - !Ref mySecurityGroup
      Tags:
        - Key: Name
          Value: myEC2


Я не уверен, какой путь правильный

1 Ответ

0 голосов
/ 01 ноября 2019

Черт возьми, я не могу оставить комментарий, так как мой представитель 48, а не 50.: (

В любом случае, у меня нет фактического ОТВЕТА на ваш вопрос, но я надеюсь, что у меня естьздесь вам помогут.

  1. В разделе параметров у вас есть следующее:
Conditions:
  Enable:
    !Equals [True, !Ref Reception]
  Disable:
    !Equals [False, !Ref Reception]

1a. Это не сработает. Вам просто нужноодно условное утверждение:

Conditions: # Checks to see if Conditional Values are True
  ReceptionYes: !Equals [ !Ref Reception, True]
Вот где это становится липким.

Вам нужна условная строка в Ресурсах, например: (Где я застрял, где поставить эту строку ниже):

          !If [ReceptionYes, !Ref mySecurityGroup2, !Ref mySecurityGroup1]

First! Ref, если True, иначе, используйте второй! Ref

Теперь, в THEORY , вы ДОЛЖНЫ быть в состоянии сделать следующее:

  mySecurityGroup1:
    Condition: Disable
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      VpcId: !Ref myVPC
      GroupDescription: Security Group for EC2 
      SecurityGroupIngress:
        - IpProtocol: udp
          FromPort: 4114
          ToPort: 4114
          CidrIp: 0.0.0.0/0
      Tags:
        - Key: Name
          Value: mySecurityGroup
  mySecurityGroup2:
    Condition: Enable
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      VpcId: !Ref myVPC
      GroupDescription: Security Group for EC2
      SecurityGroupIngress:
        - IpProtocol: udp
          FromPort: 5683
          ToPort: 5683
          CidrIp: 0.0.0.0/0
      Tags:
        - Key: Name
          Value: mySecurityGroup

Ну, если это не сработает, надеюсь, это немного приблизит вас к ответу. : D

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