BioErrorLog Tech Blog

試行錯誤の記録

AWS CDK 基本コマンドまとめ

よく使うCDKの基本コマンドをまとめます。


はじめに

おはよう。@bioerrorlogです。

AWS CDKは、TypeScriptやPythonなどの言語でAWSインフラリソースを定義・デプロイできるフレームワークです。

CDKコードからCloudFormationテンプレートが生成され、AWSにリソースがデプロイされる、という仕組みになっています。

CDKは、YAMLで直接記述するCloudFormationテンプレートより書きやすく、またCloudFormationテンプレートより抽象度が高い(記述量が少なくて済む)ため、個人的にはよく好んで使っています。


CDKには、プロジェクトを作成する、リソースをデプロイ/削除するなど、いくつかのコマンドがあります。

毎回コマンドを忘れて調べなおしている自分がいるので、今回は基本的なCDKコマンドを備忘録としてまとめることにしました。


環境

今回の作業環境は以下の通りです。

CDKバージョン:

$ cdk --version
1.31.0 (build 8f3ac79)


Amazon LiunxのCloud9で確認作業を行いました。

$ cat /etc/system-release
Amazon Linux AMI release 2018.03


CDKコマンドまとめ

一般的な作業の流れに沿って、必要となるコマンドをまとめていきます。


CDKバージョン確認

CDKのバージョンを確認します

cdk --version


CDKインストール

CDKがインストールされていない場合、以下のnpmコマンドでインストールします。

npm install -g aws-cdk


CDKプロジェクト作成

CDKのプロジェクトを作成します。

主な例(pythonの場合)は次のようになります。

  • シンプルなテンプレートからCDKプロジェクトを作りたい場合:
cdk init app --language=python


  • サンプルコードを含んだCDKプロジェクトを作りたい場合:
cdk init sample-app --language=python


  • 仮想環境やgitファイルの作成なしに、まっさらなCDKプロジェクトを作りたい場合:
cdk init --generate-only --language=python


もう少し詳しく説明すると、次のようになります。

cdk init [template] --language=[python|typescript|csharp|fsharp|java|javascript]

[template]部分には app, sample-app, lib のどれかをオプションで入力し、
[language]部分には python typescript などの言語をひとつ入力します。


templateの app, lib, sample-app それぞれの特徴は、cdk init --listで確認できます。

$ cdk init --list
Available templates:
* app: Template for a CDK Application
   └─ cdk init app --language=[csharp|fsharp|java|javascript|python|typescript]
* lib: Template for a CDK Construct Library
   └─ cdk init lib --language=typescript
* sample-app: Example CDK Application with some constructs
   └─ cdk init sample-app --language=[csharp|fsharp|java|javascript|python|typescript]

app:素の状態のCDKテンプレート

sample-app:Stackのサンプルやtestフォルダがあらかじめ作成されたCDKテンプレート

lib:CDK Construct Library用のテンプレート

となっています。


そして、仮想環境やgitの作成なしにまっさらな状態からCDKプロジェクトを作りたい場合は、テンプレートを指定せずに --generate-only を指定します。


CDKコマンド実行前の下準備

CDKコマンドとは直接関係ありませんが、CDKプロジェクト内で作業を始める前に済ませておく必要のあるコマンドをメモします。

※Pythonの場合を例として書きます。

  • 仮想環境起動

cdk init時に作成されたPython仮想環境.envを起動します。

source .env/bin/activate


  • 必要パッケージのインストール

requirement.txtに書かれたPythonパッケージをインストールします。

pip install -r requirements.txt 


CDK Stack一覧表示

CDKコードに含まれたCDK Stackの一覧を表示します。

cdk ls


CloudFormationテンプレートの生成

CDKコードに含まれたCDK Stackから、CloudFormationテンプレートを生成・表示します。

cdk synth


特定Stackを指定して、CloudFormationテンプレートを生成・表示することもできます。

cdk synth [Stack名]

※Stack名はcdk lsで確認できます。


CDKデプロイ前準備:bootstrap

CDKで定義したAWSリソースをデプロイする前に、次のコマンドでCDKデプロイ環境を構築します。

cdk bootstrap

cdk bootstrapすると、CDKToolkitというCloudFormation Stackが作成され、S3バケットcdktoolkit-stagingbucket-[random]が作成されます。

CDKToolkitStackは、デプロイ先のリージョンに作成されている必要があります。


CDKデプロイ

CDKコードで定義したAWSリソースをデプロイします。

cdk deploy [Stack名]


CDKコード内にStackが一つしかない場合は、Stack名を指定しなくともデプロイできます。

cdk deploy


CDK Stackの差分を表示

コードを変更した際に、CDK Stackリソースの差分を表示します。

cdk diff [Stack名]


Stack名を指定しないと、全Stackの差分が表示されます。

cdk diff


CDKリソース削除

CDKデプロイされたリソースを削除します。

cdk destroy [Stack名]


CDKコード内に Stackが一つしかない場合は、Stack名を指定せずにリソースを削除できます。

cdk destroy


おわりに

今回は、CDKの基本コマンドをまとめました。

CDKはCloudFormationテンプレートより可読性が高く、テストコードも書けるなど一般言語ならではのメリットも享受できます。

これからもどんどん利用していきたいです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

参考

AWS CDK Intro Workshop :: AWS Cloud Development Kit (AWS CDK) Workshop

What is the AWS CDK? - AWS Cloud Development Kit (AWS CDK)