AWS CDKに触れてみる


はじめに

CDKを使ってLambdaを作成してみるところまでを目標とします。

環境

今回はCloud9を使用します。

$ python --version
Python 3.6.10
$ cdk --version
1.27.0 (build a98c0b3)

CDKが入っていなければ以下のコマンドでインストールします。

$ npm install -g aws-cdk

やってみる

CDKを使う準備

まずCDKを使うために色々準備します

プロジェクトフォルダを作成

$ mkdir hogehoge
$ cd hogehoge

CDKの初期設定

初期設定をします

cdk init --language python
source .env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

AWSユーザーデータの利用設定も行う

$ cdk bootstrap
   Bootstrapping environment aws://999.../ap-northeast-1...
   Environment aws://999.../ap-northeast-1 bootstrapped (no changes).

これで準備完了です

CDKを使ってみる

Lambdaを作成していきます

pythonファイルの準備

Lambdaで使用するpythonファイルを準備します

$ mkdir lambda
$ touch lambda/index.py

内容はあまり気にしないので適当に

index.py
import json

def handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

スタックを作成

最初に作成したhogehogeディレクトリ下にhogehoge/hogehoge_stack.pyがあるので、ここにリソースを作成するためのコーディングをしていく。
公式が丁寧でわかりやすい。

hogehoge_stack.py
import aws_cdk.core as core
import aws_cdk.aws_lambda as aws_lambda

class HogehogeStack(core.Stack):

    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        lambda_func = aws_lambda.Function(
            self, 'lambda_func1',
            function_name = "lambda_func1",
            runtime = aws_lambda.Runtime.PYTHON_3_8,
            code = aws_lambda.Code.asset('lambda'),
            handler = 'index.handler'
        )
$ echo "aws-cdk.aws-lambda" >> requirements.txt
$ pip install -r requirements.txt

AWSリソースの作成

$ cdk diff
$ cdk deploy

作成完了!

$ cdk destroy

消えた!

後処理

pushするならしちゃいましょう

$ git add .
$ git remote add origin [作成済みのリポジトリを使用]
$ git push -u origin master

まとめ

色々設定しなきゃいけないのかな、と思っていましたが結構簡単に作れちゃうのがいいですね。
他の環境作成ができるサービスとの住み分けはどんな感じなんでしょうかねー

補足

複数のstackを作成するにはapp.pyを編集する必要があります

app.py
HogehogeStack(app, "stack_hogehoge")
FugafugaStack(app, "stack_fugafuga") # こんな感じ

複数のstackを作成した場合にはcdk deployだと怒られるので以下のように書く

$ cdk list
stack_hogehoge stack_fugafuga
$ cdk deploy stack_*