[英]Lambda function to search for all running EC2 instances, add tag 'Name' if not present, and then add tags to it's associated volumes?
[英]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.