AWS SDK for Java 2.x 入門 - AWS SDK for Java 2.x

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS SDK for Java 2.x 入門

APIs 為 Amazon Web Services () AWS SDK for Java 2.x 提供 Java AWS。您可以使用 SDK建置 Java 應用程式,以使用 Amazon S3、 Amazon EC2、 DynamoDB等。

本教學課程示範如何使用 Apache Maven 定義適用於 Java 2.x SDK的 相依性,然後編寫連線至 的程式碼 Amazon S3 以上傳檔案。

請依照下列步驟完成本教學課程:

步驟 1:設定本教學課程

開始本教學課程之前,您需要下列項目:

  • 存取許可 Amazon S3

  • 設定為 AWS 服務 使用單一登入存取 的 Java 開發環境 AWS IAM Identity Center

使用 中的說明設定概觀來設定本教學課程。使用 Java 的單一登入存取設定開發環境,SDK並擁有作用中 AWS 的存取入口網站工作階段 後,請繼續本教學課程的步驟 2。

步驟 2:建立專案

若要建立本教學課程的專案,請執行 Maven 命令,提示您輸入如何設定專案。輸入並確認所有輸入後,Maven 會建立 pom.xml並建立 stub Java 檔案,以完成建置專案。

  1. 開啟終端機或命令提示視窗,然後導覽至您選擇的目錄,例如您的 DesktopHome 資料夾。

  2. 在終端機輸入下列命令,然後按 Enter

    mvn archetype:generate \ -DarchetypeGroupId=software.amazon.awssdk \ -DarchetypeArtifactId=archetype-app-quickstart \ -DarchetypeVersion=2.27.21
  3. 針對每個提示輸入第二欄中列出的值。

    提示 要輸入的值
    Define value for property 'service': s3
    Define value for property 'httpClient': apache-client
    Define value for property 'nativeImage': false
    Define value for property 'credentialProvider' identity-center
    Define value for property 'groupId': org.example
    Define value for property 'artifactId': getstarted
    Define value for property 'version' 1.0-SNAPSHOT: <Enter>
    Define value for property 'package' org.example: <Enter>
  4. 輸入最後一個值後,Maven 會列出您所做的選擇。輸入 來確認,Y或輸入 來重新輸入值N

Maven getstarted會根據您輸入的artifactId值建立名為 的專案資料夾。在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專案檔案的內容。

dependencyManagement 區段包含 的相依性, AWS SDK for Java 2.x 且dependencies區段具有 Amazon S3 的相依性。由於 maven.compiler.sourcemaven.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:撰寫程式碼

下列程式碼顯示 Maven 建立的App類別。main 該方法是應用程式的進入點,它會建立 Handler 類別的執行個體,然後呼叫其sendRequest方法。

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類別包含建置和傳回S3Client執行個體的s3Client工廠方法。S3Client 執行個體使用 Apache 型HTTP用戶端的執行個體。這是因為您在 Maven 提示您使用哪個HTTP用戶端apache-client時指定 。

會以下列程式碼DependencyFactory顯示。

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會以程式碼取代 。

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 方法已填入,並新增必要的匯入。

程式碼會先使用 產生名稱的最後一部分建立新的 S3 System.currentTimeMillis() 儲存貯體,讓儲存貯體名稱獨一無二。

createBucket()方法中建立儲存貯體後,程式會使用 putObject方法上傳物件S3Client。物件的內容是使用 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:建置和執行應用程式

建立專案並包含完整Handler類別後,請建置和執行應用程式。

  1. 請確定您具有作用中的 IAM Identity Center 工作階段。若要這麼做,請 AWS Command Line Interface 執行 命令aws sts get-caller-identity並檢查回應。如果您沒有作用中工作階段,請參閱本節以取得指示。

  2. 開啟終端機或命令提示視窗,然後導覽至您的專案目錄 getstarted

  3. 使用下列命令來建置專案:

    mvn clean package
  4. 使用下列命令來執行應用程式。

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

若要檢視程式建立的新儲存貯體和物件,請執行下列步驟。

  1. 在 中Handler.java,評論sendRequest方法cleanUp(s3Client, bucket, key)中的行,並儲存檔案。

  2. 執行 來重建專案mvn clean package

  3. 重新執行mvn exec:java -Dexec.mainClass="org.example.App"以再次上傳文字物件。

  4. 登入 S3 主控台以檢視新建立儲存貯體中的新物件。

檢視檔案後,請刪除物件,然後刪除儲存貯體。

Success (成功)

如果您的 Maven 專案建置並執行時沒有錯誤,恭喜您!您已成功使用適用於 Java 2.x SDK的 建置第一個 Java 應用程式。

清除

若要清除您在本教學課程中建立的資源,請執行下列動作:

  • 如果您尚未這麼做,請在 S3 主控台 中刪除執行應用程式時建立的任何物件和儲存貯體。

  • 刪除專案資料夾 (getstarted)。

後續步驟

現在您已經具備基本知識,您可以了解以下內容: