我正在使用AWS CDK创建具有EBS卷的实例:
BlockDevice durableStorage = BlockDevice.builder()
.deviceName("/dev/sdf")
.volume(BlockDeviceVolume.ebs(
DURABLE_STORAGE_GB,
EbsDeviceOptions.builder()
.deleteOnTermination(true)
.encrypted(true)
.volumeType(EbsDeviceVolumeType.GP2)
.build()))
.build();
Instance instance = new Instance(
this,
"MyInstance",
InstanceProps.builder()
/* other config here */
.blockDevices(List.of(durableStorage))
.build());
如何标记EBS卷? Tag
静态方法需要一个Construct
,在BlockDevice
上找不到,例如我想做这样的事情:
Tag.add(durableStorage, "cdk", "true");
答案 0 :(得分:0)
看起来不可能直接用CDK构造标记卷。标记实例后,标记可能会传播到卷上。
通过使用CloudFormation资源-https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ec2.CfnInstance.html
可以直接为卷添加标签答案 1 :(得分:0)
应该有可能遍历堆栈并按资源类型进行限制:
cdk.Tag.add(this, 'cdk', 'true', {
includeResourceTypes: [
'AWS::EC2::Volume',
],
});
答案 2 :(得分:0)
到目前为止,我找到的唯一可行的解决方案是使用EC2 User Data
标记附加的EBS卷:
import * as ec2 from '@aws-cdk/aws-ec2'
// ...
const userData = ec2.UserData.forLinux()
userData.addCommands(
// Tag volume
'AWS_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)',
`ROOT_DISK_ID=$(aws ec2 describe-volumes --region ${props.region} --filter "Name=attachment.instance-id, Values=\${AWS_INSTANCE_ID}" --query "Volumes[].VolumeId" --out text)`,
`aws ec2 create-tags --region ${props.region} --resources \${ROOT_DISK_ID} --tags Key=${tagKey},Value=${tagValue}`,
)
const ec2Instance = new ec2.Instance(this, 'ec2-instance', {
// ...
userData: userData,
})