1. 简介
AWS SDK for Java 提供适用于 Amazon Web Services 的 Java API。利用此开发工具包,您可以轻松构建使用 Amazon S3、Amazon EC2、DynamoDB 等的 Java 应用程序。AWS 会定期向 AWS SDK for Java 添加对新服务的支持。
AWS SDK for Java 2.0 基于 Java 8+ 构建;
有以下适用于 AWS SDK for Java 开发人员的有价值的在线资源:
使用 AWS SDK for Java 2 的 前置条件
:
- 创建 IAM 账户,并获取安全凭证;
- 安装 JAVA 开发环境,需要 Java 8.0 或更高版本,也可以 OpenJDK 和 Amazon Correto (OpenJDK的一个发行版本) 结合使用;
- 设置用于开发的 AWS 安全凭证和区域;
- 可以通过安装 AWS CLI 执行
aws configure
命令在本地系统上设置凭证; - 文件位于 Linux 系统上的
~/.aws/credenttials
; - 文件位于 Windows 上的
C:\Users\USERNAME\.aws\credentials
;
- 可以通过安装 AWS CLI 执行
- 通过 Maven 来管理开发工具包的依赖项
- 为了优化应用程序,建议仅拉入所需的组件而不是整个开发工具包;
- AWS SDK for Java的最新版本;
2. 使用 SDK
2.1 创建所需 AWS 服务的客户端
每个 AWS 服务都有一个服务接口,提供与服务 API 中各项操作对应的方法。例如,Amazon DynamoDB 的服务接口命名为 DynamoDbClient。
2.1.1 builder 方法 (推荐)
通过 DynamoDbClient.builder()
构建方法可以自定义配置客户端的属性,比较灵活。
DynamoDbClient client = DynamoDbClient.builder()
.region(Region.US_WEST_2)
.credentialsProvider(ProfileCredentialsProvider.builder()
.profileName("myProfile")
.build())
.build();
2.1.2 create 方法
DynamoDbClient.create()
将使用默认配置创建服务客户端。该客户端使用默认提供程序链加载凭证和 AWS 区域。如果不能根据运行应用程序的环境确定凭证或区域,则对 create
的调用失败。
DynamoDbClient client = DynamoDbClient.create();
2.2 提供和检索 AWS 凭证
要向 Amazon Web Services (AWS) 提交请求,您必须为 AWS SDK for Java 提供 AWS 凭证。您可以使用以下方法实现这一点:
- 使用默认凭证提供程序链(推荐)。
- 使用特定的凭证提供程序或提供程序链。
-
2.2.1 使用默认 CredentialsProvider
在初始化新服务客户端而未提供任何参数时,AWS SDK for Java 尝试查找 AWS 凭证,并且会按照一定的顺序检索凭据。
S3Client s3 = S3Client.builder()
.region(Region.US_WEST_2)
.build();
凭据检索顺序:
- Java 系统属性:
aws.accessKeyId
和aws.secretAccessKey
。AWS SDK for Java使用 SystemPropertyCredentialsProvider 加载这些凭证。 - 环境变量:
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
。AWS SDK for Java使用 EnvironmentVariableCredentialsProvider 类加载这些凭证。 - 默认凭证配置文件:此文件的具体位置因平台而异,但通常位于
~/.aws/credentials
。此文件由多个 AWS 开发工具包以及 AWS CLI 共享。AWS SDK for Java 使用 ProfileCredentialsProvider 加载这些凭证。您可以使用由 AWS CLI 提供的aws configure
命令创建凭证文件。 - Amazon ECS 容器凭证:如果设置了环境变量
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
,则从 Amazon ECS 加载凭证。AWS SDK for Java 使用 ContainerCredentialsProvider 加载这些凭证。 - 实例配置文件凭证:此项在 Amazon EC2 实例上使用,并通过 Amazon EC2 元数据服务传送。AWS SDK for Java 使用 InstanceProfileCredentialsProvider 加载这些凭证。
- Java 系统属性:
- 设置凭证
- 要在环境 或默认凭证配置文件 中提供凭证,请参阅设置用于开发的 AWS 凭证和区域。
- 要设置 Java 系统属性,请参阅官方 Java 教程网站中的系统属性教程。
- 要设置和使用与 EC2 实例一起使用的实例配置文件凭证,请参阅为 Amazon EC2 配置 IAM 角色(高级)。
- 要在环境 或默认凭证配置文件 中提供凭证,请参阅设置用于开发的 AWS 凭证和区域。
2.2.2 使用特定的 CredentialsProvider
可以使用上面凭据检索技术中的一个来提供凭据,以下示例创建一个新的服务客户端,使用提供的环境 凭证,名为 EnvironmentVariableCredentialsProvider:
S3Client s3 = S3Client.builder()
.credentialsProvider(EnvironmentVariableCredentialsProvider.create())
.build();
2.2.3 明确提供凭证
- 实例化一个提供 AwsCredentials 接口的类,例如 AwsSessionCredentials。为该类提供您用于连接的 AWS 访问密钥和私有密钥。
- 使用
AwsCredentials
对象创建 StaticCredentialsProvider。 - 使用
StaticCredentialsProvider
配置客户端生成器并构建客户端。 ```java AwsSessionCredentials awsCreds = AwsSessionCredentials.create( “your_access_key_id_here”, “your_secret_key_id_here”, “your_session_token_here”);
S3Client s32 = S3Client.builder() .credentialsProvider(StaticCredentialsProvider.create(awsCreds)) .build(); ```