即使我指定了自定义 VPC,我的自动缩放组的 Cloudformation YAML 仍会在默认 VPC 中创建 EC2 实例
My Cloudformation YAML for autoscaling group keeps creating EC2 instances in default VPC even after I specify a custom VPC
即使我指定了自定义 VPC,我的自动缩放组的 Cloudformation YAML 仍会在默认 VPC 中创建 EC2 实例。以下是代码片段:
TargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Port: 80
Protocol: HTTP
VpcId: !Ref VpcId
参数部分:
VpcId:
Description: Enter the VpcId
Type: AWS::EC2::VPC::Id
Default: vpc-0ed238eeecc11b493
我一直看到 EC2 实例终止,因为启动配置出于某种原因在默认 VPC 中创建实例,即使我已在参数部分指定使用自定义。我不知道为什么它不采用自定义 VPC。当我检查安全组时,在 AWS 控制台中启动配置,它显示自定义 VPC,但是当我检查由自动缩放组启动的 EC2 实例时,我看到默认 VPC。
我的默认 VPC 是 vpc-6a79470d
,我的自定义 VPC 是 vpc-0ed238eeecc11b493
我在控制台的自动缩放组部分看到的错误是:
Description:DescriptionLaunching a new EC2 instance: i-041b680f6470379e3.
Status Reason: Failed to update target group arn:aws:elasticloadbalancing:us-west-1:targetgroup/ALBTe-Targe-7DMLWW46T1E6/f74a31d17bf3c4dc:
The following targets are not in the target group VPC 'vpc-0ed238eeecc11b493': 'i-041b680f6470379e3' Updating load balancer configuration failed.
希望有人能帮忙指出我做错了什么。我在 AWS 文档中看到,默认情况下 ASG 在默认 VPC 中启动,但如果可以通过控制台执行,则必须有一种方法可以在 CloudFormation 中执行此操作。
===============================更新后============ ==============
这是添加 VPCZoneIdentifier 后的样子,不确定我做错了什么,现在安全组出现问题
AutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
AvailabilityZones: !GetAZs
VPCZoneIdentifier: !Ref SubnetIds
LaunchConfigurationName: !Ref LaunchConfiguration
MinSize: 1
MaxSize: 3
TargetGroupARNs:
- !Ref TargetGroup
LaunchConfiguration:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
KeyName: !Ref KeyName
InstanceType: t2.micro
SecurityGroups:
- !Ref EC2SecurityGroup
ImageId:
Fn::FindInMap:
- RegionMap
- !Ref AWS::Region
- AMI
LaunchConfiguration --region ${AWS::Region}
ALBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: ALB Security Group
VpcId: VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
EC2SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: EC2 Instance
您提供的代码段适用于负载均衡器的目标组。
会发生此错误,因为附加到您的 Auto Scaling 组的子网与您的目标组不在同一 VPC 中。
使用参数类型 List<AWS::EC2::Subnet::Id>
为您的自动缩放组指定子网。
对于您的自动缩放组,应为 VPCZoneIdentifier
参数分配参数值。
有关此参数类型的详细信息 here。
在您的 ASG 中,您通常会定义 VPCZoneIdentifier:
- 虚拟私有云的子网 ID 列表 (VPC)。如果您使用 AvailabilityZones 指定 VPCZoneIdentifier,您为此 属性 指定的子网必须驻留在这些可用区中。
示例如下:
Parameters:
SubnetIds:
Type: List<AWS::EC2::Subnet::Id>
Description: Subnet IDs for ASG
Resources:
MyASG:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
# ... other properties
VPCZoneIdentifier: !Ref SubnetIds
即使我指定了自定义 VPC,我的自动缩放组的 Cloudformation YAML 仍会在默认 VPC 中创建 EC2 实例。以下是代码片段:
TargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Port: 80
Protocol: HTTP
VpcId: !Ref VpcId
参数部分:
VpcId:
Description: Enter the VpcId
Type: AWS::EC2::VPC::Id
Default: vpc-0ed238eeecc11b493
我一直看到 EC2 实例终止,因为启动配置出于某种原因在默认 VPC 中创建实例,即使我已在参数部分指定使用自定义。我不知道为什么它不采用自定义 VPC。当我检查安全组时,在 AWS 控制台中启动配置,它显示自定义 VPC,但是当我检查由自动缩放组启动的 EC2 实例时,我看到默认 VPC。
我的默认 VPC 是 vpc-6a79470d
,我的自定义 VPC 是 vpc-0ed238eeecc11b493
我在控制台的自动缩放组部分看到的错误是:
Description:DescriptionLaunching a new EC2 instance: i-041b680f6470379e3.
Status Reason: Failed to update target group arn:aws:elasticloadbalancing:us-west-1:targetgroup/ALBTe-Targe-7DMLWW46T1E6/f74a31d17bf3c4dc:
The following targets are not in the target group VPC 'vpc-0ed238eeecc11b493': 'i-041b680f6470379e3' Updating load balancer configuration failed.
希望有人能帮忙指出我做错了什么。我在 AWS 文档中看到,默认情况下 ASG 在默认 VPC 中启动,但如果可以通过控制台执行,则必须有一种方法可以在 CloudFormation 中执行此操作。
===============================更新后============ ==============
这是添加 VPCZoneIdentifier 后的样子,不确定我做错了什么,现在安全组出现问题
AutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
AvailabilityZones: !GetAZs
VPCZoneIdentifier: !Ref SubnetIds
LaunchConfigurationName: !Ref LaunchConfiguration
MinSize: 1
MaxSize: 3
TargetGroupARNs:
- !Ref TargetGroup
LaunchConfiguration:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
KeyName: !Ref KeyName
InstanceType: t2.micro
SecurityGroups:
- !Ref EC2SecurityGroup
ImageId:
Fn::FindInMap:
- RegionMap
- !Ref AWS::Region
- AMI
LaunchConfiguration --region ${AWS::Region}
ALBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: ALB Security Group
VpcId: VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
EC2SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: EC2 Instance
您提供的代码段适用于负载均衡器的目标组。
会发生此错误,因为附加到您的 Auto Scaling 组的子网与您的目标组不在同一 VPC 中。
使用参数类型 List<AWS::EC2::Subnet::Id>
为您的自动缩放组指定子网。
对于您的自动缩放组,应为 VPCZoneIdentifier
参数分配参数值。
有关此参数类型的详细信息 here。
在您的 ASG 中,您通常会定义 VPCZoneIdentifier:
- 虚拟私有云的子网 ID 列表 (VPC)。如果您使用 AvailabilityZones 指定 VPCZoneIdentifier,您为此 属性 指定的子网必须驻留在这些可用区中。
示例如下:
Parameters:
SubnetIds:
Type: List<AWS::EC2::Subnet::Id>
Description: Subnet IDs for ASG
Resources:
MyASG:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
# ... other properties
VPCZoneIdentifier: !Ref SubnetIds