我正在尝试使用Java SDK设置一些自定义AWS CloudWatch指标。
我似乎无法在描述如何获取某些数据的文档中找到任何内容,也不需要包含哪些数据。
MetricDatum datum = new MetricDatum()
.withDimensions(
new Dimension()
.withName("InstanceType").withValue(/* 1 */),
new Dimension()
.withName("InstanceId").withValue(/* 2 */)
/* 3 */
.withMetricName("My metric").withTimestamp(new Date())
.withUnit("Percent").withValue(new Double(55.0));
所以,问题(对于上面代码中的每个注释数字):
对于#1,我已经看到我可以对http://169.254.169.254/latest/meta-data/instance-id进行常规HTTP调用以获取instance-id,但我希望通过AWS SDK完成所有这些操作,如果有方法的话可以这样做。
答案 0 :(得分:9)
我将问题发布到亚马逊支持团队。
EC2 documentation提供了一个URL列表,可以调用这些URL来获取一堆元数据,包括InstanceType(问题1),InstanceId(问题2)和安全组(问题3)
可以使用AWS SDK for Java获取自动缩放组,获取所有自动缩放组的列表,然后遍历该列表,直到找到具有您自己的instanceId的实例(已检索到该实例)使用上面列出的URL):
String instanceId = "Your-InstanceId";
AmazonAutoScalingClient amazonAutoScalingClient = new AmazonAutoScalingClient(new BasicAWSCredentials(accessKey, secretKey));
DescribeAutoScalingGroupsResult describeAutoScalingGroupsResult = amazonAutoScalingClient.describeAutoScalingGroups();
for(AutoScalingGroup autoScalingGroup : describeAutoScalingGroupsResult.getAutoScalingGroups()) {
for(Instance instance : autoScalingGroup.getInstances()) {
if(instance.getInstanceId().equals(instanceId)) {
return autoScalingGroup.getAutoScalingGroupName();
}
}
}
答案 1 :(得分:2)
它不在javadocs中,但有一个名为EC2MetadataUtils的方便实用程序类,它将为您提供元数据信息,例如InstanceType(1)和InstanceId(2)。
至于获取ASG名称,AWS documents
在Auto Scaling组中启动实例时,Auto Scaling会使用aws键添加标签到实例:autoscaling:groupName和Auto Scaling组名称的值
因此,只需获取实例的标记
即可保存一点循环String instanceId = EC2MetadataUtils.getInstanceId();
String asgName = null;
List<TagDescription> tagDescriptions = new AmazonEC2Client().describeTags(
new DescribeTagsRequest().withFilters(
new Filter().withName("resource-id").withValues(instanceId)
)
).getTags();
for (TagDescription tagDescription : tagDescriptions) {
if ("aws:autoscaling:groupName".equals(tagDescription.getKey())) {
asgName = tagDescription.getValue();
break;
}
}
用于确保您可以按Auto Scaling组名称聚合的维度名称为AutoScalingGroupName
(3)
new Dimension().withName("AutoScalingGroupName").withValue(asgName)
答案 2 :(得分:-1)
您可以按图片ID汇总:
curl http://169.254.169.254/latest/meta-data/ami-id
通常,自动缩放组在专用图像上运行,因此这种方法应该有效。