Cloudformation将实例附加到自动伸缩组

时间:2020-08-14 06:58:31

标签: amazon-web-services amazon-ec2 amazon-cloudformation

在CloudFormation文件中,我创建了一个实例,一个启动配置和一个Auto Scaling组。

  LogstashInstance:
    Type: AWS::EC2::Instance
    Properties:
      IamInstanceProfile:
        Ref: LogstashInstanceProfile                 
      InstanceType: t2.micro
      KeyName: chuongtest
      ImageId: ami-0cd31be676780afa7
      UserData:
      SecurityGroupIds:
        - Ref: LogstashSecurityGroup
      SubnetId: subnet-0e5691582096fe1e6
      Tags:
        - Key: Name
          Value: Logstash Instance      
  LogstashLaunchConfiguration:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:  
      EbsOptimized: false
      IamInstanceProfile:
        Ref: LogstashInstanceProfile
      ImageId: ami-0cd31be676780afa7
      InstanceMonitoring: true
      InstanceType: t2.micro
      KeyName: chuongtest
      LaunchConfigurationName: LogstashLaunchConfiguration
      SecurityGroups: 
        - Ref: LogstashSecurityGroup
      UserData:                                          
  LogstashAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties: 
      AutoScalingGroupName: LogstashAutoScalingGroup
      AvailabilityZones: 
        - ap-southeast-1b
      DesiredCapacity: 1        
      LaunchConfigurationName:
        Ref: LogstashLaunchConfiguration
      MaxSize: 1
      MinSize: 1
      Tags: 
        - Key: Name
          PropagateAtLaunch: "false"
          Value: Logstash ASG 
        - Key: Instances
          PropagateAtLaunch: "true"
          Value: Logstash

我的想法是创建一个实例,将其附加到ASG并使用ASG来使工作继续进行。 但是这段代码将启动2个实例。

第一个实例的用户数据与后来的实例不同,因此我无法删除该实例。

我查看了文档,但找不到任何有意义的内容。是否可以在模板中进行配置,或者唯一的方法就是编写脚本?

2 个答案:

答案 0 :(得分:1)

我查看了文档,但找不到任何有意义的内容。是否可以在模板中进行配置,或者唯一的方法就是编写脚本?

这没有意义,因为它不实用。 ASG将仅从关联的AWS::AutoScaling::LaunchConfiguration启动实例。因此,在“原因” ASG中“手动”附加实例没有太大意义。 ASG失败后将不重新启动

如果“手动”附加的实例由于某种原因而终止,例如硬件故障,ASG将根据启动配置启动替换产品。

与以后的实例不同的用户数据

在这种情况下,最好的办法是在您的UserData中提供一些条件,该条件将确定要运行UserData的哪个版本。

或者,只需两个ASG 。一个用于第一个实例,另一个用于其余实例。

答案 1 :(得分:1)

修改

经过评论讨论后,我强烈建议使用EFS的方法,因为它是针对您正在执行的工作负载设计而设计的。

此外,它是多可用区,而不是旋转单个EBS卷的方法,因为实例在自动扩展组中失败,如果可用区失败并可能导致数据丢失,这种情况将不会持续。

原始

如果该第一个实例与其余实例不同,则应谨慎地将其添加到自动伸缩组中(因为您希望其持久存在),尤其是在它如何处理实例替换方面。

自动缩放组旨在缩放通常不可变的相似实例,因此,将您的主机置于此自动缩放组中,就将其视为其他主机之一。

Auto Scaling组包含Amazon EC2实例的集合,出于自动扩展和管理的目的,这些实例被视为逻辑分组。

如果,您必须将其添加到自动缩放组中,这是常规方法:

还要确保将MinSizeDesiredCapacity都设置为0,以删除启动的所有额外实例。

正如我之前所说的,如果可以避免,您不应将此实例添加到ASG中,tt可能会引起混乱。