You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至awspring.cloud 3.0.2及AWS SDK v2后,如何获取EC2实例元数据?

升级AWS SDK v2 & awspring.cloud 3.0.2后获取EC2实例元数据的方案

方案1:沿用awspring cloud的PropertySource封装

在awspring.cloud 3.0.x版本中,原io.awspring.cloud.core.env.ec2.AmazonEc2InstanceDataPropertySource已被重命名为org.springframework.cloud.aws.core.env.ec2.Ec2InstanceDataPropertySource,底层已适配AWS SDK v2,用法和原代码基本一致:

import org.springframework.cloud.aws.core.env.ec2.Ec2InstanceDataPropertySource;

// 初始化PropertySource
var ec2InstanceDataPropertySource = new Ec2InstanceDataPropertySource("xxx");

// 复用原有工具方法获取AMI ID
String amiId = getInstanceDataProperty(ec2InstanceDataPropertySource, "ami-id", "N/A");

你的自定义getInstanceDataProperty方法无需修改,可直接复用。

方案2:直接使用AWS SDK v2的实例元数据客户端

如果需要更灵活的元数据获取方式,可以跳过awspring封装,直接用AWS SDK v2提供的InstanceMetadataClient:

1. 引入依赖(若未添加)

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>imds</artifactId>
    <version>你的AWS SDK v2版本号</version>
</dependency>

2. 编写获取代码

import software.amazon.awssdk.services.imds.InstanceMetadataClient;
import software.amazon.awssdk.services.imds.model.GetInstanceMetadataRequest;

// 推荐将客户端配置为单例,避免重复创建
InstanceMetadataClient imdsClient = InstanceMetadataClient.create();

try {
    // 构造请求,指定元数据路径
    GetInstanceMetadataRequest request = GetInstanceMetadataRequest.builder()
            .path("/meta-data/ami-id")
            .build();
    String amiId = imdsClient.getInstanceMetadata(request).content();
    // 业务逻辑处理
} catch (Exception e) {
    // 异常时返回默认值
    String amiId = "N/A";
} finally {
    imdsClient.close();
}

Spring Boot环境优化配置

如果是Spring Boot应用,建议将客户端注册为Bean,方便注入复用:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import software.amazon.awssdk.services.imds.InstanceMetadataClient;

@Configuration
public class AwsConfig {

    @Bean
    public InstanceMetadataClient instanceMetadataClient() {
        return InstanceMetadataClient.create();
    }
}

其他元数据获取

只需修改请求的path参数即可获取其他元数据,比如:

  • 实例ID:/meta-data/instance-id
  • 区域:/meta-data/placement/region
  • 主机名:/meta-data/local-hostname

内容的提问来源于stack exchange,提问作者Martin Bamford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:16:08