Как пометить том EBS с помощью AWS CDK?

Я создаю экземпляр с томом EBS с помощью AWS CDK:

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");

person John    schedule 30.04.2020    source источник


Ответы (3)


Похоже, что невозможно пометить том напрямую с помощью конструкций CDK. Возможно, тег будет распространен на том, когда экземпляр будет помечен.

Однако прямая маркировка томов представляется возможной с использованием ресурсов CloudFormation - https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ec2.CfnInstance.html

person Milan Gatyas    schedule 06.05.2020
comment
Я пытаюсь пометить экземпляр и надеюсь, что прикрепленный том будет помечен. К сожалению, это не сработало. - person Wingjam; 21.08.2020

Должна быть возможность перейти через стек и ограничить по типу ресурса:

cdk.Tag.add(this, 'cdk', 'true', {
  includeResourceTypes: [
    'AWS::EC2::Volume',
  ],
});
person udondan    schedule 09.07.2020
comment
К сожалению, это не работает. Вы можете легко cdk diff увидеть том, не отмеченный тегами в выводе diff. - person Wingjam; 21.08.2020

Единственное рабочее решение, которое я нашел до сих пор, - это использовать 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,
})
person Wingjam    schedule 21.08.2020