即使在我指定了自定义 VPC 之后,我的用于自动缩放组的 Cloudformation YAML 也会继续在默认 VPC 中创建 EC2 实例

Posted

技术标签:

【中文标题】即使在我指定了自定义 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 【发布时间】:2020-10-12 02:36:52 【问题描述】:

。这是代码的sn-ps:

  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,但是当我检查由 Auto Scaling 组启动的 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

【问题讨论】:

您的自动缩放组的 CloudFormation 在哪里? 你能展示你的启动配置和自动缩放模板吗? 【参考方案1】:

在您的 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

【讨论】:

谢谢...问题已转移到该 ALB 的安全组。我现在收到此错误:启动配置中的一个或多个安全组未链接到 Auto Scaling 组中配置的 VPC(服务:AmazonAutoScaling;状态代码:400;错误代码:ValidationError;请求 ID:83c8106b-149a- 4ff3-b59b-4f151313206e) @SantoshR 安全组也必须与您的 vpc 相关联,使用 VpcId 参数。 我刚刚用更改后的 YAML 更新了我的原始帖子。 VPCid 在安全组定义中 @SantoshR 这是不正确的 yaml VpcId: VpcId: !Ref VpcId。此外,EC2SecurityGroup 不在您的 VPC 中。 绝对!谢谢!【参考方案2】:

您提供的 sn-p 是针对负载均衡器的目标组的。

会出现此错误,因为附加到您的 Auto Scaling 组的子网与您的目标组不在同一 VPC 内。

使用List&lt;AWS::EC2::Subnet::Id&gt; 参数类型为您的自动缩放组指定子网。

对于您的自动缩放组,应为 VPCZoneIdentifier 参数分配参数值。

here 提供此参数类型的更多信息。

【讨论】:

现在的样子如下:

以上是关于即使在我指定了自定义 VPC 之后,我的用于自动缩放组的 Cloudformation YAML 也会继续在默认 VPC 中创建 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

即使在我的.pro文件中包含“testlib”包(用于qWait())之后,如何避免Qt应用程序中的控制台窗口?

自动装配到 JPA 转换器中

Android 每次都会询问我要使用哪个应用程序,即使在我将我的应用程序设置为默认应用程序之后也是如此。为啥?

如何在Android中压缩两个Observable?

UIButton setImage 不适用于自定义注释视图

自动装配在 Apache Shiro 自定义领域类中不起作用