簡體   English   中英

在 AWS CloudFormation 中使用 EC2 實例創建的卷上的標簽

[英]Tags on volumes created with EC2 instances in AWS CloudFormation

我正在使用標簽創建我的AWS CloudFormation堆棧。

當我這樣做時,堆棧創建的所有EC2實例也會獲得標簽(這正是我想要的)。 但是附加到這些EC2實例的所有卷都沒有獲得標簽。

我能以某種方式改變它嗎? 我想要所有支持它們的資源上的標簽。

標簽是非傳遞性應用的; 您必須明確地將標簽與每個資源相關聯。 引用AWS 文檔中的AWS::EC2::Instance資源類型,標簽是:

此實例的任意一組標簽(鍵值對)。

如果您真的想使用AWS CloudFormation將標簽關聯到卷,另一種方法是使用AWS::EC2::Volume創建卷(並為卷指定標簽)並使用AWS::EC2::VolumeAttachment將它們附加到 EC2 實例. 另一種替代方法是使用Lambda 支持的自定義資源來完成此操作。

我對通過 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

        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM