【发布时间】:2017-11-20 10:22:22
【问题描述】:
可以为 Terraform 的 aws_autoscaling_group 模块创建的每个 EC2 实例分配不同的标签值。例如,4 个实例的 ASG 的 node1、node2、node3 和 node4。
谢谢。
【问题讨论】:
标签: amazon-web-services terraform
可以为 Terraform 的 aws_autoscaling_group 模块创建的每个 EC2 实例分配不同的标签值。例如,4 个实例的 ASG 的 node1、node2、node3 和 node4。
谢谢。
【问题讨论】:
标签: amazon-web-services terraform
AWS 中的自动缩放组只能(可选)将 ASG 的标签传播到它创建的实例。它无法根据 ASG 中的实例数进行任何动态标记。
如果你真的需要这个,那么你必须让实例的用户数据执行一些步骤来计算名称标签应该是什么,然后重新标记自己(当然,实例必须具有相关的 IAM 权限这个)。
对于一个实例来说,要计算出它在 ASG 中的编号可能很棘手(考虑一下您的自动缩放操作是否同时添加了多个实例,或者速度足够快,以至于有些实例在创建另一个实例之前可能没有重新标记自己),但您可以更容易让它找到自己的实例 ID,并使用它来创建一个唯一的标记名称,如果这更符合您的要求。
这样的东西在这种情况下可能有用:
ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
CURRENT_NAME=$(aws ec2 describe-tags --filters Name=resource-id,Values=${ID} Name=key,Values=Name --query Tags[].Value --output text
NEW_NAME=${CURRENT_NAME}-${ID}
aws ec2 create-tags --resources ${ID} --tags Key=Name,Value=${NEW_NAME}
【讨论】:
i=1 for INSTANCE in $(aws autoscaling describe-auto-scaling-instances --query 'AutoScalingInstances[*].[InstanceId]' --output text) do aws ec2 create-tags --resources $INSTANCE --tags Key=Name,Value="{{ machine.name }}"$i i=$((i+1)) done 它们都是很好的解决方案。