CDK(Python)を使ってEC2インスタンスを構築する

最近CDKにハマっています、システムアーキテクト部 サーバレス開発課 石黒です。
CDKで簡単にECインスタンスを作成するデモを紹介したいと思います。

簡単な流れとしては
プロジェクト作成→必要なライブラリインストール→コード書く→デプロイになります。
それではやって行きましょう。

ディレクトリを作成してPythonで開発用に空のプロジェクトを作成します
最近古いCDKのバージョンを使っていると、新しいバージョンがありますとメッセージが出るようになりました。
1.10以前のバージョンだとデプロイ時にエラーになります。

プロジェクトの構造は主にこんな感じになっています(一部省略)
主に触るのはapp.py、setup.py、test_cdk_project_stack.pyの3つだけです

仮想環境を有効化

今回EC2を作成するのに必要なライブラリをsetup.pyに追記

pipをアップデートして、ライブラリをインストール

app.pyにスタックをどこのリージョンにデプロイするかを定義しておきます。

次にtest_cdk_project_stack.pyファイルを編集していきます。
ここでEC2を作成するスタックを構成します。
VPC、SecurityGroupも作成させています。

ここからは作成したスタックをデプロイして流れになります。

まずはCDKのツールキットスタックをデプロイします。
これは初めてそのリージョンにデプロイする時1回だけで大丈夫です。

次にこのコマンドを試してください。
スタックのCFnテンプレートが標準出力されます。

この時、cdk.outというディレクトリが生成され、その中のtest-cdk-project.template.jsonにも出力されています。デプロイ前の構成確認用途です

デプロイ可能なスタックを一覧表示して、指定のスタックをデプロイ開始です。

デプロイが完了したらコンソールで確認してみましょう
CloudFormationのスタックにデプロイしたスタックが表示されています

作成したインスタンスもきちんと作られていますね
お疲れ様でした。

まとめ

CDKを使うと簡単にAWSの環境を構築できてしまいます。
まさにInfrastructure as Codeですね。
cdk docsコマンドでAPIのリファレンスのリンクに飛ぶので
色々な構成でぜひ試してみてください。
ちなみにAPIの接頭にCfnと名のつくものがあります。
これは高レベルAPIか低レベルAPIかの違いです。
高レベルAPIの方がオブジェクト指向なプログラムを書くことができるので
基本高レベルAPIを使用する方が良いかと思います。
ただ高レベルAPIだと提供されていない機能(RDSのセキュリティグループ指定など)があるので、
自分が設定したい属性がない場合には、接頭にCfnがつく低レベルAPIを探すと良いかと思います。

CDKはAWSのリソースをコードで書いて設定するわけなので、AWSのサービスに対する知識が養われます。
最近SAAを取得したのですが、CDKで書いたことが深い理解に役に立った気がしています。
CDK最高…!!!