AWS API Gateway + Lambda -chaliceでお手軽実装-
AWS上で簡単なサーバレスアーキテクチャを作ってみます。
API GatewayとLambdaを使おうと思いますが、事前に調べているとchaliceというAWS謹製のPythonのサーバレスフレームワークがあることを知りました。
ざっと読む限り簡単にデプロイできそうなので物は試し。
chaliceインストール、動作確認
これでhelloworldというプロジェクトディレクトリが作成されます。
pip install chalice chalice new-project helloworld cd helloworld
profileを指定
デフォルトのaws profile以外を使いたい場合は以下のようにオプションをつけます。
chalice new-project helloworld --profile YOUR_PROFILE
これにより.chalice/config.jsonにprofileの項目が追加されます。
プロジェクトのprofileを後から変更したい場合はこのファイルをいじりましょう。
簡単なAPIのデプロイ
話を戻して、ディレクトリ内にはapp.py
とrequirements.txt
が配置されています。
app.py
の中身はシンプル。{"hello": "world"}
を返すだけです。
aws-cli
などで~/.aws/credentials
が作成されていればその情報を使ってでプロデイできます。
chalice deploy
すると多少の処理時間ののち、エンドポイントが表示されます(https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/)。
早速叩いてみます。jsonが帰ってきました。
これがサーバレスアーキテクチャ。。。
なんてお手軽。
コンソールからも確認して見ます。
AWSコンソールでAPI Gatewayを検索。新しいのが作成されていました。
Lambdaも確認。
削除
作ったAPIを削除するときは、以下のコマンドで綺麗さっぱり消してくれます。
chalice delete
環境変数を設定する
Lambdaの環境変数はAWSマネジメントコンソールからも編集可能です。
また.chalice/config.jsonからも編集することが可能です。
詳しくはこちらに記載されています。
いくつかの変数名は使用できないので気をつけましょう。
ローカルで確認する
AWSにデプロイせずにローカルで確認することもできます。
デプロイ大して時間かかりませんが、それでもこちらの方が早いので頻繁に確認したいときや、オフラインの時は使えます。
chalice local
ただしconfig.jsonに設定した環境変数を読んでくれないみたいです。
良い方法が見つかったら追記します。
chaliceの強み
上記のようにchaliceを使うととても手軽にサーバレスアーキテクチャを構築できます。
また、LambdaにはIAMロールが紐付けられており、その関数のアクセス権限(どのリソースにアクセスできるか)を制限するのですが、chaliceでデプロイした場合自動で新しいIAMロールを作成してくれます。
さらに、コードを編集して、例えばS3を操作するような処理を追加したとします。
すると再デプロイの際に自動的にIAMロールにS3へのアクセス権を追加してくれます。これは便利。
ただしDynamoDBをはじめとしてこれらのサポートが対象外の部分もあります。
その場合はchaliceによって作成されたIAMロールに手動で権限を追加する必要があるので注意です。
参考
- aws/chalice: Python Serverless Microframework for AWS
- chaliceを使って簡単にPythonでサーバーレスしよう – Qiita
- Python サーバーレスフレームワークの比較 – Zappa vs Chalice – Qiita
- API GatewayとLambdaでAPI作成のチュートリアル – Qiita
- Python Serverless Microframework for AWS (Chalice) を使うと、サーバーレスアーキテクチャの IAM ポリシーの管理が劇的に簡単になる! | Developers.IO
- Python でサーバーレスなら Chalice もいいぞ – Feedforce Developer Blog