Chapter 03

Chalice (CDK) のセットアップ

inunekousapion
inunekousapion
2022.10.18に更新

基本的にはChaliceの公式ドキュメント通りの手順となります。
https://aws.github.io/chalice/tutorials/cdk.html

注意事項としてCDKのバージョンは2を利用します。

前提条件

  • AWS CLI環境がセットアップ済みであること。
  • pyenv環境がセットアップ済みであること。
  • nvm環境がセットアップ済みであること。

AWSCLIについては下記を参考にしてください。

pyenv環境については下記を参考にしてください。
https://github.com/pyenv/pyenv

nvm環境については下記を参考にしてください。
https://github.com/nvm-sh/nvm

環境構築

Python3.9の導入

すでに3.10がリリースされていますが、Lambdaが動作するのが3.9までのため3.9を導入します。

2022年07月現在の最新バージョンは3.9.13なので、3.9.13をインストールします。
適宜バージョンを更新してください。

pyenv install 3.9.13

node 18導入

cdkコマンドが実行できるようにnodeをインストールします。

nvm install 18

Chalice CDK(v2)のセットアップ

好きなディレクトリを作成してその下で作業を行いましょう。

mkdir myproject
cd myproject

aws-cdkをnodeに追加します。

npm install -g aws-cdk

次にChaliceのセットアップを行うのですが、Pythonの仮想環境の問題があるので注意です。
一旦仮想環境を作成します。

pyenv global 3.9.13
python -m venv venv
. venv/bin/activate

Chalice(CDKv2版)をインストールします。

pip install "chalice[cdkv2]"

プロジェクトの作成

ここからはChaliceのコマンドを利用して新規プロジェクトを作成していきます。

chalice new-project

選択肢が出るので下記を選んでください。

  • Enter the project name: 自由に名前をつけてください
  • Select your project type: [CDK] REST API with DynamoDB backend

DynamoDBと表記がありますが、CDKからDynamoDBを削除することもできますので安心してください。

仮想環境とディレクトリ構成が合わないため、出来たファイル群を親ディレクトリに移動します。
例えば、Chaliceのプロジェクト名がchalice-projectだった場合です。

mv chalice-project/* .

venvを除くディレクトリ構成は下記になっているはずです。

.
├── README.rst
├── infrastructure
│   ├── app.py
│   ├── cdk.json
│   ├── requirements.txt
│   └── stacks
│       ├── __init__.py
│       └── chaliceapp.py
├── pyproject
├── requirements.txt
└── runtime
    ├── app.py
    └── requirements.txt

ライブラリの追加

ルートディレクトリに下記のライブラリを追加します。

  • python-dotenv
  • chalice[cdkv2]

python-dotenvは.envから環境変数を設定するためのものです。
chalice[cdkv2]は既にインストール済みですが、他の人がgit cloneなどして環境を構築する際に設定されていないため追加しましょう。

requrements.txtの中身は下記のようになります。

requrements.txt
chalice[cdkv2]>1.27,<2.0
python-dotenv>=0.20.0,<1.0.0
-r infrastructure/requirements.txt
-r runtime/requirements.txt

この状態で下記コマンドを一度実行してください。

pip install -r requrements.txt

環境変数の設定

infrastructureのディレクトリの下に.envファイルを追加します。

touch infrastructure/.env

.envには下記を追加します

.env
AWS_ACCOUNT_ID=
AWS_REGION=

AWS_ACCOUNT_IDは12桁の番号です。

上記を設定したらinfrastructure/app.pyに下記を追加します。

from dotenv import load_dotenv
load_dotenv(verbose=True)

また環境変数で読み取った値でChaliceが動作するようにします。

aws_env = cdk.Environment(account=os.environ['AWS_ACCOUNT_ID'], region=os.environ['AWS_REGION'])

最終的にinfrastructure/app.pyは下記のようになります。

app.py
#!/usr/bin/env python3
import aws_cdk as cdk
from stacks.chaliceapp import ChaliceApp
from dotenv import load_dotenv


load_dotenv(verbose=True)
aws_env = cdk.Environment(account=os.environ['AWS_ACCOUNT_ID'], region=os.environ['REGION'])
app = cdk.App()
ChaliceApp(app, 'pyproject', env=aws_env)

app.synth()

お試し

infrastructureディレクトリに移動してcdkコマンドを実行してみます。

cd infrastructure

まずはCloudFormationのスタックの生成とS3バケットの作成です。
下記コマンドで自動作成されます。

cdk bootstrap

作成に失敗した場合、AWS CLIのセットアップが誤っている可能性が高いです。

下記のコマンドでcdkで作成されるリソースなどを確認することができます。

cdk diff

最後にデプロイを行ってみましょう。

cdk deploy

実行するとDynamoDB、APIGateway、Lambda*2が作成されます。
マネジメントコンソール上で確認してみてください。

後片付け

作成したリソースなどを削除するには下記コマンドを実行します。

cdk destroy

Githubでの管理

  • .gitignoreのサンプルです。
.cache
venv
docs/build/
.idea
__pycache__/
.coverage
chalice.egg-info/
.hypothesis/
.pytest_cache/
.mypy_cache/
*.pyc
.vscode