

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 适用于 Java 的 AWS SDK 2.x 入门
<a name="get-started"></a>

本主题中的各个部分将引导您完成开始构建连接到 AWS 服务 的 Java 应用程序的基本步骤。这些部分介绍了使用 Java 和构建工具（如 Maven 或 Gradle）设置开发环境、配置向 AWS 进行安全身份验证，以及通过一个动手实践的教程创建您的第一个可运行的应用程序。这个适合初学者的主题是您使用 Java 进行 AWS 开发的切入点，为您后续探索更高级的功能打下所需的基础。

**Contents**
+ [设置适用于 Java 的 AWS SDK 2.x](setup.md)
  + [设置概述](setup.md#setup-overview)
  + [安装 Java 和编译工具以使用 AWS SDK for Java 2.x](setup-java-buildtool.md)
  + [设置一个 Apache Maven 项目，该项目使用 AWS SDK for Java 2.x](setup-project-maven.md)
    + [先决条件](setup-project-maven.md#prerequisitesmaven)
    + [创建 Maven 项目](setup-project-maven.md#create-maven-project)
    + [为 Maven 配置 Java 编译器](setup-project-maven.md#configure-maven-compiler)
    + [将开发工具包声明为依赖项](setup-project-maven.md#sdk-as-dependency)
    + [设置开发工具包模块的依赖项](setup-project-maven.md#modules-dependencies)
      + [将整个开发工具包构建到您的项目中](setup-project-maven.md#build-the-entire-sdk-into-your-project)
    + [重新构建项目。](setup-project-maven.md#build-project)
  + [设置一个使用 Gradle 项目 AWS SDK for Java 2.x](setup-project-gradle.md)
  + [设置一个使用 GraalVM 原生镜像项目 AWS SDK for Java 2.x](setup-project-graalvm.md)
    + [先决条件](setup-project-graalvm.md#setup-graalvmnativeimage-prereq)
    + [使用原型创建项目](setup-project-graalvm.md#setup-graalvmnativeimage-project)
    + [生成原生映像](setup-project-graalvm.md#build-graalvmnativeimage-project)
+ [AWS 使用进行身份验证 AWS SDK for Java 2.x](get-started-auth.md)
  + [身份验证的设置](get-started-auth.md#setup-auth)
    + [1. 使用短期证书进行本地开发](get-started-auth.md#setup-login)
    + [2. 设置用于 SDK 的单点登录访问](get-started-auth.md#setup-credentials)
    + [3. 使用登录 AWS CLI](get-started-auth.md#setup-login-sso)
  + [其他身份验证选项](get-started-auth.md#setup-additional)
+ [使用创建简单的应用程序 AWS SDK for Java 2.x](get-started-tutorial.md)
  + [步骤 1：为本教程进行设置](get-started-tutorial.md#get-started-setup)
  + [步骤 2：创建项目](get-started-tutorial.md#get-started-projectsetup)
  + [步骤 3：编写代码](get-started-tutorial.md#get-started-code)
  + [步骤 4：构建并运行应用程序](get-started-tutorial.md#get-started-run)
    + [成功](get-started-tutorial.md#get-started-success)
    + [清理](get-started-tutorial.md#cleanup)
  + [后续步骤](get-started-tutorial.md#get-started-next)

# 设置适用于 Java 的 AWS SDK 2.x
<a name="setup"></a>

本部分提供有关如何设置开发环境和项目以使用AWS SDK for Java 2.x 的信息。

## 设置概述
<a name="setup-overview"></a>

要使用适用于 Java 的 AWS SDK 成功开发访问 AWS 服务的应用程序，需要满足以下条件：
+ Java SDK 必须有权访问凭证才能代表您[对请求进行身份验证](get-started-auth.md#setup-auth)。
+ 为 SDK 配置的 [IAM 角色的权限](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)必须提供您的应用程序需访问的 AWS 服务的访问权限。与 **PowerUserAccess** AWS 托管策略关联的权限足以满足大多数开发需求。
+ 包含以下元素的开发环境：
  + 通过以下方式中的至少一种方式设置的[共享配置文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)：
    + `config` 文件包含 [IAM Identity Center 单点登录设置](get-started-auth.md#setup-credentials)，以便 SDK 可以获取 AWS 凭证。
    + `credentials` 文件包含临时凭证。
  + [安装了 Java 8 或更高版本](setup-java-buildtool.md)。
  + 一种[构建自动化工具](setup-java-buildtool.md)，例如 [Maven](https://maven.apache.org/download.cgi) 或 [Gradle](https://gradle.org/install/)。
  + 用于处理代码的文本编辑器。
  + （可选，但建议使用）一个 IDE（集成开发环境），例如 [IntelliJ IDEA](https://www.jetbrains.com/idea/download/#section=windows)、[Eclipse](https://www.eclipse.org/ide/) 或 [NetBeans](https://netbeans.apache.org/front/main/download/index.html)。

    如果您使用 IntelliJ IDEA，也可以添加 [AWS Toolkit for IntelliJ IDEA](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/welcome.html) 以将 AWS 服务 直接集成到 IDE，从而帮助您简化开发。
+ 准备好运行应用程序时，具有活动的 AWS 访问门户会话。您可以使用 AWS Command Line Interface 来[启动登录流程](get-started-auth.md#setup-login-sso)，从而登录 IAM Identity Center 的 AWS 访问门户。

**重要**  
本设置部分中的说明假设您或组织使用 IAM Identity Center。如果您的组织使用独立于 IAM Identity Center 运行的外部身份提供商，请了解如何获取临时凭证以供适用于 Java 的 SDK 使用。按照[以下说明](credentials-temporary.md#credentials-temporary-from-portal)向 `~/.aws/credentials` 文件添加临时凭证。  
如果您的身份提供商自动向 `~/.aws/credentials` 文件添加临时凭证，请确保配置文件名称为 `[default]`，这样您就无需向 SDK 或 AWS CLI 提供配置文件名称。

# 安装 Java 和编译工具以使用 AWS SDK for Java 2.x
<a name="setup-java-buildtool"></a>

要使用适用于 Java 的 SDK 2.x，您需要满足以下 Java 开发环境要求：
+ Java 8 或更高版本。 适用于 Java 的 AWS SDK [它可与 [Oracle Java SE 开发套件](https://www.oracle.com/java/technologies/downloads/)以及[红帽](https://developers.redhat.com/products/openjdk/overview) OpenJDK 和 Adoptium [Amazon Corretto](https://aws.amazon.com/corretto/)等开放 Java 开发套件 (OpenJDK) 的发行版配合使用。](https://adoptium.net/)
+ 与 Maven 兼容的构建工具，例如 Apache Maven、Apache Ant with Ivy、Gradle 或 IntelliJ。
  + 有关如何安装和使用 Maven 的信息，请参阅 [https://maven.apache.org/](https://maven.apache.org/)。
  + 有关如何安装和使用 Apache Ivy 的信息，请访问 [https://ant.apache.org/ivy/](https://ant.apache.org/ivy/)。
  + 有关如何安装和使用 Gradle 的信息，请访问 [https://gradle.org/](https://gradle.org/)。
  + 有关如何安装和使用 IntelliJ IDEA 的信息，请参阅。[https://www.jetbrains.com/idea/](https://www.jetbrains.com/idea/)

# 设置一个 Apache Maven 项目，该项目使用 AWS SDK for Java 2.x
<a name="setup-project-maven"></a>

您可以使用 [Apache Maven](https://maven.apache.org/) 设置和构建 AWS SDK for Java 2.x 项目或[构建 SDK 本身](https://github.com/aws/aws-sdk-java-v2/tree/master#building-from-source)。

## 先决条件
<a name="prerequisitesmaven"></a>

要将适用于 Java 的 SDK 2.x 与 Maven 结合使用，您需要以下各项：
+ Java *8.0 或更高版本*。你可以从 [http://www.oracle 下载最新的 Java SE 开发套件软件。 com/technetwork/java/javase/downloads](https://www.oracle.com/java/technologies/downloads/)/。适用于 Java 的 SDK 2.x 也可以与 Open [JDK](https://openjdk.org/) Amazon Corretto以及开放 Java 开发套件 (OpenJDK) 的发行版配合使用。从中下载最新的 OpenJDK 版本。[https://openjdk.java.net/install/index.html](https://openjdk.org/install/index.html)从[Corretto 页面](https://aws.amazon.com/corretto/)下载最新的 Amazon Corretto 8 或 Amazon Corretto 11 版本。
+  *Apache Maven*。如果您需要安装 Maven，请转到 [http://maven.apache.org/](https://maven.apache.org/) 下载并安装它。

## 创建 Maven 项目
<a name="create-maven-project"></a>

要从命令行创建 Maven 项目，请从终端或命令提示符窗口运行以下命令````。

```
mvn -B archetype:generate \
 -DarchetypeGroupId=software.amazon.awssdk \
 -DarchetypeArtifactId=archetype-lambda -Dservice=s3 -Dregion=US_WEST_2 \
 -DarchetypeVersion=2.X.X \
 -DgroupId=com.example.myapp \
 -DartifactId=myapp
```

**注意**  
将 *com.example.myapp* 替换为您的应用程序的完整程序包命名空间。还可以将 *myapp* 替换为您的项目名称。这将成为项目的目录的名称。  
要使用最新版本的原型，请替换为 [Maven cen *2.X.X* tral 中的最新](https://central.sonatype.com/artifact/software.amazon.awssdk/archetype-lambda)版本。

此命令使用原型模板工具包创建 Maven 项目。原型为函数处理程序项目生成脚手架。 AWS Lambda 此项目原型预配置为使用 Java SE 8 进行编译，并包括适用于 Java 的 SDK 2.x 版本的依赖项（用 `-DarchetypeVersion` 指定）。

有关创建和配置 Maven 项目的更多信息，请参阅 [Maven 入门指南](https://maven.apache.org/guides/getting-started/)。

## 为 Maven 配置 Java 编译器
<a name="configure-maven-compiler"></a>

如果您按照前面所述使用 AWS Lambda 项目原型创建了项目，那么 Java 编译器的配置已经为您完成了。

要验证此配置存在，请首先从执行上一个命令时创建的项目文件夹（例如， `myapp`）中打开 `pom.xml` 文件。检查第 11 行和第 12 行以查看此 Maven 项目的 Java 编译器版本设置，以及检查第 71-75 行上是否包含所需的 Maven 编译器插件。

```
<project>
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven.compiler.plugin.version}</version>
      </plugin>
    </plugins>
  </build>
</project>
```

如果使用其他原型或其他方法创建项目，则必须确保 Maven 编译器插件是构建的一部分，并且将 `pom.xml` 文件中的源和目标属性均设置为 **1.8**。

有关一种配置这些必需设置的方法，请参阅上一个代码段。

或者，您可以使用插件声明内联配置编译器配置，如下所示。

```
<project>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
```

## 将开发工具包声明为依赖项
<a name="sdk-as-dependency"></a>

要在项目 适用于 Java 的 AWS SDK 中使用，你需要在项目`pom.xml`文件中将其声明为依赖项。

如果您使用前面所述的项目原型创建了项目，则已将 SDK 的最新版本配置为项目中的依赖项。

原型为 `software.amazon.awssdk` 组 ID 生成一个 BOM（材料清单）构件依赖项。使用 BOM 时，您不必为共享相同组 ID 的各个构件依赖项指定 maven 版本。

如果您以不同的方式创建了 Maven 项目，请通过确保 `pom.xml` 文件包含以下内容来为项目配置最新版本的开发工具包。

```
<project>
  <properties>
    <aws.java.sdk.version>2.X.X</aws.java.sdk.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>${aws.java.sdk.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>
```

**注意**  
将`pom.xml`文件*2.X.X*中的替换为[最新版本的 AWS SDK for Java 2.x](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)。

## 设置开发工具包模块的依赖项
<a name="modules-dependencies"></a>

现在，您已经配置了 SDK，可以为项目中使用的一个或多个 适用于 Java 的 AWS SDK 模块添加依赖项。

尽管您可以为每个组件指定版本号，但无需这样做，因为您已使用材料清单构件在 `dependencyManagement` 部分中声明了 SDK 版本。要加载给定模块的其他版本，请为其依赖项指定版本号。

如果您使用前面所述的项目原型创建了项目，则您的项目已配置了多个依赖项。其中包括 AWS Lambda 函数处理程序和 Amazon S3 的依赖项，如下所示。

```
<project>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>software.amazon.awssdk</groupId>
                    <artifactId>netty-nio-client</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>software.amazon.awssdk</groupId>
                    <artifactId>apache-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>url-connection-client</artifactId>
        </dependency>

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-core</artifactId>
            <version>${aws.lambda.java.version}</version>
        </dependency>
    </dependencies>
</project>
```

**注意**  
在上面的 `pom.xml` 示例中，依赖项来自不同的 `groupId`。`s3` 依赖项来自 `software.amazon.awssdk`，而 `aws-lambda-java-core` 依赖项来自 `com.amazonaws`。BOM 依赖项管理配置会影响 `software.amazon.awssdk` 的构件，因此需要为 `aws-lambda-java-core` 构件提供一个版本。  
对于使用适用于 Java 的 SDK 2.x 开发的 *Lambda 函数处理程序*，正确的依赖项是 `aws-lambda-java-core`。但是，如果您的应用程序需要使用诸如 `listFunctions`、`deleteFunction`、`invokeFunction` 和 `createFunction` 之类的操作来管理 Lambda 资源，则您的应用程序需要以下依赖项。  

```
<groupId>software.amazon.awssdk</groupId>
<artifactId>lambda</artifactId>
```

**注意**  
`s3` 依赖项与 `netty-nio-client` 和 `apache-client` 传递依赖项相斥。原型中包含了 `url-connection-client` 依赖项来代替这两个 HTTP 客户端，这有助于[减少 AWS Lambda 函数的启动延迟](lambda-optimize-starttime.md#lambda-quick-url)。

将项目所需的模块 AWS 服务 和功能添加到您的项目中。由 适用于 Java 的 AWS SDK BOM 管理的模块（依赖项）列在 [Maven Central 存储库](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)中。

**注意**  
您可以从代码示例中查看 `pom.xml` 文件，以确定您的项目需要哪些依赖项。例如，如果您对 DynamoDB 服务的依赖关系感兴趣，[请查看[代码](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2)示例存储库中的此](https://github.com/awsdocs/aws-doc-sdk-examples/blob/da520cb4436f8567a90b6f73f77232fd590a50bf/javav2/example_code/dynamodb/pom.xml)示例。AWS GitHub（在 [/javav2/example\$1code/dynamodb](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/dynamodb) 下查找 `pom.xml` 文件。）

### 将整个开发工具包构建到您的项目中
<a name="build-the-entire-sdk-into-your-project"></a>

为了优化您的应用程序，强烈建议您仅拉入所需的组件而不是整个开发工具包。但是，要 适用于 Java 的 AWS SDK 将整个内容构建到您的项目中，请在`pom.xml`文件中声明，如下所示。

```
<project>
  <dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>aws-sdk-java</artifactId>
      <version>2.X.X</version>
    </dependency>
  </dependencies>
</project>
```

## 重新构建项目。
<a name="build-project"></a>

配置 `pom.xml` 文件后，您可以使用 Maven 构建您的项目。

要从命令行生成 Maven 项目，请打开终端或命令提示符窗口，导航到项目目录（例如，`myapp`），输入或粘贴以下命令，然后按 Enter 或 Return。

```
mvn package
```

这将在 `target` 目录（例如， `myapp/target`）中创建单个 `.jar` 文件 (JAR)。此 JAR 包含您在 `pom.xml` 文件中指定为依赖项的所有开发工具包模块。

# 设置一个使用 Gradle 项目 AWS SDK for Java 2.x
<a name="setup-project-gradle"></a>

您可以使用 [Gradle](https://gradle.org/) 来设置和构建 AWS SDK for Java 2.x 项目。

以下示例中的初始步骤来自 [Gradle 8.4 版的入门指南](https://docs.gradle.org/current/samples/sample_building_java_applications.html)。如果您使用的是其他版本，结果可能会略有不同。

**使用 Gradle 创建 Java 应用程序（命令行）**

1. 创建一个用于存放项目的目录。在此示例中，该目录名为 `demo`。

1. 在 `demo` 目录中，执行 `gradle init` 命令并提供以红色突出显示的值，如以下命令行输出所示。在演练中，我们选择 Kotlin 作为构建脚本 DSL 语言，但本主题末尾还提供了使用 Groovy 的完整示例。

   ```
   > gradle init
   Starting a Gradle Daemon (subsequent builds will be faster)
   
   Select type of project to generate:
   1: basic
   2: application
   3: library
   4: Gradle plugin
   Enter selection (default: basic) [1..4] 2
   
   Select implementation language:
   1: C++
   2: Groovy
   3: Java
   4: Kotlin
   5: Scala
   6: Swift
   Enter selection (default: Java) [1..6] 3
   
   Generate multiple subprojects for application? (default: no) [yes, no] no
   Select build script DSL:
   1: Kotlin
   2: Groovy
   Enter selection (default: Kotlin) [1..2] <Enter>
   
   Select test framework:
   1: JUnit 4
   2: TestNG
   3: Spock
   4: JUnit Jupiter
   Enter selection (default: JUnit Jupiter) [1..4] 4
   
   Project name (default: demo): <Enter>
   Source package (default: demo): <Enter>
   Enter target version of Java (min. 7) (default: 11): <Enter>
   Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] <Enter>
   
   > Task :init
   To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.4/samples/sample_building_java_applications.html
   
   BUILD SUCCESSFUL in 3m 43s
   2 actionable tasks: 2 executed
   ```

1. `init` 任务完成后，`demo` 目录包含以下树结构。在下个部分中，我们将仔细研究主构建文件 `build.gradle.kts`（以红色突出显示）。

   ```
   ├── app
   │   ├── build.gradle.kts
   │   └── src
   │       ├── main
   │       │   ├── java
   │       │   │   └── demo
   │       │   │       └── App.java
   │       │   └── resources
   │       └── test
   │           ├── java
   │           │   └── demo
   │           │       └── AppTest.java
   │           └── resources
   ├── gradle
   │   └── wrapper
   │       ├── gradle-wrapper.jar
   │       └── gradle-wrapper.properties
   ├── gradlew
   ├── gradlew.bat
   └── settings.gradle.kts
   ```

   `build.gradle.kts` 文件包含以下支架式内容。

   ```
   /*
    * This file was generated by the Gradle 'init' task.
    *
    * This generated file contains a sample Java application project to get you started.
    * For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.4/userguide/building_java_projects.html in the Gradle documentation.
    */
   
   plugins {
       // Apply the application plugin to add support for building a CLI application in Java.
       application
   }
   
   repositories {
       // Use Maven Central for resolving dependencies.
       mavenCentral()
   }
   
   dependencies {
       // Use JUnit Jupiter for testing.
       testImplementation("org.junit.jupiter:junit-jupiter:5.9.3")
   
       testRuntimeOnly("org.junit.platform:junit-platform-launcher")
   
       // This dependency is used by the application.
       implementation("com.google.guava:guava:33.3.0-jre")
   }
   
   // Apply a specific Java toolchain to ease working on different environments.
   java {
       toolchain {
           languageVersion.set(JavaLanguageVersion.of(11))
       }
   }
   
   application {
       // Define the main class for the application.
       mainClass.set("demo.App")
   }
   
   tasks.named<Test>("test") {
       // Use JUnit Platform for unit tests.
       useJUnitPlatform()
   }
   ```

1. 使用脚手架的 Gradle 构建文件作为项目的基础。 AWS 

   1. 要管理 Gradle 项目的 SDK 依赖关系，请将的 Maven 物料清单 (BOM) 添加到`dependencies`文件部分。 AWS SDK for Java 2.x `build.gradle.kts`

      ```
      ...
      dependencies {
          implementation(platform("software.amazon.awssdk:bom:2.27.21"))
          // With the bom declared, you specify individual SDK dependencies without a version.
       ...
      }
      ...
      ```
**注意**  
在此示例构建文件中，将 *2.27.21* 替换为最新版本的 Java SDK 2.x。在 [Maven Central 存储库](https://central.sonatype.com/artifact/software.amazon.awssdk/bom/versions)中查找可用的最新版本。

   1. 在 `dependencies` 部分中指定您的应用程序需要的 SDK 模块。例如，以下内容添加了对 Amazon Simple Storage Service 的依赖项。

      ```
      ...
      dependencies {    
          implementation(platform("software.amazon.awssdk:bom:2.27.21"))
          implementation("software.amazon.awssdk:s3")
       ...
      }
      ...
      ```

      Gradle 会自动使用 BOM 中的信息来解析所声明依赖项的正确版本。

以下示例显示了 Kotlin 和 Groovy 中完整的 Gradle 构建文件。 DSLs构建文件包含 Amazon S3、身份验证、日志和测试的依赖项。Java 的源版本和目标版本均为版本 11。

------
#### [ Kotlin DSL (build.gradle.kts) ]

```
/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java application project to get you started.
 * For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.4/userguide/building_java_projects.html in the Gradle documentation.
 */

plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    application
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    implementation(platform("software.amazon.awssdk:bom:2.20.56"))
    implementation("software.amazon.awssdk:s3")
    implementation("software.amazon.awssdk:sso")
    implementation("software.amazon.awssdk:ssooidc")
    implementation(platform("org.apache.logging.log4j:log4j-bom:2.20.0"))
    implementation("org.apache.logging.log4j:log4j-slf4j2-impl")
    implementation("org.apache.logging.log4j:log4j-1.2-api")
    testImplementation(platform("org.junit:junit-bom:5.10.0"))
    testImplementation("org.junit.jupiter:junit-jupiter")
}

// Apply a specific Java toolchain to ease working on different environments.
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}

application {
    // Define the main class for the application.
    mainClass.set("demo.App")
}

tasks.named<Test>("test") {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}
```

------
#### [ Groovy DSL (build.gradle) ]

```
/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java application project to get you started.
 * For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.4/userguide/building_java_projects.html in the Gradle documentation.
 */

plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    id 'application'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    implementation platform('software.amazon.awssdk:bom:2.27.21')
    implementation 'software.amazon.awssdk:s3'
    implementation 'software.amazon.awssdk:sso'
    implementation 'software.amazon.awssdk:ssooidc'
    implementation platform('org.apache.logging.log4j:log4j-bom:2.20.0')
    implementation 'org.apache.logging.log4j:log4j-slf4j2-impl'
    implementation 'org.apache.logging.log4j:log4j-1.2-api'
    testImplementation platform('org.junit:junit-bom:5.10.0')
    testImplementation 'org.junit.jupiter:junit-jupiter'
}

// Apply a specific Java toolchain to ease working on different environments.
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(11)
    }
}

application {
    // Define the main class for the application.
    mainClass = 'demo_groovy.App'
}

tasks.named('test') {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}
```

------

有关后续步骤，请参阅 Gradle 网站上的入门指南，了解有关如何[构建和运行 Gradle 应用程序](https://docs.gradle.org/current/samples/sample_building_java_applications.html#run_the_application)的说明。

# 设置一个使用 GraalVM 原生镜像项目 AWS SDK for Java 2.x
<a name="setup-project-graalvm"></a>

在 2.16.1 及更高版本中，为 GraalVM 原生映像应用程序 AWS SDK for Java 2.x 提供 out-of-the-box支持。使用 `archetype-app-quickstart` Maven 原型设置具有内置原生映像支持的项目。

## 先决条件
<a name="setup-graalvmnativeimage-prereq"></a>
+ 完成[设置 适用于 Java 的 AWS SDK 2.x](setup.md) 中的步骤。
+ 安装 [GraalVM 原生映像](https://www.graalvm.org/reference-manual/native-image/#install-native-image)。

## 使用原型创建项目
<a name="setup-graalvmnativeimage-project"></a>

要创建具有内置原生映像支持的 Maven 项目，请在终端或命令提示符窗口中使用以下命令。

**注意**  
将 `com.example.mynativeimageapp` 替换为您的应用程序的完整程序包命名空间。还要将 `mynativeimageapp` 替换为您的项目名称。这将成为项目的目录的名称。

```
mvn archetype:generate \
    -DarchetypeGroupId=software.amazon.awssdk \
    -DarchetypeArtifactId=archetype-app-quickstart \
    -DarchetypeVersion=2.27.21\
    -DnativeImage=true \
    -DhttpClient=apache-client \
    -Dservice=s3 \
    -DgroupId=com.example.mynativeimageapp \
    -DartifactId=mynativeimageapp \
    -DinteractiveMode=false
```

此命令创建一个 Maven 项目，该项目配置了 适用于 Java 的 AWS SDK Amazon S3、和 `ApacheHttpClient` HTTP 客户端的依赖关系。它还包含 [GraalVM 原生映像 Maven 插件](https://graalvm.github.io/native-build-tools/latest/index.html)的依赖项，使您可以使用 Maven 构建原生映像。

要包含不同服务的依赖关系 Amazon Web Services，请将`-Dservice`参数的值设置为该服务的构件 ID。示例包括 `dynamodb`、`comprehend` 和 `pinpoint`。有关构件的完整列表 IDs，请参阅 Maven Central 上[软件.amazon.aw](https://mvnrepository.com/artifact/software.amazon.awssdk/bom/latest) ssdk 的托管依赖项列表。

要使用异步 HTTP 客户端，请将 `-DhttpClient` 参数设置为 `netty-nio-client`。要使用 `UrlConnectionHttpClient` 作为同步 HTTP 客户端，而不使用 `apache-client`，请将 `-DhttpClient` 参数设置为 `url-connection-client`。

## 生成原生映像
<a name="build-graalvmnativeimage-project"></a>

创建项目后，从项目目录（例如 `mynativeimageapp`）中运行以下命令：

```
mvn package -P native-image
```

这将在 `target` 目录（例如 `target/mynativeimageapp`）中创建原生映像应用程序。

# AWS 使用进行身份验证 AWS SDK for Java 2.x
<a name="get-started-auth"></a>

 当你使用 AWS 服务 AWS SDK for Java 2.x 进行开发 AWS 时，你必须确定如何进行身份验证。SDK 完全在幕后管理凭证发现、签名创建和凭证刷新，让您可以专注于应用程序逻辑。

## 身份验证的设置
<a name="setup-auth"></a>

《[和工具参考指南》中的身份验证 AWS SDKs 和访问](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)主题描述了不同的身份验证方法。

对于本地开发，推荐的方法是使用您的控制台登录凭证登录 AWS CLI，从而使用短期证书。如果您使用根、IAM 用户或与 IAM 的联合身份验证进行 AWS 账户访问，则建议您这样做。按照 [使用访问交互式开发工作的凭证 AWS SDK for Java 2.x](credentials-temporary.md) 中的说明进行操作。

按照 AWS SDKs 和《工具参考指南》中的说明进行操作后，您的系统应设置为允许 SDK 对请求进行签名：

### 1. 使用短期证书进行本地开发
<a name="setup-login"></a>

对于本地开发，推荐的方法是使用您的控制台登录凭证登录 AWS CLI，从而使用短期证书。如果您使用根、IAM 用户或与 IAM 的联合身份验证进行 AWS 账户访问，则建议您这样做。

有关说明，请参阅[中的使用凭证提供程序 AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials-temporary.html)。

### 2. 设置用于 SDK 的单点登录访问
<a name="setup-credentials"></a>

在完成[编程访问部分](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html#idcGettingStarted)的步骤 2 以使 SDK 使用 IAM Identity Center 身份验证后，您的系统应包含以下元素。
+  AWS CLI，用于在运行应用程序之前启动[AWS 访问门户会话](#setup-login-sso)。
+ 包含[默认配置文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-profile)的 `~/.aws/config` 文件。在向 AWS发送请求之前，适用于 Java 的 SDK 使用配置文件的 SSO 令牌提供程序配置来获取凭证。`sso_role_name` 值是与 IAM Identity Center 权限集关联的 IAM 角色，应允许访问您的应用程序中使用的 AWS 服务 。

  以下示例 `config` 文件展示了使用 SSO 令牌提供程序配置来设置的默认配置文件。配置文件的 `sso_session` 设置是指所指定的 `sso-session` 节。`sso-session` 节包含启动 AWS 访问门户会话的设置。

  ```
  [default]
  sso_session = my-sso
  sso_account_id = 111122223333
  sso_role_name = SampleRole
  region = us-east-1
  output = json
  
  [sso-session my-sso]
  sso_region = us-east-1
  sso_start_url = https://provided-domain.awsapps.com/start
  sso_registration_scopes = sso:account:access
  ```

有关 SSO 令牌提供程序配置中使用的设置的更多详细信息，请参阅 AWS SDKs 和工具参考指南中的 [SSO 令牌提供者配置](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-token-config)。

如果您的开发环境未如前所示进行编程访问设置，请按照[《 SDKs 参考指南》中的步骤 2](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html#idcGettingStarted) 进行操作。

### 3. 使用登录 AWS CLI
<a name="setup-login-sso"></a>

在运行可访问的应用程序之前 AWS 服务，您需要进行有效的 AWS 访问门户会话，这样 SDK 才能使用 IAM Identity Center 身份验证来解析证书。在中运行以下命令登录 AWS CLI AWS 访问门户。

```
aws sso login
```

由于您有默认的配置文件设置，因此无需使用 `--profile` 选项调用该命令。如果您的 SSO 令牌提供程序配置在使用指定的配置文件，则命令为 `aws sso login --profile named-profile`。

要测试您是否已有活动会话，请运行以下 AWS CLI 命令。

```
aws sts get-caller-identity
```

对此命令的响应应该报告共享 `config` 文件中配置的 IAM Identity Center 账户和权限集。

**注意**  
如果您已经有一个有效的 AWS 访问门户会话并且`aws sso login`正在运行，则无需提供凭据。  
但是，您将看到一个对话框，请求 `botocore` 访问您的信息的权限。`botocore` 是 AWS CLI 的基础。  
选择 “**允许**” 以授权访问您的信息， AWS CLI 以及适用于 Java 的 SDK。

## 其他身份验证选项
<a name="setup-additional"></a>

有关 SDK 身份验证的更多选项，例如配置文件和环境变量的使用，请参阅 AWS SDKs 和工具参考指南中的[配置](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)章节。

# 使用创建简单的应用程序 AWS SDK for Java 2.x
<a name="get-started-tutorial"></a>

本教程向您展示了如何使用 [Apache Maven](https://maven.apache.org/) 为适用于 Java 的 SDK 2.x 定义依赖项，然后编写用于连接 Amazon S3 以上传文件的代码。

要完成本教程，请执行以下步骤：
+  [步骤 1：为本教程进行设置](#get-started-setup) 
+  [步骤 2：创建项目](#get-started-projectsetup) 
+  [步骤 3：编写代码](#get-started-code) 
+  [步骤 4：构建并运行应用程序](#get-started-run) 

## 步骤 1：为本教程进行设置
<a name="get-started-setup"></a>

在开始本教程之前，您需要满足以下条件：
+ 访问权限 Amazon S3
+ 配置为 AWS 服务 使用单点登录访问的 Java 开发环境 AWS IAM Identity Center

请按照 [设置概述](setup.md#setup-overview) 中的说明为本教程进行设置。在[将开发环境配置为 Java SDK 的单点登录访问权限](get-started-auth.md#setup-credentials)并且[AWS 访问门户会话处于活动状态](get-started-auth.md#setup-login-sso)后，请继续本教程的步骤 2。

## 步骤 2：创建项目
<a name="get-started-projectsetup"></a>

要为本教程创建项目，您需要运行一条 Maven 命令，该命令会提示您输入有关如何配置项目的信息。完成所有输入并进行确认后，Maven 通过创建 `pom.xml` 完成项目构建，并创建存根 Java 文件。

1. 打开终端或命令提示符窗口，然后导航到您选择的目录，例如您的 `Desktop` 或 `Home` 文件夹。

1. 在终端中输入以下命令，然后按 `Enter`。

   ```
   mvn archetype:generate \
     -DarchetypeGroupId=software.amazon.awssdk \
     -DarchetypeArtifactId=archetype-app-quickstart \
     -DarchetypeVersion=2.27.21
   ```

1. 为每个提示输入第二列中列出的值。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sdk-for-java/latest/developer-guide/get-started-tutorial.html)

1. 输入最后一个值后，Maven 会列出您所做的选择。通过输入 *`Y`* 进行确认，或者通过输入 *`N`* 重新输入值。

Maven 会根据您输入的 `artifactId` 值创建名为 `getstarted` 的项目文件夹。在 `getstarted` 文件夹中，找到一个可以查看的 `README.md` 文件、一个 `pom.xml` 文件和一个 `src` 目录。

Maven 构建了以下目录树。

```
getstarted
├── README.md
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── org
    │   │       └── example
    │   │           ├── App.java
    │   │           ├── DependencyFactory.java
    │   │           └── Handler.java
    │   └── resources
    │       └── simplelogger.properties
    └── test
        └── java
            └── org
                └── example
                    └── HandlerTest.java

10 directories, 7 files
```

下面显示的是 `pom.xml` 项目文件的内容。

### `pom.xml`
<a name="projectsetup-collapse2"></a>

`dependencyManagement` 部分包含一个 AWS SDK for Java 2.x 依赖项，而 `dependencies` 部分包含一个 Amazon S3 依赖项。由于 `maven.compiler.source` 和 `maven.compiler.target` 属性中的值是 `1.8`，所以该项目使用 Java 1.8。

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>getstarted</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.shade.plugin.version>3.2.1</maven.shade.plugin.version>
        <maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version>
        <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
        <aws.java.sdk.version>2.27.21</aws.java.sdk.version> <-------- SDK version picked up from archetype version.
        <slf4j.version>1.7.28</slf4j.version>
        <junit5.version>5.8.1</junit5.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>${aws.java.sdk.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>  <-------- S3 dependency
            <exclusions>
                <exclusion>
                    <groupId>software.amazon.awssdk</groupId>
                    <artifactId>netty-nio-client</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>software.amazon.awssdk</groupId>
                    <artifactId>apache-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>sso</artifactId> <-------- Required for identity center authentication.
        </dependency>

        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>ssooidc</artifactId> <-------- Required for identity center authentication.
        </dependency>

        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>apache-client</artifactId> <-------- HTTP client specified.
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <!-- Needed to adapt Apache Commons Logging used by Apache HTTP Client to Slf4j to avoid
        ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl during runtime -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <!-- Test Dependencies -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit5.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
            </plugin>
        </plugins>
    </build>

</project>
```

## 步骤 3：编写代码
<a name="get-started-code"></a>

以下代码显示的是 Maven 创建的 `App` 类。`main` 方法是应用程序的入口点，它会创建 `Handler` 类的实例，然后调用其 `sendRequest` 方法。

### `App` 类
<a name="projectsetup-collapse2"></a>

```
package org.example;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class App {
    private static final Logger logger = LoggerFactory.getLogger(App.class);

    public static void main(String... args) {
        logger.info("Application starts");

        Handler handler = new Handler();
        handler.sendRequest();

        logger.info("Application ends");
    }
}
```

Maven 创建的 `DependencyFactory` 类包含用于构建和返回 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html) 实例的 `s3Client` 工厂方法。`S3Client` 实例使用基于 Apache 的 HTTP 客户端的实例。这是因为您在 Maven 提示您输入使用哪个 HTTP 客户端时指定了 `apache-client`。

以下代码中显示了 `DependencyFactory`。

### `DependencyFactory` 类
<a name="code-collapse2"></a>

```
package org.example;

import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.services.s3.S3Client;

/**
 * The module containing all dependencies required by the {@link Handler}.
 */
public class DependencyFactory {

    private DependencyFactory() {}

    /**
     * @return an instance of S3Client
     */
    public static S3Client s3Client() {
        return S3Client.builder()
                       .httpClientBuilder(ApacheHttpClient.builder())
                       .build();
    }
}
```

`Handler` 类包含程序的主要逻辑。在 `App` 类中创建 `Handler` 的实例时，`DependencyFactory` 将提供 `S3Client` 服务客户端。您的代码使用 `S3Client` 实例调用 Amazon S3 服务。

Maven 生成以下带有 `TODO` 注释的 `Handler` 类。本教程的下一步会将 *`TODO`* 替换为代码。

### Maven 生成的 `Handler` 类
<a name="code-collapsible3"></a>

```
package org.example;

import software.amazon.awssdk.services.s3.S3Client;


public class Handler {
    private final S3Client s3Client;

    public Handler() {
        s3Client = DependencyFactory.s3Client();
    }

    public void sendRequest() {
        // TODO: invoking the api calls using s3Client.
    }
}
```

要填写逻辑，请将该 `Handler` 类的全部内容替换为以下代码。这将填写 `sendRequest` 方法并添加必要的导入。

### 实现的 `Handler` 类
<a name="code-collapse4"></a>

该代码首先创建一个新的 S3 桶，其名称的最后一部分使用 `System.currentTimeMillis()` 生成，以使桶名称具有唯一性。

使用 `createBucket()` 方法创建桶后，程序将使用 `S3Client` 的 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html#putObject(software.amazon.awssdk.services.s3.model.PutObjectRequest,software.amazon.awssdk.core.sync.RequestBody)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html#putObject(software.amazon.awssdk.services.s3.model.PutObjectRequest,software.amazon.awssdk.core.sync.RequestBody)) 方法上传对象。对象的内容是使用 `RequestBody.fromString` 方法创建的简单字符串。

最后，程序使用 `cleanUp` 方法删除对象，然后删除桶。

```
package org.example;

import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
import software.amazon.awssdk.services.s3.model.HeadBucketRequest;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.S3Exception;


public class Handler {
    private final S3Client s3Client;

    public Handler() {
        s3Client = DependencyFactory.s3Client();
    }

    public void sendRequest() {
        String bucket = "bucket" + System.currentTimeMillis();
        String key = "key";

        createBucket(s3Client, bucket);

        System.out.println("Uploading object...");

        s3Client.putObject(PutObjectRequest.builder().bucket(bucket).key(key)
                        .build(),
                RequestBody.fromString("Testing with the {sdk-java}"));

        System.out.println("Upload complete");
        System.out.printf("%n");

        cleanUp(s3Client, bucket, key);

        System.out.println("Closing the connection to {S3}");
        s3Client.close();
        System.out.println("Connection closed");
        System.out.println("Exiting...");
    }

    public static void createBucket(S3Client s3Client, String bucketName) {
        try {
            s3Client.createBucket(CreateBucketRequest
                    .builder()
                    .bucket(bucketName)
                    .build());
            System.out.println("Creating bucket: " + bucketName);
            s3Client.waiter().waitUntilBucketExists(HeadBucketRequest.builder()
                    .bucket(bucketName)
                    .build());
            System.out.println(bucketName + " is ready.");
            System.out.printf("%n");
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }

    public static void cleanUp(S3Client s3Client, String bucketName, String keyName) {
        System.out.println("Cleaning up...");
        try {
            System.out.println("Deleting object: " + keyName);
            DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucketName).key(keyName).build();
            s3Client.deleteObject(deleteObjectRequest);
            System.out.println(keyName + " has been deleted.");
            System.out.println("Deleting bucket: " + bucketName);
            DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder().bucket(bucketName).build();
            s3Client.deleteBucket(deleteBucketRequest);
            System.out.println(bucketName + " has been deleted.");
            System.out.printf("%n");
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        System.out.println("Cleanup complete");
        System.out.printf("%n");
    }
}
```

## 步骤 4：构建并运行应用程序
<a name="get-started-run"></a>

在创建了包含完整 `Handler` 类的项目后，生成并运行该应用程序。

1. 确保您的 IAM Identity Center 会话处于活动状态。为此，请运行 AWS Command Line Interface 命令`aws sts get-caller-identity`并检查响应。如果您没有活动会话，请参阅[此部分](get-started-auth.md#setup-login-sso)了解说明。

1. 打开终端或命令提示符窗口并导航至您的项目目录 `getstarted`。

1. 使用以下命令生成项目：

   ```
   mvn clean package
   ```

1. 使用以下命令运行应用程序。

   ```
   mvn exec:java -Dexec.mainClass="org.example.App"
   ```

要查看程序创建的新桶和对象，请执行以下步骤。

1. 在 `Handler.java` 中，注释掉 `sendRequest` 方法中的 `cleanUp(s3Client, bucket, key)` 行并保存文件。

1. 运行 `mvn clean package` 以重新生成项目。

1. 重新运行 `mvn exec:java -Dexec.mainClass="org.example.App"` 以再次上传文本对象。

1. 登录 [S3 控制台](https://console.aws.amazon.com/s3/)，在新创建的桶中查看新对象。

查看文件后，删除对象，然后删除桶。

### 成功
<a name="get-started-success"></a>

如果您的 Maven 项目生成和运行都没有错误，那么恭喜您！您已经使用适用于 Java 的 SDK 2.x 成功构建了您的第一个 Java 应用程序。

### 清理
<a name="cleanup"></a>

要清除您在本教程中创建的资源，请执行以下操作：
+ 在 [S3 控制台](https://console.aws.amazon.com/s3/)中删除运行应用程序时创建的所有对象和所有桶（如果您尚未执行此操作）。
+ 删除项目文件夹 (`getstarted`)。

## 后续步骤
<a name="get-started-next"></a>

现在您已掌握了基础知识，接下来，您可以了解以下内容：
+  [与 Amazon S3](examples-s3.md) 
+  [使用其他](work-with-services.md)（例如 Amazon Web Services[DynamoDB[Amazon EC2](examples-ec2.md)](examples-dynamodb.md)、）和[各种数据库服务](examples-databases.md) 
+  [使用 SDK](using.md) 
+  [适用于 Java 的 AWS SDK的安全性](security.md)**