この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Chaliceとは
公式によればChaliceとは以下のようなものらしいです。
A framework for writing serverless applications
つまりはサーバーレスなアプリケーションのためのフレームワークということです。
フレームワークの設計が秀逸でAPI Gatewayなどのインフラのことをあまり意識せず、Flaskでサーバーを書いているかのように開発が可能です。
具体的にはAWS Lambdaを中心としたアプリケーションの開発を支援するようなフレームワークで、Pythonで書かれた関数をデコレータでラップすると、それをLambda関数としてとしてデプロイしてくれます。
さらに便利なのが、API Gatewayとの連携やS3やSQSなどのイベントからのトリガーなど、AWS Lambdaを使用するいくつかのユースケースでの設定を自動でやってくれます。
デコレータでこれらの設定をかけるので、まるでFlaskでエンドポイントを書くかのようにAPI Gatewayなどの設定が可能です。
CloudformationやCDKとの連携が考慮されており、様々なリソースの管理が一元化できることが期待できます。
使ってみる
今回は公式のQuickstartに沿って進めていきます。
インストール
インストールはpip
で可能です
install chalice
pip3 install chalice
AWSのクレデンシャルを設定
~/.aws/credentials
と~/.aws/config
に適切な認証情報を設定します。もし、すでにプロファイルを設定しているなら、この作業は不要です。
ここでは詳細は省きますが、基本的にはIAMユーザーのアクセスキーを利用して、特定のプロファイルで実行することを想定しています。
なんの権限も持たないIAMユーザをデプロイ用の権限を持ったロールにスイッチ
ロールすることで、作業を行います。
設定の仕方は以下の記事が参考になると思います。
今回は以下のような感じです。
~/.aws/credentials
[chalice]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXX
~/.aws/credentials
[profile chalice]
role_arn = arn:aws:iam::XXXXXXXXXXX:role/XXXXXXXXXXX
region=ap-northeast-1
output=json
source_profile = chalice
プロジェクトを作成する
プロジェクトの作成
$ chalice new-project helloworld
Your project has been generated in ./helloworld
これを実行すると、現在のディレクトリにhelloworld
というディレクトリが作成されます。
ディレクトリの中身
$ cd helloworld/
$ ls
app.py requirements.txt
このapp.py
がアプリケーションの本体になります。
プロジェクトの作成時点でサンプルのアプリケーションが作成されています。
Flaskのようにapp.route
というデコレータでラップするとAPIが作成されます。
app.py
from chalice import Chalice
app = Chalice(app_name='helloworld')
@app.route('/')
def index():
return {'hello': 'world'}
デプロイする
以下のようにコマンドを実行するとデプロイできます。
--profile
でどのプロファイルで実行できるのかを指定できます。
デプロイ
$ chalice deploy --profile chalice
Creating deployment package.
Creating IAM role: helloworld-dev
Creating lambda function: helloworld-dev
Creating Rest API
Resources deployed:
- Lambda ARN: arn:aws:lambda:ap-northeast-1:XXXXXXXXXXX:function:helloworld-dev
- Rest API URL: https://XXXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/
HTTP APIにアクセスする
デプロイされたAPIにアクセスしてみます。
chalice url
を実行するとデプロイされたAPI Gatewayのエンドポイントが返されます。
APIにアクセス
$ chalice url
https://XXXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/
$ curl $(chalice url)
{"hello":"world"}
無事にアクセスできました。
WebブラウザでマネージドコンソールからAPI Gatewayを見てみます。
無事にデプロイされているようです。
リソースを削除する
削除
chalice delete --profile chalice
付録
--profile
を省略する
環境変数AWS_PROFILE
を設定すると、オプションを省略できます。
環境変数を設定
export AWS_PROFILE=chalice