【发布时间】: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