在 AWS 中获取自动缩放组名称

CMa*_*Mag 8 amazon-web-services aws-cli

伙计们,我正在编写一个脚本,它将运行实例的标签导出为环境变量。自动缩放组的问题是这些标签对实例不可用。

如何通过 api/aws cli 命令知道实例属于哪个自动缩放组?我需要在脚本中使用实例标签,但是,它们不可用。建议?

谢谢!

Baz*_*zze 8

如何通过 api/aws cli 命令知道实例属于哪个自动缩放组?

您可以将autoscaling describe-auto-scaling-instances命令与选项一起使用 --instance-ids,如下所示:

aws autoscaling describe-auto-scaling-instances --instance-ids="i-zzxxccvv"
Run Code Online (Sandbox Code Playgroud)

自动缩放组的问题是这些标签对实例不可用。[...] 我需要在脚本中使用实例标签,但是,它们不可用。建议?

我将其解释为您想获取实例所属的自动缩放组的标签?使用AutoScalingGroupName上面显示的命令返回的结果,您可以使用以下命令:

aws autoscaling describe-tags --filters Name=auto-scaling-group,Values=name-of-the-auto-scaling-group-here
Run Code Online (Sandbox Code Playgroud)

  • 如果您尝试在 CloudFormation 模板中 LaunchConfig 的 UserData 脚本中获取 ASG 名称,这也很有帮助。如果您使用 `Ref`,它将导致 Launch Config 和 ASG 之间的循环依赖,因此您必须使用自动缩放 CLI。 (4认同)

小智 5

查找实例的自动缩放组的最简单方法是检查标签。自动缩放组中的任何实例都有一个aws:autoscaling:groupName包含组名的命名标签。您可以使用以下命令检索该标签:

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}" "Name=key,Values=aws:autoscaling:groupName"
Run Code Online (Sandbox Code Playgroud)

然后您可以按照 Bazze 的描述获取标签。

对此的替代解决方案是将标签从自动缩放组传播到实例。

如果您使用 cloudformation 创建 ASG,"PropagateAtLaunch": "true"则为要传播的每个标签进行设置(请参阅Aws Cloud Formation 文档)。

如果您手动创建组,请确保为每个标签选中“标记新实例”框。

完成此操作后,标签将被复制到实例中,您可以使用 describe tags 命令简单地检查实例的标签:

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}"
Run Code Online (Sandbox Code Playgroud)

我发现jq对处理 aws cli 工具的输出很有帮助。例如,以下命令key=value从 JSON生成一个列表:

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}" | jq -r '.Tags[] | @text "\(.Key)=\(.Value)"'
Run Code Online (Sandbox Code Playgroud)