CDK是一套開放原始碼軟體開發架構, 使用程式設計師熟悉的程式設計語言為您的雲端應用程式資源進行模型分析和佈建.

簡單來說它就是使用程式語言去建立CloudFormation Template佈建AWS的資源.

目前提供了Python, TypeScript, Java以及.Net撰寫.

可參閱官方說明

廢話不多說, 直接Demo.

安裝 aws-cdk

請先安裝好 npm 這個套件

在Mac環境

$brew install node

安裝 cdk 與 python cdk core

    $npm install -g aws-cdk   
    $pip install --upgrade aws-cdk.core

可以搭配本機的AWS profile

e.g. :

$cdk deploy myStack --profile test

建立資料夾 & 初始化你的cdk app

    $mkdir -p someapp    
    $cdk init --language python    

切換至virtualenv環境

    $source .env/bin/active
    $pip install -r requirements.txt

列出cdk app

$cdk ls

s3 範例

先安裝s3 套件

$pip install aws-cdk.aws-s3

切換至 someapp/cdk 路徑

$cd someapp/cdk

編輯 cdk_stack.py

vim cdk_stack.py

會看到類似下方的Code

    from aws_cdk import core
    class CdkStack(core.Stack):
        def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
            super().__init__(scope, id, **kwargs)
            # The code that defines your stack goes here

新增Code, 如下方

    from aws_cdk import core, aws_s3 as s3, aws_ec2 as ec2
    class CdkStack(core.Stack):
        def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
            super().__init__(scope, id, **kwargs)
            # The code that defines your stack goes here
            bucket = s3.Bucket(self, "bucketName", versioned = True)

寫好後切換到上一層並下synth的指令

    $cd ../
    $cdk synth

就會看到像下方的回應

    Resources:
      bucketNameAndID:
        Type: AWS::S3::Bucket
        Properties:
          VersioningConfiguration:
            Status: Enabled
        UpdateReplacePolicy: Retain
        DeletionPolicy: Retain
        Metadata:
          aws:cdk:path: cdk/bucketName/Resource
      CDKMetadata:
        Type: AWS::CDK::Metadata
        Properties:
          Modules: aws-cdk=1.3.0,@aws-cdk/aws-cloudwatch=1.6.0,@aws-cdk/aws-ec2=1.6.0,@aws-cdk/aws-events=1.6.0,@aws- cdk/aws-iam=1.6.0,@aws-cdk/aws-kms=1.6.0,@aws-cdk/aws-s3=1.6.0,@aws-cdk/aws-ssm=1.6.0,@aws-cdk/core=1.6.0,@aws-cdk/cx-api=1.6.0,@aws-cdk/region-info=1.6.0,jsii-runtime=Python/3.7.4

最後就可以下deploy指令去部署了

    $cdk deploy --profile test

大概等個幾分鐘, 就會回報說部署好了

    cdk: deploying...
    cdk: creating CloudFormation changeset...
     0/3 | 11:46:23 AM | CREATE_IN_PROGRESS   | AWS::S3::Bucket    | WeiTestBucket2 (buchetNameAndID)
     0/3 | 11:46:24 AM | CREATE_IN_PROGRESS   | AWS::S3::Bucket    | WeiTestBucket2 (buchetNameAndID) Resource creation Initiated
     1/3 | 11:46:45 AM | CREATE_COMPLETE      | AWS::S3::Bucket    | WeiTestBucket2 (buchetNameAndID)
     1/3 | 11:46:46 AM | UPDATE_COMPLETE_CLEA | AWS::CloudFormation::Stack | cdk
     1/3 | 11:46:48 AM | DELETE_SKIPPED       | AWS::S3::Bucket    | WeiTestBucket52DA2F59
     2/3 | 11:46:49 AM | UPDATE_COMPLETE      | AWS::CloudFormation::Stack | cdk

     ✅  cdk
    Stack ARN:
    arn:aws:cloudformation:us-east-1:0123456789:stack/cdk/blah-blah-blah-blah

接著就用aws s3 指令去查詢剛剛建立的bucket是否有存在

    $aws s3 ls
    2019-08-29 11:46:25 cdk-buchetNameAndID-1qaz2wsx3edc4rfv

Ref-更多的cdk指令