AWS CDK v2 をPythonで使いこなそう!!(2022/01/24)
はじめに
公式のAPI Doc以外はかなりPython版のAWS CDKの情報が少ないため、私のアウトプットがメインではありますが、誰かの参考になれば幸いです。
もし間違いやより良い方法などがあれば教えていただけるとありがたいです。
ちなみに、Pythonが一番使い慣れている(ここ最近はPython Onlyと言っても過言ではない)ので、AWS CDK Pythonを使うことにしました。
しかしながら、元はTypeScriptsコードをjsiiで変換しているためか、Pythonで書いていると結構苦戦を強いられてます。
AWS CDK について
ここはさらっと紹介します。
AWS CDKは「コードでインフラを定義するもの」の一つです。他にも、TerraformやAWS CloudFormationなんかがあります。
AWS CDKの他との違いはTypescriptやpythonなどのアプリケーションコードを利用していることです。
以下に簡単なイメージを載せておきます。
(私が使った)環境など
- IDE: AWS Cloud 9
- インスタンスタイプのメモリは多めに4GBにした
- Cloud 9 では, aws cdk や cliはデフォルトで入っている
- aws cdk v2 が使えるlinux系環境ならどこでもいいはず
- Python3.8
- デフォルトでは、Python3.7
- Cloud 9 でPython3.8にする方法は【AWS】素の Cloud9 に Python 3.9 をインストールするなどを参考にしました。
私がハマったことなど
pip install aws-cdk.*してはいけない
AWS CDK v2 (Python)を使うときは、個別にaws-cdkの中身を絶対にインストールしてはいけない。
私はこれに気づかず、v1などの記事を見てワークショップをおこなっていたので、かなりの時間を消費した。(ただただ、私がマヌケだっただけです)
- 原因
- pip install aws-cdk.* でインストールされるモジュールはv1の内容になるため、Constructsのモジュールなどの不整合でerrorがでているらしい
mkdir [project_name]
cd [project_name]
cdk init sample-app --language=python
source .venv/bin/activate
pip install -r requirements.txt
dynamoDBやS3作成時にやっておいた方がいいこと(私の場合)
- DESTROYに設定していない場合、cdk destroyコマンドを実行しても消えずに残っている。
- デフォルトはRETAINのことが多い
- すなわち、次回にcdk deployでerrorになる可能性がある(特に、nameを設定している場合)
- nameを設定していないと IDに入力された文字列を元にユニークな名前が設定されるので、少し見づらくなる。
- 以下に、例としてs3作成時のコードを載せる
from aws-cdk import aws-s3 as _s3
s3 = _s3.Bucket(self, "[ID_NAME]",
bucket_name="[BUCKET_NAME]",
auto_delete_objects=True,
removal_policy=cdk.RemovalPolicy.DESTROY)
各Attribute[defalt値]の説明
bucket_name : 作成されるバケットの名前
- String値
auto_delete_objects[flase] : スタック削除時、自動的にバケット内のオブジェクトを削除
- true
- false
removal_policy[orphaned(おそらくRETAINを指す)]: スタック削除時、自動的にバケットを削除
- cdk.RemovalPolicy.RETAIN
- cdk.RemovalPolicy.DESTROY
- cdk.RemovalPolicy.SNAPSHOT
所感
当たり前だが、やはり公式サイトやDocumentsを読むべきだなと思った。
英語が読むのが面倒だからと、英語の公式サイトやDocumentsより、日本語の記事しか読まずに作業を進めた自分が愚かだった。
ここからはAWS CDK Python ReferenceやGithubを利用すれば何とかなりそうな気がする。
また、余裕があれば、この記事に追加したり、この記事のver2を書いたりしようかなと思います
Discussion