基本的にはChaliceの公式ドキュメント通りの手順となります。
注意事項としてCDKのバージョンは2を利用します。
前提条件
- AWS CLI環境がセットアップ済みであること。
- pyenv環境がセットアップ済みであること。
- nvm環境がセットアップ済みであること。
AWSCLIについては下記を参考にしてください。
- インストール
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html - セットアップ
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-quickstart.html
pyenv環境については下記を参考にしてください。
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の中身は下記のようになります。
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には下記を追加します
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は下記のようになります。
#!/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