10 分鐘快速了解 AWS CDK 相關名詞

POSTED BY  
2020 年 11 月 22 日
AWS, CDK
10 分鐘快速了解 AWS CDK 相關名詞

以下的解釋,是基於 AWS CDK 官方文件,和使用 CDK Typescript 的角度,來解釋這些相關名詞

Construct

  • 最基礎的函式庫 (或理解成最基礎的雲元件), CDK App、Stack 和一切引入 @aws-cdk 中的 Resources,都是繼承它來的

  • 區分 L1 Construct、L2 Construct、Patterns Construct

    • L1 Construct 為低階的 Construct,命名都以 cfn 開頭來命名,例如 cfnBucket,L1 是以 CloudFormation 為基底,而事實上,CDK 都是以 CloudFormation 為基底來運作,相對的,所有 CloudFormation 的好處,CDK 幾乎都有
    • L2 Construct 為高階的 Construct,如同高階的程式語言會比低階的程式語言使用上來的方便,因為隱藏了許多細節,也就是預設一些設定值,相對於 L1 Construct,L1 Construct 就像編寫 CloudFormation 一樣,所有的參數都必需要設定
    • Patterns Construct 就更為高階,例如官方文件所介紹的 ApplicationLoadBalancedFargateService,已經不是像 L2 以 Resource 為單位,而是以 Service 為單位,也就是多種 Resources 來組合成一個可用的服務
  • 若要開發自家公司 CDK library,建議都用 Construct 的方式,以方便在公司內部共用

 

Stacks

  • AWS CDK 部署的基本單位 (也就是 CloudFormation 中的 stack)
  • 一個 App 中可以有多個 Stack
  • 同時實例化二個相同的 Stack 時,使用指令 cdk synth 合成 CloudFormation 時,還是會視為兩個獨立的 Stack 來部署
  • 一個 Stack 最多只能有 500 個 Resource

 

Apps

  • Construct tree 中的最頂層,也就是 root (CDK 中所有類別都來自於 Construct,再一層一層 pass scope 下去,形成 Construct Tree)
  • 使用 cdk deploy 指令時,有一連串 App 運行的生命週期,可參考 App lifecycle ,其中第 4 個 Synthesis 也就是生成 CloudFormation template 的時期
  • 使用 cdk deploy 指令時,實際上會去讀取 cdk.json 中的 key 為 "app" 的值,也可以使用 --app 參數來取代實際要運行部署的指令

 

基本上對 Apps、Stacks、Construct 有最基本的認識後,就可以動手來使用 cdk 了,如下圖所示

AWS CDK Application

圖片來源: AWS CDK 官方網站

App 在最外層,包含著 Stack,再包含著 Construct,Construct 中有各種 AWS Resources (S3、Lambda 等等…),有這些概念後,在實作時,會比較有概念,scope 的傳遞也比較不會亂掉

 

Environments

  • CDK 環境變數最主要就是 CDK_DEFAULT_ACCOUNT 和 CDK_DEFAULT_REGION,決定部署時使用哪個帳號和地區
  • CDK_DEFAULT_ACCOUNT 和 CDK_DEFAULT_REGION 環境變數若沒特別指定時,在下指令 cdk deploy --profile {your_profile} 時,會基於 AWS 指定的 profile (若沒指定就是 default profile) 中的設定來決定,AWS Profile Credential 檔案路徑為 ~/.aws/credentials
  • 建議可以像以下的片段程式碼來指定 env
const env = {
  region: app.node.tryGetContext('region') || process.env.CDK_DEFAULT_REGION,
  account: app.node.tryGetContext('account') || process.env.CDK_DEFAULT_ACCOUNT,
};

new AwsCodedeployWithAutoScalingInfraStack(
  app,
  'AwsCodedeployWithAutoScalingInfraStack',
  {
    env,
  }
);

此設定參考 虎哥 youtube 影片

這樣設定好處在於,可以在下指令時,決定 account 和 region,例如指定 region

cdk deploy -c region=ap-northeast-1

而如果沒有指定 context,就使用環境變數來設定 env

  • 指定 env 的好處在於,stack class 中可以使用 this.region or this.account 來取得資訊,若不指定 env 則會取不到值,所以使用這些判斷條件的時候就要小心,指定 env 就不會有問題 (若不指定必需等到 cdk deploy 最後的生命週期,才能取得 account 和 region 相關資訊)
  • 承上,也不能在使用類似 Vpc.fromLookup 來尋找 region 中的 vpc,因為 vpc 相依於 region,同理 available zone 也是一樣的意思
  • CDK 官方文件也是建議在正式生產環境,要指定 env 是比較好的作法
歡迎留言
1

您可能也想看

Workaround for AWS Grafana alerting
2023 年 8 月 3 日
AWS, DevOps
AWS VPC Endpoint 使用場景
2022 年 3 月 14 日
AWS, CDK, Network
CDK 指定 Physical names 運作方式
2021 年 12 月 4 日
AWS, CDK, Cloudformation