0
0

More than 3 years have passed since last update.

AWS Chalice使ってみた

Posted at

概要

AWS Lambdaを起点にAWSGatewayの設定や、IAMロールを自動デプロイできるフレームワークです。

:thought_balloon: 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 に追記する必要がある

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0