這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS CDK in Go
Go 是 完全支援的用戶端語言, AWS Cloud Development Kit (AWS CDK) 且被視為穩定。在 Go AWS CDK 中使用 會使用熟悉的工具。Go 版本 AWS CDK 甚至會使用 Go 樣式識別符。
與其他 CDK 支援的語言不同,Go 不是傳統的物件導向程式設計語言。Go 使用其他語言通常會利用繼承的組成。我們已嘗試盡可能採用慣用 Go 方法,但有些地方 CDK可能會有所不同。
本主題提供在 Go AWS CDK 中使用 的指引。如需 的簡單 Go 專案演練,請參閱公告部落格文章
開始使用 Go
若要使用 AWS CDK,您必須擁有 AWS 帳戶和憑證,並已安裝 Node.js AWS CDK 和 Toolkit。請參閱 開始使用 AWS CDK。
的 Go 繫結 AWS CDK 使用標準 Go 工具鏈
注意
第三方語言棄用:只有在供應商或社群共用 EOL(生命週期結束) 之前,才支援語言版本,並且可能會在事先通知的情況下變更。
建立專案
您可以透過cdk init
在空目錄中叫用 來建立新的 AWS CDK 專案。使用 --language
選項並指定 go
:
mkdir my-project cd my-project cdk init app --language go
cdk init
使用專案資料夾的名稱來命名專案的各種元素,包括類別、子資料夾和檔案。資料夾名稱中的連字號會轉換為底線。但是,名稱應遵循 Go 識別碼的形式;例如,不應以數字開頭或包含空格。
產生的專案包含 github.com/aws/aws-cdk-go/awscdk/v2
中核心 AWS CDK Go 模組的參考go.mod
。安裝此模組和其他必要模組go get時發生問題。
管理 AWS 建構程式庫模組
在大多數 AWS CDK 文件和範例中,「模組」一詞通常用於參考 AWS Construct Library 模組,每個 AWS 服務一或多個,這與術語的慣用 Go 用量不同。建構程式庫在一個 Go CDK 模組中提供,其中包含個別的建構程式庫模組,支援該模組內以 Go 套件形式提供的各種 AWS 服務。
有些服務「 AWS 建構程式庫支援位於多個建構程式庫模組 (Go 套件) 中。例如,除了名為 awsroute53patterns
、 和 的主awsroute53
套件之外awsroute53resolver
,Amazon Route 53 還有三個建構程式庫模組awsroute53targets
。
您在大多數 AWS CDK 應用程式中需要 AWS CDK的 核心套件會在 Go 程式碼中匯入為 github.com/aws/aws-cdk-go/awscdk/v2
。 AWS Construct Library 中各種 服務的套件會在 下運作github.com/aws/aws-cdk-go/awscdk/v2
。例如,Amazon S3 模組的命名空間為 github.com/aws/aws-cdk-go/awscdk/v2/awss3
。
import ( "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // ... )
匯入您要在應用程式中使用之服務的建構程式庫模組 (Go 套件) 後,您可以使用 存取該模組中的建構awss3.Bucket
。
在 中管理相依性 Go
在 Go 中,相依性版本定義於 中go.mod
。預設值go.mod
類似於此處所示的預設值。
module my-package go 1.16 require ( github.com/aws/aws-cdk-go/awscdk/v2 v2.16.0 github.com/aws/constructs-go/constructs/v10 v10.0.5 github.com/aws/jsii-runtime-go v1.29.0 )
套件名稱 (模組,位於 Go parlance 中) 由 指定,URL並附加必要的版本編號。Go 的模組系統不支援版本範圍。
發出go get命令來安裝所有必要的模組並更新 go.mod
。若要查看相依項目的可用更新清單,請發行 go list -m -u all。
AWS CDK Go 中的慣用語
欄位和方法名稱
欄位和方法名稱使用 的原始 TypeScriptCDK語言 中的駱駝殼 (likeThis
)。在 Go 中,這些遵循 Go 慣例,Pascal 大小寫 (LikeThis
)。
清除
在您的main
方法中,使用 defer jsii.Close()
來確保您的CDK應用程式在其本身之後清除。
遺失值和指標轉換
在 Go 中,屬性套件等 AWS CDK 物件中的遺失值由 表示nil
。Go 的類型沒有 nullable;唯一可以包含的類型nil
是指標。若要允許值為選用,則所有CDK屬性、引數和傳回值都是指標,即使是原始類型也是如此。這適用於必要值和選用值,因此,如果稍後所需的值變成選用值,則不需要類型中斷變更。
傳遞常值或表達式時,請使用下列協助函式來建立值的指標。
-
jsii.String
-
jsii.Number
-
jsii.Bool
-
jsii.Time
為了保持一致性,我們建議您在定義自己的建構時以類似方式使用指標,例如,接收建構的id
字串可能看起來更方便,而不是將指標作為字串。
處理選用 AWS CDK 值時,包括原始值和複雜類型,您應該明確測試指標,以確保它們不會在對它們執行任何操作nil
之前。Go 沒有「語法糖」來協助處理空值或遺失值,就像某些其他語言一樣。不過, 屬性套件和類似結構中的必要值保證存在 (否則建構失敗),因此不需要nil
檢查這些值。
建構和道具
表示一或多個 AWS 資源的建構及其相關聯的屬性,會在 Go 中表示為介面。例如, awss3.Bucket
是介面。每個建構都有原廠函數,例如 awss3.NewBucket
,以傳回實作對應介面的結構。
所有工廠函數都會使用三個引數:定義建構體scope
的 (建構樹狀結構中的父系)id
、 和 props
,以及建構體用來設定其建立之資源的鍵/值對套件。中其他地方也會使用「屬性組合」模式 AWS CDK。
在 Go 中,道具由每個建構的特定結構類型表示。例如, 會awss3.Bucket
採用類型 的 props 引數awss3.BucketProps
。使用 結構常值來寫入 props 引數。
var bucket = awss3.NewBucket(stack, jsii.String("amzn-s3-demo-bucket"), &awss3.BucketProps{ Versioned: jsii.Bool(true), })
一般結構
在某些地方, AWS CDK 會使用 JavaScript 陣列或未鍵入的物件作為方法的輸入。(例如,請參閱 AWS CodeBuildBuildSpec.fromObject()
的方法。) 在 Go 中,這些物件分別以切片和空界面表示。
CDK 提供各種協助程式函數,例如jsii.Strings
用於建置包含原始類型的層。
jsii.Strings("One", "Two", "Three")
開發自訂建構
在 Go 中,撰寫新的建構通常比延伸現有建構更簡單。首先,定義新的結構類型,如果需要類似延伸的語義,則匿名嵌入一個或多個現有類型。任何新增功能的寫入方法,以及保存所需資料所需的欄位。如果您的建構需要,請定義 props 介面。最後,撰寫工廠函數NewMyConstruct()
以傳回建構的執行個體。
如果您只是在現有建構體上變更一些預設值,或在實例化時新增簡單行為,則不需要所有這些管道。相反地,請撰寫工廠函數,以呼叫您正在擴展的建構的工廠函數。例如,在其他CDK語言中,您可以建立 TypedBucket
建構,透過覆寫 s3.Bucket
類型來強制執行 Amazon S3 儲存貯體中的物件類型,並在新類型的初始化器中新增僅允許將指定檔案名稱副檔名新增至儲存貯體的儲存貯體政策。在 Go 中,簡單地撰寫 NewTypedBucket
,該 會傳回 s3.Bucket
(使用 來驗證s3.NewBucket
),而您已將適當的儲存貯體政策新增至其中。不需要新的建構類型,因為 功能已在標準儲存貯體建構中可用;新的「建構」只是提供更簡單的設定方式。
建置、合成和部署
在執行應用程式之前, AWS CDK 會自動編譯應用程式。不過,手動建置應用程式以檢查錯誤和執行測試可能很有用。您可以在專案根目錄中,go build
透過命令提示發出 來執行此操作。
執行您在命令提示go test
字元上執行所寫入的任何測試。