我们的 AWS 团队在 INSTANCE 和 VOLUME 中启用了标签,现在我们必须修改代码以添加标签。我尝试标记 EC2 实例,但出现以下错误,希望有人能给我指出正确的方向。
问题: 该错误表示实例或卷缺少强制标签。
这是我的示例代码,如果关闭标记,此代码将起作用。
try {
String accessKey = "XXXXXX";
String secretKey = "XXXXXX";
AwsBasicCredentials credentials = AwsBasicCredentials.create(accessKey, secretKey);
Ec2Client ec2 = Ec2Client.builder().region(Region.of("ca-central-1")).credentialsProvider(StaticCredentialsProvider.create(credentials)).build();
IamInstanceProfileSpecification iamSpec = IamInstanceProfileSpecification.builder().name("PROFILE1").build();
List<Tag> tags = new ArrayList<Tag>();
tags.add(Tag.builder().key("Department").value("IT").build());
tags.add(Tag.builder().key("Team").value("DEV").build());
TagSpecification tagSpecs = TagSpecification.builder()
.resourceType(ResourceType.VOLUME)
.resourceType(ResourceType.INSTANCE)
.tags(tags)
.build();
RunInstancesRequest runRequest = RunInstancesRequest.builder()
.imageId("ami-xxxxx")
.instanceType(InstanceType.C5_2_XLARGE)
.keyName("xxx")
.subnetId("subnet-xxxxx")
.iamInstanceProfile(iamSpec)
.securityGroupIds("sg-xxxxxxx")
.tagSpecifications(tagSpecs)
.maxCount(1).minCount(1).build();
RunInstancesResponse response = ec2.runInstances(runRequest);
if (response.sdkHttpResponse().isSuccessful()) {
System.out.println("Successful");
} else {
System.out.println("Not Successful");
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
设法通过分离卷和实例来解决问题
TagSpecification tagVolume = TagSpecification.builder().resourceType(ResourceType.VOLUME).tags(tags).build();
TagSpecification tagInstance = TagSpecification.builder().resourceType(ResourceType.INSTANCE).tags(tags).build();
RunInstancesRequest runRequest = RunInstancesRequest.builder()
.imageId("ami-xxxxx")
.instanceType(InstanceType.C5_2_XLARGE)
.keyName("xxx")
.subnetId("subnet-xxxxx")
.iamInstanceProfile(iamSpec)
.securityGroupIds("sg-xxxxxxx")
.tagSpecifications(tagVolume, tagInstance)
.maxCount(1).minCount(1).build();