在 AWS CloudFormation 中使用 EC2 实例创建的卷上的标签
Tags on volumes created with EC2 instances in AWS CloudFormation
我正在创建带有标签的 AWS CloudFormation 堆栈。
当我这样做时,堆栈创建的所有 EC2 实例也会获得标签(这正是我想要的)。但是附加到那些 EC2 实例的所有卷都没有获得标签。
我能以某种方式改变它吗?我想要所有支持它们的资源上的标签。
标签是非传递性应用的;您必须明确地将标签与每个资源相关联。引用自 AWS docs 的 AWS::EC2::Instance
资源类型,标签为:
An arbitrary set of tags (key–value pairs) for this instance.
如果您真的想使用 AWS CloudFormation 将标签关联到卷,另一种方法是使用 AWS::EC2::Volume
和使用 AWS::EC2::VolumeAttachment
将它们附加到 EC2 实例。另一种替代方法是使用 Lambda-backed custom resources.
来完成此操作
我对通过 Terraform 创建的实例(50-75 个实例)有同样的问题。我编写了这个 Powershell + AWS CLI 脚本来标记卷:
$instances = aws ec2 --profile=xxxxxx-us-east-2 describe-instances --query "Reservations[].Instances[].[InstanceId]" --output text
foreach ($instance in $instances)
{
Write-Host $instance
$filter = "Name=attachment.instance-id,Values=$instance"
$volumes = aws ec2 --profile=xxxxxx-us-east-2 describe-volumes --filters $filter --query "Volumes[].Attachments[].[VolumeId]" --output text
Write-Host $volumes
$raw= aws ec2 --profile=xxxxxx-us-east-2 describe-instances --instance-ids $instance --query "Reservations[*].Instances[*].[Tags]" --output json
$temp1 = $raw | ConvertFrom-Json
$temp2 = ConvertTo-Json -InputObject $temp1.GetValue(0).GetValue(0).GetValue(0)
$tags = $temp2 | ConvertFrom-Json
foreach ($volume in $volumes)
{
Write-Host $volume
foreach($tag in $tags)
{
Write-Host $tag.Key'='$tag.Value
$parm = "Key=" + $tag.Key + ",Value=" + $tag.Value
aws ec2 --profile=xxxxxx-us-east-2 create-tags --resources $volume --tags $parm
}
}
}
我正在创建带有标签的 AWS CloudFormation 堆栈。
当我这样做时,堆栈创建的所有 EC2 实例也会获得标签(这正是我想要的)。但是附加到那些 EC2 实例的所有卷都没有获得标签。
我能以某种方式改变它吗?我想要所有支持它们的资源上的标签。
标签是非传递性应用的;您必须明确地将标签与每个资源相关联。引用自 AWS docs 的 AWS::EC2::Instance
资源类型,标签为:
An arbitrary set of tags (key–value pairs) for this instance.
如果您真的想使用 AWS CloudFormation 将标签关联到卷,另一种方法是使用 AWS::EC2::Volume
和使用 AWS::EC2::VolumeAttachment
将它们附加到 EC2 实例。另一种替代方法是使用 Lambda-backed custom resources.
我对通过 Terraform 创建的实例(50-75 个实例)有同样的问题。我编写了这个 Powershell + AWS CLI 脚本来标记卷:
$instances = aws ec2 --profile=xxxxxx-us-east-2 describe-instances --query "Reservations[].Instances[].[InstanceId]" --output text
foreach ($instance in $instances)
{
Write-Host $instance
$filter = "Name=attachment.instance-id,Values=$instance"
$volumes = aws ec2 --profile=xxxxxx-us-east-2 describe-volumes --filters $filter --query "Volumes[].Attachments[].[VolumeId]" --output text
Write-Host $volumes
$raw= aws ec2 --profile=xxxxxx-us-east-2 describe-instances --instance-ids $instance --query "Reservations[*].Instances[*].[Tags]" --output json
$temp1 = $raw | ConvertFrom-Json
$temp2 = ConvertTo-Json -InputObject $temp1.GetValue(0).GetValue(0).GetValue(0)
$tags = $temp2 | ConvertFrom-Json
foreach ($volume in $volumes)
{
Write-Host $volume
foreach($tag in $tags)
{
Write-Host $tag.Key'='$tag.Value
$parm = "Key=" + $tag.Key + ",Value=" + $tag.Value
aws ec2 --profile=xxxxxx-us-east-2 create-tags --resources $volume --tags $parm
}
}
}