【问题标题】:Tagging existing ebs volumes using cloudformation使用 cloudformation 标记现有 ebs 卷
【发布时间】:2019-11-18 21:47:21
【问题描述】:

我想使用云形成模板标记附有 ec2 实例的 ebs 卷。我能够在新的 ec2 实例和 ebs 卷上创建标签。

我还尝试了云形成中的用户数据方法。但这没有用.. 有人可以帮忙解决这个问题。

请让我知道我缺少什么。

我也试过下面的网址来解决这个问题,但没有奏效。

How to set tags of the root volume of EC2 instance via CloudFormation

我尝试了以下代码:-

"MyInstance" : {
    "Type" : "AWS::EC2::Instance",
    "Properties" : {
        "SecurityGroups" : "MySecurityGroup",
        "AvailabilityZone" : "us-east-1a",
        "ImageId" : "ami-20b65349",
        "Volumes" : [
            { "VolumeId" : "MyEBS",
                       "Device" : "/dev/sdk" }
        ],
        "Tags" : [
            {
                "Key" : "Stage",
                "Value" : "QA"
            }
         ]
       }
    },

并且还使用用户数据......

  Tags:
    - Key: Application
      Value: !Ref 'AWS::StackId'
    - Key: Name
      Value: MNPMGMT-SPMASTER
  NetworkInterfaces:
    - NetworkInterfaceId: !GetAtt 'MgmtNetworkingStack.Outputs.niSplunkMstrIp'
      DeviceIndex: '0'
  BlockDeviceMappings:
    - DeviceName: /dev/sdb
      Ebs:
        Encrypted: 'true'
        VolumeSize: '250'
  UserData: 
    Fn::Base64: |
      #!/bin/bash
      EC2_INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
      EC2_REGION=${EC2_AVAIL_ZONE:0:${#EC2_AVAIL_ZONE} - 1}
      ROOT_DISK_ID=$(aws ec2 describe-volumes --filters Name=attachment.instance-id,Values={EC2_INSTANCE_ID} Name=attachment.device,Values=/dev/sda1 --query 'Volumes[*].[VolumeId]' --region=${EC2_REGION} --out \"text\" | cut -f 1)
      aws ec2 create-tags --resources $ROOT_DISK_ID --tags Key=Name,Value=\"Root Volume my-instance\" --region ${EC2_REGION}

我希望标签也会在现有的 ec2 实例和 ebs 卷上创建,并且应该使用堆栈名称和环境名称命名。

请帮我解决这个问题。

【问题讨论】:

  • 为什么要使用 CloudFormation 标记现有卷?如果卷是由另一个 CloudFormation 模板创建的,那么您应该修改该模板,然后更新堆栈。如果卷不是通过 CloudFormation 创建的,则没有理由使用 CloudFormation 对其进行标记 - 只需通过控制台自己进行。如果您希望这样做还有其他原因,请编辑您的问题以添加更多详细信息。谢谢!
  • 感谢您的澄清。您能否告诉我如何使用云形成创建实例,我想使用标签名称作为堆栈名称和实例名称。有没有办法做到这一点..?
  • CloudFormation在部署资源时会自动添加一些标签,包括Stack Name和Stack ID。参见:Resource Tag - AWS CloudFormation 您可以在启动实例时指定标签,例如Name 标签:AWS::EC2::Instance - AWS CloudFormation

标签: amazon-web-services amazon-ec2 aws-ebs


【解决方案1】:

@John Rotenstein,更正它应该有堆栈名称和 ID,但它没有标记卷。这就是他想要做的事情

【讨论】:

    【解决方案2】:

    在您的用户数据中尝试以下脚本

    #!/bin/bash
    EC2_AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
    EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed 's/[a-z]$//'`"
    EC2_INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
    DATA_VOLUME_ID="`aws ec2 describe-volumes  --filters Name=attachment.device,Values=/dev/sda1 Name=attachment.instance-id,Values=$EC2_INSTANCE_ID --query 'Volumes[*].{ID:VolumeId}' --region $EC2_REGION --output text`"
    aws ec2 create-tags --resources $DATA_VOLUME_ID --tags Key=KeyName,Value=ValueName Key=KeyName,Value=ValueName --region ${EC2_REGION}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      相关资源
      最近更新 更多