概要
AWS Lambdaを起点にAWSGatewayの設定や、IAMロールを自動デプロイできるフレームワークです。
Lambdaを使ったWebアプリケーションを爆速で作れるフレームワークを求めて利用してみました。
使ってみた
1.インストール
$ pip install chalice
2.AWS の認証情報を設定
~/.aws/config
~/.aws/credentials
の設定を行う必要があります。(他記事参照お願いします)
3.プロジェクトの新規作成
$ chalice new-project handson
$ cd handson
4.作成されたプロジェクトの確認
$ ls -1a
./
../
.chalice/
.gitignore
app.py
requirements.txt
app.py がメインのプログラムになります。
※以下新規作成時のコード
from chalice import Chalice
app = Chalice(app_name='handson')
@app.route('/')
def index():
return {'hello': 'world'}
メソッドにデコーダをつけて、引数に設定したpathがAPI Gatewayの設定になる。
@app.route('/XXX')
5.ローカル起動
$ chalice local
Serving on http://127.0.0.1:8000
Restarting local dev server.
Serving on http://127.0.0.1:8000
別のターミナルで、リクエストを送信するとapp.py のreturnで設定されている文字列がレスポンスされます。
$ curl http://127.0.0.1:8000/
{"hello":"world"}
6.AWSへデプロイ
$ chalice deploy
Creating deployment package.
Creating IAM role: handson-dev
Creating lambda function: handson-dev
Creating Rest API
Resources deployed:
- Lambda ARN: arn:aws:lambda:ap-northeast-1:012345678900:function:handson-dev
- Rest API URL: https://xxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/api/
デプロイすると、①IAMロール②lambda③API Gatewayが作成されてアタッチされた状態になります。
※初期設定のままだと、ステージ環境がdevになり、API Gatawayの末尾にapiは自動的に付与されるようです。
stage設定を変更したい場合は、.chalice/config.json に追記する必要がある
{
"version": "2.0",
"app_name": "chalicehandson",
"stages": {
"dev": {
"api_gateway_stage": "api"
},
"prod": {
"api_gateway_stage": "api-prod"
}
}
}
stageを指定してデプロイ
$ chalice deploy --stage prod
Creating deployment package.
Reusing existing deployment package.
Creating IAM role: handson-prod
Creating lambda function: handson-prod
Creating Rest API
Resources deployed:
- Lambda ARN: arn:aws:lambda:ap-northeast-1:01234567890000:function:handson-prod
- Rest API URL: https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/api-prod/
7.デプロイしたものを削除
$ chalice delete
$ chalice delete --stage prod
デプロイで作成されたものを削除します(今回だとこの3つIAMロール、lambda、API Gateway)
Stageがdev,prodの2つをデプロイしているので、2つを削除するコマンドを実行しています。
所感
aws+python の場合、すごい便利ですね。また対応するサービスがどんどん増えるので、楽しみですね。
あとは、chaliceのメソッドがいろいろあって丸め込まれているので、serverless frameworkより学習コストが低そうです。
気になった点
- local起動したとき、保存するとリスタートが自動でかかる
- serverless framework とは違ってcloudformationのスタックを作られない。
- Stage設定をしても、API Gatewayは別URLで作成する
- API Gatewayのパスが切られるが、接続するlambdaは1個
参考
https://qiita.com/takeh/items/e52ad1c541a435e2b2e3
https://programmagick.com/blogs/aws_chalice_intro/
https://www.youtube.com/watch?v=u4LKbQZawaQ
https://aws.github.io/chalice/index.html