Amazon web services 如何使用AWS CDK标记EBS卷?
我正在使用AWS CDK创建具有EBS卷的实例:Amazon web services 如何使用AWS CDK标记EBS卷?,amazon-web-services,amazon-cloudformation,aws-cdk,Amazon Web Services,Amazon Cloudformation,Aws Cdk,我正在使用AWS CDK创建具有EBS卷的实例: BlockDevice durableStorage = BlockDevice.builder() .deviceName("/dev/sdf") .volume(BlockDeviceVolume.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.add(durableStorage, "cdk", "true");
看起来不可能直接使用CDK构造标记卷。在标记实例时,可能会将标记传播到卷
直接标记卷看起来是可以通过使用CloudFormation资源实现的-应该可以通过堆栈和资源类型进行限制:
cdk.Tag.add(这个'cdk','true'{
IncludeResourceType:[
“AWS::EC2::卷”,
],
});
到目前为止,我找到的唯一可行的解决方案是使用EC2用户数据
标记连接的EBS卷:
import*作为ec2从'@aws cdk/aws-ec2'导入
// ...
const userData=ec2.userData.forLinux()
userData.add命令(
//标签卷
'AWS_实例_ID=$(curlhttp://169.254.169.254/latest/meta-data/instance-id)',
`ROOT\u DISK\u ID=$(aws ec2描述卷--区域${props.region}--过滤器“Name=attachment.instance-ID,Values=\${aws\u instance\u ID}”--查询“volumes[].VolumeId”--输出文本)`,
`aws ec2创建标记--区域${props.region}--资源\${ROOT\u DISK\u ID}--标记键=${tagKey},值=${tagValue}`,
)
const ec2Instance=new ec2.Instance(此“ec2实例”{
// ...
userData:userData,
})
不幸的是,这不起作用。您可以轻松地cdk diff
,并在diff输出中看到未标记的卷。我尝试标记实例,希望附加的卷将被标记。不幸的是,它没有起作用。