1

Goal: Setup EC2 launch template for ASG, with Network interface settings.

Detail: ASG is to be launched in public subnet, and trying to avoid having a public IP.

Example CFN extract

     "NetworkInterfaces": [
      {
       "AssociatePublicIpAddress": false,
       "DeviceIndex": 0,
       "Groups": [
        {
         "Ref": "asgsg123123"
        }
       ]
      }

I checked the related question, but CFN gives me a different error.

Invalid launch template: When a network interface is provided, the security groups must be
a part of it. (Service: AmazonAutoScaling; Status Code: 400; Error Code: InvalidQueryParam
eter;

While through CFN it fails, I tried editing the Launch template in the AWS UI console and it worked, and can compare the template is the same with the CLI

aws ec2 describe-launch-template-versions --launch-template-id lt-123123123 --versions 11 | jq .LaunchTemplateVersions[].LaunchTemplateData.NetworkInterfaces[]
{
  "AssociatePublicIpAddress": false,
  "DeviceIndex": 0,
  "Groups": [
    "sg-123123123"
  ]
}

I did try enforcing the SG ID manually in case the "Ref" function was the problem, but still can not deploy.

Full template to reproduce:

{
 "Parameters": {
  "myvpc" : {
    "Type" : "AWS::EC2::VPC::Id"
  },
  "pubsubnet" : {
    "Type" : "AWS::EC2::Subnet::Id",
    "Description": "Must be in selected VPC!"
  }
 },
 "Resources": {
  "ec2sg": {
   "Type": "AWS::EC2::SecurityGroup",
   "Properties": {
    "GroupDescription": "test asg",
    "SecurityGroupEgress": [
     {
      "CidrIp": "0.0.0.0/0",
      "Description": "Allow all outbound traffic by default",
      "IpProtocol": "-1"
     }
    ],
    "VpcId": { "Ref": "myvpc" }
   }
  },
  "ltemp": {
   "Type": "AWS::EC2::LaunchTemplate",
   "Properties": {
    "LaunchTemplateData": {
     "BlockDeviceMappings": [
      {
       "DeviceName": "/dev/xvda",
       "Ebs": {
        "DeleteOnTermination": true,
        "Encrypted": true,
        "VolumeSize": 8,
        "VolumeType": "gp3"
       }
      }
     ],
     "EbsOptimized": true,
     "ImageId": "ami-0da54bf2af20a74b7",
     "InstanceType": "t3a.nano",
     "Monitoring": {
      "Enabled": true
     },
     "NetworkInterfaces": [
      {
       "AssociatePublicIpAddress": false,
       "DeviceIndex": 0,
       "DeleteOnTermination": true,
       "Groups": [
        {
         "Ref": "ec2sg"
        }
       ]
      }
     ],
     "SecurityGroupIds": [
      {
       "Fn::GetAtt": [
        "ec2sg",
        "GroupId"
       ]
      }
     ],
     "UserData": {
      "Fn::Base64": "#!/bin/bash\n#!/bin/bash -v\nset -euo pipefail\nyum update -y --security"
     }
    }
   }
  },
  "asg": {
   "Type": "AWS::AutoScaling::AutoScalingGroup",
   "Properties": {
    "VPCZoneIdentifier": [{"Ref": "pubsubnet"}],
    "MaxSize": "1",
    "MinSize": "0",
    "DesiredCapacity": "1",
    "HealthCheckGracePeriod": 300,
    "HealthCheckType": "EC2",
    "MixedInstancesPolicy": {
     "InstancesDistribution": {
      "OnDemandAllocationStrategy": "prioritized",
      "OnDemandBaseCapacity": 0,
      "OnDemandPercentageAboveBaseCapacity": 0,
      "SpotAllocationStrategy": "lowest-price",
      "SpotInstancePools": 10,
      "SpotMaxPrice": ""
     },
     "LaunchTemplate": {
      "LaunchTemplateSpecification": {
       "LaunchTemplateId": {
        "Ref": "ltemp"
       },
       "Version": {
        "Fn::GetAtt": [
         "ltemp",
         "LatestVersionNumber"
        ]
       }
      }
     }
    }
   },
   "UpdatePolicy": {
    "AutoScalingScheduledAction": {
     "IgnoreUnmodifiedGroupSizeProperties": true
    }
   }
  }
 }
}
Efren
  • 4,003
  • 4
  • 33
  • 75

1 Answers1

1

You have to remove your SecurityGroupIds from the AWS::EC2::LaunchTemplate resource. So it should be:

{
 "Parameters": {
  "myvpc" : {
    "Type" : "AWS::EC2::VPC::Id"
  },
  "pubsubnet" : {
    "Type" : "AWS::EC2::Subnet::Id",
    "Description": "Must be in selected VPC!"
  }
 },
 "Resources": {
  "ec2sg": {
   "Type": "AWS::EC2::SecurityGroup",
   "Properties": {
    "GroupDescription": "test asg",
    "SecurityGroupEgress": [
     {
      "CidrIp": "0.0.0.0/0",
      "Description": "Allow all outbound traffic by default",
      "IpProtocol": "-1"
     }
    ],
    "VpcId": { "Ref": "myvpc" }
   }
  },
  "ltemp": {
   "Type": "AWS::EC2::LaunchTemplate",
   "Properties": {
    "LaunchTemplateData": {
     "BlockDeviceMappings": [
      {
       "DeviceName": "/dev/xvda",
       "Ebs": {
        "DeleteOnTermination": true,
        "Encrypted": true,
        "VolumeSize": 8,
        "VolumeType": "gp3"
       }
      }
     ],
     "EbsOptimized": true,
     "ImageId": "ami-0da54bf2af20a74b7",
     "InstanceType": "t3a.nano",
     "Monitoring": {
      "Enabled": true
     },
     "NetworkInterfaces": [
      {
       "AssociatePublicIpAddress": false,
       "DeviceIndex": 0,
       "DeleteOnTermination": true,
       "Groups": [
        {
         "Ref": "ec2sg"
        }
       ]
      }
     ],
     "UserData": {
      "Fn::Base64": "#!/bin/bash\n#!/bin/bash -v\nset -euo pipefail\nyum update -y --security"
     }
    }
   }
  },
  "asg": {
   "Type": "AWS::AutoScaling::AutoScalingGroup",
   "Properties": {
    "VPCZoneIdentifier": [{"Ref": "pubsubnet"}],
    "MaxSize": "1",
    "MinSize": "0",
    "DesiredCapacity": "1",
    "HealthCheckGracePeriod": 300,
    "HealthCheckType": "EC2",
    "MixedInstancesPolicy": {
     "InstancesDistribution": {
      "OnDemandAllocationStrategy": "prioritized",
      "OnDemandBaseCapacity": 0,
      "OnDemandPercentageAboveBaseCapacity": 0,
      "SpotAllocationStrategy": "lowest-price",
      "SpotInstancePools": 10,
      "SpotMaxPrice": ""
     },
     "LaunchTemplate": {
      "LaunchTemplateSpecification": {
       "LaunchTemplateId": {
        "Ref": "ltemp"
       },
       "Version": {
        "Fn::GetAtt": [
         "ltemp",
         "LatestVersionNumber"
        ]
       }
      }
     }
    }
   },
   "UpdatePolicy": {
    "AutoScalingScheduledAction": {
     "IgnoreUnmodifiedGroupSizeProperties": true
    }
   }
  }
 }
}
Efren
  • 4,003
  • 4
  • 33
  • 75
Marcin
  • 215,873
  • 14
  • 235
  • 294