技術2課の多田です.
以前,「AWS Cloud Development Kit」(以下、CDK)の記事を書きました.当時は対応言語に Python がサポートされてませんでしたが, Amazon Web Services ブログで Python 対応アナウンスがありましたので,早速, Python で CDK を使ってみます。
Amazon Web Services ブログ記事
AWS クラウド開発キット (CDK) – TypeScript と Python 用がご利用可能に
関連記事
チュートリアルプロジェクトの実行
初期設定
下記のチュートリアルに沿って CDK を実行します. プロジェクトを初期化し、pip install -r requirements.txt
でライブラリをインストールします.
$ mkdir hello-cdk && cd hello-cdk $ cdk init --language python sample-app Applying project template sample-app for python Initializing a new git repository... Executing Creating virtualenv... # Welcome to your CDK Python project! You should explore the contents of this template. It demonstrates a CDK app with two instances of a stack (`HelloStack`) which also uses a user-defined construct (`HelloConstruct`). The `cdk.json` file tells the CDK Toolkit how to execute your app. This project is set up like a standard Python project. The initialization process also creates a virtualenv within this project, stored under the .env directory. To create the virtualenv it assumes that there is a `python3` executable in your path with access to the `venv` package. If for any reason the automatic creation of the virtualenv fails, you can create the virtualenv manually once the init process completes. To manually create a virtualenv on MacOS and Linux: $ python3 -m venv .env After the init process completes and the virtualenv is created, you can use the following step to activate your virtualenv. $ source .env/bin/activate If you are a Windows platform, you would activate the virtualenv like this: % .env\Scripts\activate.bat Once the virtualenv is activated, you can install the required dependencies. $ pip install -r requirements.txt At this point you can now synthesize the CloudFormation template for this code. $ cdk synth You can now begin exploring the source code, contained in the hello directory. There is also a very trivial test included that can be run like this: $ pytest To add additional dependencies, for example other CDK libraries, just add to your requirements.txt file and rerun the `pip install -r requirements.txt` command. # Useful commands * `cdk ls` list all stacks in the app * `cdk synth` emits the synthesized CloudFormation template * `cdk deploy` deploy this stack to your default AWS account/region * `cdk diff` compare deployed stack with current state * `cdk docs` open CDK documentation Enjoy! $ python3 -m venv .env $ source .env/bin/activate (.env) $ pip install -r requirements.txt Obtaining file:///Users/tada/work/cdk_python_sample (from -r requirements.txt (line 1)) Collecting pytest (from -r requirements.txt (line 2)) 〜中略〜 uccessfully installed atomicwrites-1.3.0 attrs-19.1.0 aws-cdk.assets-0.31.0 aws-cdk.aws-autoscaling-api-0.31.0 aws-cdk.aws-cloudwatch-0.31.0 aws-cdk.aws-ec2-0.31.0 aws-cdk.aws-events-0.31.0 aws-cdk.aws-iam-0.31.0 aws-cdk.aws-kms-0.31.0 aws-cdk.aws-lambda-0.31.0 aws-cdk.aws-logs-0.31.0 aws-cdk.aws-s3-0.31.0 aws-cdk.aws-s3-notifications-0.31.0 aws-cdk.aws-sns-0.31.0 aws-cdk.aws-sqs-0.31.0 aws-cdk.aws-stepfunctions-0.31.0 aws-cdk.cdk-0.31.0 aws-cdk.cx-api-0.31.0 aws-cdk.region-info-0.31.0 cattrs-0.9.0 hello jsii-0.10.5 more-itertools-7.0.0 mypy-extensions-0.4.1 pluggy-0.11.0 publication-0.0.3 py-1.8.0 pytest-4.4.2 python-dateutil-2.8.0 six-1.12.0 typing-extensions-3.7.2 You are using pip version 19.0.3, however version 19.1.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
因みにプロジェクトを作ると以下のようなディレクトリ構造が作成されます.Python のコードで構成されているのがわかります.
$ tree ├── README.md ├── app.py ├── cdk.json ├── hello_cdk │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ └── hello_cdk_stack.cpython-37.pyc │ ├── hello_cdk.egg-info │ │ ├── PKG-INFO │ │ ├── SOURCES.txt │ │ ├── dependency_links.txt │ │ ├── requires.txt │ │ └── top_level.txt │ └── hello_cdk_stack.py ├── requirements.txt └── setup.py
デプロイ
次にデプロイをしていきます。まずcdk synth
で CloudFormation テンプレートを合成し,次にcdk deploy
でデプロイをします.
$ cdk synth Resources: CDKMetadata: Type: AWS::CDK::Metadata Properties: Modules: aws-cdk=0.30.0,@aws-cdk/cdk=0.31.0,@aws-cdk/cx-api=0.31.0,jsii-runtime=Python/3.7.3 $ cdk deploy HelloCdkStack: deploying... HelloCdkStack: creating CloudFormation changeset... 0/2 | 09:18:25 | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata 0/2 | 09:18:28 | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata Resource creation Initiated 1/2 | 09:18:29 | CREATE_COMPLETE | AWS::CDK::Metadata | CDKMetadata 2/2 | 09:18:31 | CREATE_COMPLETE | AWS::CloudFormation::Stack | HelloCdkStack ✅ HelloCdkStack Stack ARN: arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxx:stack/HelloCdkStack/6ef54dd0-744b-11e9-aada-0e842c318628
CloudFormationのスタックが完成していました.バージョニングと暗号化したS3バケットを作るのみですがサクッと作れました.
後片付け
作成したリソースの削除はcdk destroy
で完結します.
cdk destroy Are you sure you want to delete: HelloCdkStack (y/n)? y HelloCdkStack: destroying... 0 | 01:27:57 | DELETE_IN_PROGRESS | AWS::CloudFormation::Stack | HelloCdkStack User Initiated 0 | 01:27:59 | DELETE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata 0 | 01:27:59 | DELETE_SKIPPED | AWS::S3::Bucket | HelloCdkBucket (HelloCdkBucketA63BB9B1) ✅ HelloCdkStack: destroyed
Pulumi との利用比較
「CDK」と似たようなツールとして「Pulumi」があります.「Pulumi」も JavaScript,Golang,TypeScriptの他に Python に対応したプログラミング言語でのプロビジョニングツールです.最後に2つのツールを使い分けていくにあたって利用比較を自分なりに調べてみたものをまとめます。
関連記事
Infrastructure as Codeのホープ、Pulumiを試す
Pulumi と CDK の比較
- 「Pulumi」のプロビジョニングはマルチクラウド対応しているが, 「CDK」のプロビジョニングは AWS対応のみ
- 「Pulumi」は利用形態に応じて利用料がかかるが, 「CDK」は利用料不要で利用可能
- 「Pulumi」には独自 GUI 管理の画面があるが, 「CDK」は管理画面はなくターミナルでの操作中心
自分はAWS を普段使うため引き続き「CDK」でのプロビジョニングの勉強をしていきます.
まとめ
「CDK」の Python 対応したコードを試してみました.Python のコードの情報が出てきているのでこれは Python で AWS を利用している人にとっては朗報かと思います.僕もしっかり使いこなして Python でアプリケーションの開発,デプロイまで完結できるようにドキュメントを読み込んだり,実践していきたいです!
CDK の関連情報
公式ドキュメント(Get Started)
Getting Started With the AWS CDK
リファレンスドキュメント
AWS CDK Reference Documentation
Python のサンプルコード