Jim Nathlich
Jim Nathlich

Reputation: 11

Cloud fomation: 2 EIPs, 2PIPs on one ENI

Getting "EIP will not stabilize" errors. Code is below... might be the code, or could be cloudformation bug.

I would like to attach 2 EIPs to the interface, one to the primary private IP and one to the secondary private IP. It works when I do it from the console.

I can also add 2 private IPs and a single EIP attached to either the primary or secondary private IP successfully if I comment out the 'VIP' or 'EIP' code. Eithe one works, but not both together.

  #ServerOne.
  ServerOne:
    Type: AWS::EC2::Instance
    Properties:
      AvailabilityZone: !Ref AvailabilityZoneA
      DisableApiTermination: !Ref disableInstanceDeletion
      ImageId: !FindInMap [ RegionMap, !Ref "AWS::Region", ServerOne ]
      InstanceType: !FindInMap [ InstanceSizingMap, !Ref StackSizing, ServerOne ]
      EbsOptimized: !FindInMap [ InstanceSizingMap, !Ref StackSizing, ebsOptimizedInstances ]
      BlockDeviceMappings: 
          - DeviceName: "/dev/sda1"
            Ebs: 
              DeleteOnTermination: !FindInMap [ InstanceSizingMap, !Ref StackSizing, DeleteOnTermination ]
      KeyName: !Ref SSHKeyName
      Monitoring: 'false'
      NetworkInterfaces:
        -
          NetworkInterfaceId: !Ref ServerOneInterface
          DeviceIndex: 0
      Tags:
      - Key: Name
        Value: ServerOne
      - Key: Role
        Value: Infrastructure

        # ServerOne Server Network.  2 Private IPs, 2 EIPs all on one interface.
          ServerOneEIP:
            Type: AWS::EC2::EIP
            DependsOn: IGW
            Properties:
              InstanceId: !Ref ServerOne
              Domain: vpc

          ServerOneVIP:
            Type: AWS::EC2::EIP
            DependsOn: IGW
            Properties:
              InstanceId: !Ref ServerOne
              Domain: vpc

          ServerOneEIPAssociation:
            Type: AWS::EC2::EIPAssociation
            DependsOn: ServerOneVIPAssociation
            Properties:
              AllocationId: !GetAtt ServerOneEIP.AllocationId
              NetworkInterfaceId: !Ref ServerOneInterface
              PrivateIpAddress: !GetAtt ServerOneInterface.PrimaryPrivateIpAddress

          ServerOneVIPAssociation:
            Type: AWS::EC2::EIPAssociation
            DependsOn: IGW
            Properties:
              AllocationId: !GetAtt ServerOneVIP.AllocationId
              NetworkInterfaceId: !Ref ServerOneInterface
              PrivateIpAddress: !Select [ 0, !GetAtt ServerOneInterface.SecondaryPrivateIpAddresses ]

          ServerOneInterface:
            Type: AWS::EC2::NetworkInterface
            Properties:
              SubnetId: !Ref PublicSubnetA
              SecondaryPrivateIpAddressCount: 1
              Description: ServerOne Network Interface
              GroupSet: [
                !Ref PuppetClientSG ]
        # ServerOne is doing NAT, so Source/Dest is false.
              SourceDestCheck: false

Upvotes: 0

Views: 722

Answers (1)

Jim Nathlich
Jim Nathlich

Reputation: 11

Code is below.

---
Parameters:
Subnet:
Description: ID of the Subnet the instance should be launched in, this will 
link the instance to the same VPC.
Type: List<AWS::EC2::Subnet::Id>
Resources:
EIP1:
    Type: AWS::EC2::EIP
Properties:
  Domain: VPC
EIP2:
Type: AWS::EC2::EIP
Properties:
  Domain: VPC
Association1:
  Type: AWS::EC2::EIPAssociation
DependsOn:
- ENI
- EIP1
Properties:
  AllocationId:
    Fn::GetAtt:
    - EIP1
    - AllocationId
  NetworkInterfaceId:
    Ref: ENI
  PrivateIpAddress:
    Fn::GetAtt:
    - ENI
    - PrimaryPrivateIpAddress
Association2:
Type: AWS::EC2::EIPAssociation
DependsOn:
- ENI
- EIP2
Properties:
  AllocationId:
  Fn::GetAtt:
    - EIP2
    - AllocationId
  NetworkInterfaceId:
    Ref: ENI
  PrivateIpAddress:
    Fn::Select:
    - '0'
    - Fn::GetAtt:
      - ENI
      - SecondaryPrivateIpAddresses
ENI:
Type: AWS::EC2::NetworkInterface
Properties:
  SecondaryPrivateIpAddressCount: 1
  SourceDestCheck: false
  SubnetId:
    Fn::Select:
    - '0'
    - Ref: Subnet
OpenVPN:
    Type: AWS::EC2::Instance
    DependsOn:
    - ENI
    Properties:
    InstanceType: t2.micro
      AvailabilityZone: us-east-2a
      NetworkInterfaces:
      - NetworkInterfaceId:
          Ref: ENI
        DeviceIndex: '0'
    ImageId: ami-8a7859ef
    KeyName: jimkey

Upvotes: 1

Related Questions