在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个实例。
第一个实例的用户数据与后来的实例不同,因此我无法删除该实例。
我查看了文档,但找不到任何有意义的内容。是否可以在模板中进行配置,或者唯一的方法就是编写脚本?
答案 0 :(得分:1)
我查看了文档,但找不到任何有意义的内容。是否可以在模板中进行配置,或者唯一的方法就是编写脚本?
这没有意义,因为它不实用。 ASG将仅从关联的AWS::AutoScaling::LaunchConfiguration
启动实例。因此,在“原因” ASG中“手动”附加实例没有太大意义。 ASG失败后将不重新启动。
如果“手动”附加的实例由于某种原因而终止,例如硬件故障,ASG将根据启动配置启动替换产品。
与以后的实例不同的用户数据
在这种情况下,最好的办法是在您的UserData
中提供一些条件,该条件将确定要运行UserData
的哪个版本。
或者,只需两个ASG 。一个用于第一个实例,另一个用于其余实例。
答案 1 :(得分:1)
修改
经过评论讨论后,我强烈建议使用EFS的方法,因为它是针对您正在执行的工作负载设计而设计的。
此外,它是多可用区,而不是旋转单个EBS卷的方法,因为实例在自动扩展组中失败,如果可用区失败并可能导致数据丢失,这种情况将不会持续。
原始
如果该第一个实例与其余实例不同,则应谨慎地将其添加到自动伸缩组中(因为您希望其持久存在),尤其是在它如何处理实例替换方面。
自动缩放组旨在缩放通常不可变的相似实例,因此,将您的主机置于此自动缩放组中,就将其视为其他主机之一。
Auto Scaling组包含Amazon EC2实例的集合,出于自动扩展和管理的目的,这些实例被视为逻辑分组。
如果,您必须将其添加到自动缩放组中,这是常规方法:
还要确保将MinSize
和DesiredCapacity
都设置为0,以删除启动的所有额外实例。
正如我之前所说的,如果可以避免,您不应将此实例添加到ASG中,tt可能会引起混乱。