[AWS]AWS CDK (雲端開發套件)
@ GordonWei · Monday, Nov 11, 2019 · 2 minute read · Update at Nov 11, 2019

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指令

GordonWei's blog

4g-dongle 4g-lte 518 active-directory activity ad alcatel always-free amd-apu apache arm associate aws aws-cdk aws-certified aws-cli aws-efs aws-lex aws-nuke aws-s3 aws-saa aws-security aws-ssm aws-sso bind bind-view blog brew catalina centos7 cfn-flip change-swap chatbot clean-cache clean-resources cloudfront cups deeplearning delete-sns developer directory-service dlink-dcs930l docker docker-error domain dvac01 ec2 ec2-mount-efs ec2-ssm error export-ovf fat32-to-ntfs freeradius gcloud gcp gcp-change-account git git-error github github-error google-adsens google-cloud-platform grub hh41 homebridge homekit homekit-ui http https huawei-e3372 hugo hugo-blog hugo-post ios ios-run-python iphone-backup ipv6-apt iso-to-usb job-bank json json-dumps keras lambda latin ldap ldap3 letsencrypt likecoin linux linux-vnc lte-dongle mac mac-backup mail-server mi-home migration ms-ad multiple-account mysql mysql-error mysql-federated netapp npm npm-upgrade ntfs oai on-premise openwebmail oracle-cloud orange-pi peering pip-error pip-install printer python python-access-ad python2 python3 radius radius-mysql radius3.0 raspberry-pi raspberry-pi-zero reset-password resize-img resize-sd-partition root router rpi-camera s3 s3-error s3-policy samba samba-error scs-c01 session-manage sns solution-architect-associate ssl ssm sysops system-manager systems-manager table-sync time-machine time_wait tls typeerror ubuntu ubuntu-18.04 ubuntu16.04 uniout update-error usb usb-install vmware-player volume-lock vpc web-server win10 windows xiaomi yaml zimbra 廣告 永久免費 無法更新索引 燒光碟 自動搶 阿爾卡特
aws
gcp
iot
mac
oci

© 2020 GordonWei's Blog

Powered by Hugo with theme Dream.

Experience

2019 - Now / 104人力銀行 - DevOps 工程師

2018 - 2019 / 104人力銀行 - Net 工程師

2016 - 2018 / 全林實業股份有限公司 - 系統部協理

2015 – 2016 / 恩據優資訊工作室 – 負責人

2014 – 2015 / 安盟科技股份有限公司 – 資深IT工程師

2013 – 2014 / 上海鷺豐農業科技有限公司 – 系統工程師

2010 – 2012 / 104 人力銀行 – 維護工程師

2008 - 2009 / 典匠資訊 – MIS

Projects

  • 2019/09 - now 104人力銀行 - AWS Account 回收暨IaC專案
  • 2018/10 - 2018/12 104人力銀行 - DR Site 協助建置
  • 2018/03 - 2018/05 全林實業 - 工研院人臉辨識與使用者行為分析專案
  • 2018/04 - 2018/05 全林實業 - 嘉義公車站無線網路專案
  • 2017/06 - 2018/05 全林實業 - 新加坡無線網路專案
  • 2017/05 - 2018/05 全林實業 - 捷運無線網路專案
  • 2017/01 - 2017/04 全林實業 - 弋楊科技遊覽車專案
  • 2016/12 - 2017/04 全林實業 - 亞太好行網重構、建置
  • 2016/12 - 2017/02 全林實業 - 愛巴士無線網路專案
  • 2016/11 - 2017/01 全林實業 - 泰國Free AD Wifi專案
  • 2016/10 - 2016/12 全林實業 - 桃園客運無線網路專案
  • 2016/09 - 2016/12 全林實業 - 怡客咖啡廳無線網路專案
  • 2016/07 - 2017/07 全林實業 - 主要系統規劃、重構與建置
  • 2014/09 - 2015/04 安盟科技 - 機房架構規劃rebuild / CRM系統開發客製
  • 2013/07 – 2014/07 上海鷺豐農業科技 - 研發農業環境監控系統(Arduino)
  • 2011/11 – 2012/06 104人力銀行 - 協助導入虛擬化技術專案 (Citrix Xen Server、Desktop)

About

GordonWei

小弟是一位沒錢又沒閒的普通人, 只能靠自學以及不斷的實作來吸取經驗。

希望可以把自己的經驗留存下來,讓彼此的能力更進一步!!

認證