在 AWS 中获取自动扩展组名称

在 AWS 中获取自动扩展组名称

各位,我正在编写一个脚本,用于将正在运行的实例的标签导出为环境变量。自动缩放组的问题是这些标签不适用于实例。

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

谢谢!

答案1

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

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

aws autoscaling describe-auto-scaling-instances --instance-ids="i-zzxxccvv"

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

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

aws autoscaling describe-tags --filters Name=auto-scaling-group,Values=name-of-the-auto-scaling-group-here

答案2

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

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}" "Name=key,Values=aws:autoscaling:groupName"

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

解决此问题的另一种解决方案是将标签从自动缩放组传播到实例。

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

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

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

aws ec2 describe-tags --filters "Name=resource-id,Values=${INSTANCE}"

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

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

答案3

综上所述:

INSTANCE_ID=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`
ASG_NAME=`aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID"  --region us-east-2 | jq '.Tags[] | select(.["Key"] | contains("aws:autoscaling:groupName")) | .Value'`
ASG_NAME=`echo $ASG_NAME | tr -d '"'`

做一个echo $ASG_NAME你就会看到它。

答案4

最简单的获取自动缩放组名称的方法如下:

aws autoscaling describe-auto-scaling-instances --query=AutoScalingInstances[].AutoScalingGroupName --instance-ids=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) --output text

相关内容