這是 AWS CDK v2 開發人員指南。較舊的 CDK V1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS CDK 在 Java 中使用
Java 是完全支援的用戶端語言, AWS CDK 且被認為是穩定的。您可以開發 Java 中使用熟悉的工具,包括JDK(甲骨文的,或開放JDK分發,如 Amazon Corretto)和阿帕奇 Maven 的 AWS CDK 應用程序。
AWS CDK 支援 Java 8 及更新版本。但是,我們建議您使用最新版本,因為該語言的更新版本包括對於開發 AWS CDK 應用程序特別方便的改進。例如,Java 9 引入了該Map.of()
方法(一種聲明將被寫為對象文字的哈希映射的便捷方 TypeScript法)。Java 10 使用var
關鍵字引入了本地類型推斷。
注意
本開發人員指南中的大多數代碼示例都適用於 Java 8。一些例子使用Map.of()
; 這些示例包括註釋注意到它們需要 Java 9。
您可以使用任何文本編輯器或可IDE以讀取 Maven 項目的 Java 來處理您的應用 AWS CDK 程序。我們在本指南中提供了 Eclipse
可以使用 Java 以外的JVM託管語言編寫 AWS CDK 應用程序(例如,Kotlin,Groovy,Clojure 或 Scala),但體驗可能不是特別習慣,我們無法為這些語言提供任何支持。
開始使用 Java
若要使用 AWS CDK,您必須擁有 AWS 帳戶和認證,並已安裝 Node.js 和工 AWS CDK 具組。請參閱 開始使用 AWS CDK。
Java AWS CDK 應用程式需要 Java 8 (v1.8) 或更新版本。我們建議 Amazon Corretto
注意
第三方語言棄用:語言版本僅在供應商或社區共享其EOL(生命週期結束)之前受到支持,並且如有更改,恕不另行通知。
建立專案
您可以在空目錄cdk init
中呼叫來建立新 AWS CDK 專案。使用選--language
項並指定java
:
mkdir my-project cd my-project cdk init app --language java
cdk init
使用專案資料夾的名稱來命名專案的各種元素,包括類別、子資料夾和檔案。資料夾名稱中的連字號會轉換為底線。但是,名稱應該遵循 Java 標識符的形式; 例如,它不應以數字開頭或包含空格。
生成的項目包括對 software.amazon.awscdk
Maven 包的引用。它和它的依賴關係由 Maven 自動安裝。
如果您使用的是IDE,您現在可以開啟或匯入專案。例如,在 Eclipse 中,選擇「檔案 > 匯入 > Maven > 現有的 Maven 專案」。請確定專案設定已設定為使用 Java 8 (1.8)。
管理 AWS 建構程式庫模組
使用 Maven 安裝 AWS 建構函式庫套件,這些套件位於群組中software.amazon.awscdk
。大多數構造都在工件中aws-cdk-lib
,默認情況下會添加到新的 Java 項目中。對於仍在開發更高級別CDK支持的服務模塊是在單獨的「實驗性」軟件包中,以其服務名稱的簡短版本(no AWS 或 Amazon 前綴)命名。搜索 Maven 中央存儲庫
注意
CDKAPI參考的 Java 版本也顯示了軟件包名稱。
某些服務的「 AWS 建構程式庫」支援位於多個命名空間中。例如,Amazon 路線 53 的功能分為software.amazon.awscdk.route53
route53-patterns
、route53resolver
、和route53-targets
。
主 AWS CDK 包在 Java 代碼中導入為software.amazon.awscdk
. AWS 構造庫中各種服務的模塊住在下面software.amazon.awscdk.services
,命名類似於它們的 Maven 包名稱。例如,Amazon S3 模塊的命名空間是software.amazon.awscdk.services.s3
。
我們建議您為每個 Java 原始檔案中使用的每個「 AWS 建構程式庫」類別撰寫個別的 Java import
陳述式,並避免匯入萬用字元。您始終可以在沒有import
語句的情況下使用類型的完全限定名稱(包括其名稱空間)。
如果您的應用程序依賴於實驗包,請編輯項目pom.xml
並在<dependencies>
容器中添加新<dependency>
元素。例如,下面的<dependency>
元素指定了 CodeStar 實驗構造庫模塊:
<dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>codestar-alpha</artifactId> <version>2.0.0-alpha.10</version> </dependency>
提示
如果您使用 JavaIDE,它可能具有管理 Maven 依賴關係的功能。但是,我們建議您pom.xml
直接進行編輯,除非您絕對確定IDE其功能與您手動執行的操作相符。
管理相依性 Java
在 Java 中,依賴關係在中指定pom.xml
並使用 Maven 安裝。<dependencies>
容器包含每個封裝的<dependency>
元素。以下是一個典型的 pom.xml
CDK Java 應用程序的一部分。
<dependencies> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>aws-cdk-lib</artifactId> <version>2.14.0</version> </dependency> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>appsync-alpha</artifactId> <version>2.10.0-alpha.0</version> </dependency> </dependencies>
提示
許多 Java 都集成IDEs了 Maven 支持和可視化pom.xml
編輯器,您可能會發現管理依賴關係方便。
Maven 不支持依賴鎖定。雖然您可以在中指定版本範圍pom.xml
,但我們建議您始終使用確切的版本來保持組建可重複。
Maven 會自動安裝傳遞依賴關係,但每個軟件包只能有一個安裝的副本。系統會選取POM樹狀結構中指定最高的版本;應用程式永遠會有安裝套件版本的最後一個字詞。
每當您構建()或 package(mvn compile)項目時,Maven 都會自動安裝或更新您的依賴關係。mvn packageCDK工具包在每次運行時都會自動執行此操作,因此通常不需要手動調用 Maven。
AWS CDK 爪哇成語
道具
所有的 AWS 構造庫類都使用三個參數實例化:正在定義構造的範圍(它在構造樹中的父級),一個 id 和 prop,構造用於配置它創建的資源的鍵/值對的包。其他類和方法也使用「屬性包」模式作為參數。
在 Java 中,道具使用生成器模式Bucket
建構 (代表 Amazon S3 儲存貯體) 將作為其道具的執行個體BucketProps
。
BucketProps
類(就像每個 AWS 構造庫 prop 類一樣)都有一個名為的內部類Builder
。該BucketProps.Builder
類型提供了設置BucketProps
實例的各種屬性的方法。每個方法都會傳回Builder
執行個體,因此方法呼叫可以鏈結以設定多個屬性。在鏈的末尾,你調用實際生build()
成的BucketProps
對象。
Bucket bucket = new Bucket(this, "MyBucket", new BucketProps.Builder() .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build());
構造和其他類似道具的對象作為其最終參數的類提供了一個快捷方式。該類有一個自己Builder
的,它在一個步驟中實例化它和它的 prop 對象。這樣,您不需要明確實例化(例如)BucketProps
和 a,並Bucket
且不需要為 prop 類型導入。
Bucket bucket = Bucket.Builder.create(this, "MyBucket") .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build();
從現有建構衍生自己的建構時,您可能需要接受其他屬性。我們建議您遵循這些構建器模式。但是,這並不像子類化構造類那麼簡單。您必須自行提供兩個新Builder
班級的移動部分。你可能更喜歡簡單地讓你的構造接受一個或多個額外的參數。當一個參數是可選的,你應該提供額外的構造函數。
泛型結構
在某些情況下APIs, AWS CDK 使用 JavaScript 數組或不具類型的對象作為方法的輸入。(例如,請參閱 AWS CodeBuild的BuildSpec.fromObject()
方法。) 在 Java 中,這些對象表示為java.util.Map<String, Object>
。如果值是所有字符串,則可以使用Map<String, String>
。
Java 沒有提供像其他語言那樣為此類容器編寫文字的方法。在 Java 9 及更高版本中,您可java.util.Map.of()
java.util.Map.of( "base-directory", "dist", "files", "LambdaStack.template.json" )
若要建立包含十個以上項目的地圖,請使用java.util.Map.ofEntries()
如果您使用的是 Java 8,則可以提供類似於這些方法的方法。
JavaScript 數組被表示為List<Object>
或List<String>
在 Java 中。該方法java.util.Arrays.asList
對於定義短 List
s 很方便。
List<String> cmds = Arrays.asList("cd lambda", "npm install", "npm install typescript")
缺少值
在 Java 中,缺少 AWS CDK 對象(如道具)中的值由表示null
。您必須明確測試任何可能的值,null
以確保它包含一個值,然後再對其執行任何操作。Java 沒有「語法糖」來幫助處理空值,就像其他語言一樣。在某些情況下,您可能會發現 Apache ObjectUtil 的defaultIfNull
建置和執行CDK應用程式
在運行之前 AWS CDK 會自動編譯您的應用程序。但是,手動構建應用程序以檢查錯誤並運行測試可能很有用。您可以在您的IDE(例如,在 Eclipse 中按 Control-B)或在項目的根目錄下mvn compile
在命令提示符下發出來執行此操作。
mvn test
在命令提示字元中執行您撰寫的任何測試。