Chalice入門

# Chaliceとは?
ChaliceはAmazon公式のPythonライブラリで、AWS製のサーバーレスフレームワークツールであり、boto3, botocoreの開発者による継続的なメンテナンスがされています。
コマンドでAWS LambdaとAPI Gatewayの設定を済ませてくれます。

# Chaliceの導入

## Chaliceのインストール
pipコマンドを利用してPythonパッケージのChaliceをインストールします。

```shell
$ pip install chalice
```

## プロジェクトの作成

```shell
$ chalice new-project {任意のプロジェクト名}
$ cd {任意のプロジェクト名}
```

## デプロイ
app.pyの中身を確認

```bash
$ cat app.py
```

```python:app.py

from chalice import Chalice

app = Chalice(app_name='{任意のプロジェクト名}')


@app.route('/')
def index():
    return {'hello': 'world'}


# The view function above will return {"hello": "world"}
# whenever you make an HTTP GET request to '/'.
#
# Here are a few more examples:
#
# @app.route('/hello/{name}')
# def hello_name(name):
#    # '/hello/james' -> {"hello": "james"}
#    return {'hello': name}
#
# @app.route('/users', methods=['POST'])
# def create_user():
#     # This is the JSON body the user sent in their POST request.
#     user_as_json = app.current_request.json_body
#     # We'll echo the json body back to the user in a 'user' key.
#     return {'user': user_as_json}
#
# See the README documentation for more examples.

```

デプロイ


```bash
$ chalice deploy

Creating deployment package.
Creating IAM role: wheatclinic-backend-dev
Creating lambda function: wheatclinic-backend-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxxxxxxxxxx:function:wheatclinic-backend-dev
  - Rest API URL: https://xxxxxxxxxxxxxxxxxxxx.ap-northeast-1.amazonaws.com/api/
```

URLが返ってくるのでアクセスすると、以下のような画面が表示される.

![スクリーンショット 2021-07-25 15.01.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817075/2c213049-2f31-9d54-9524-0bf1d60a4fb7.png)


## ローカル起動
以下のコマンドを実行するとローカルでサービス起動できます.

```bash
$ chalice local
```

# Blueprintの導入
Blueprintとは、アプリケーションの機能を分割して実装するためのものです.
それに伴うディレクトリーとpythonファイルを作成します。

```bash
mkdir demo
touch __init__.py
touch demo.py
```

demo.pyに分割する機能を書いていきます。

```python3:demo.py
from chalice import Blueprint

demo_routes = Blueprint(__name__)

@demo_routes.route('/foo')
def foo():
    return {'foo': 'bar'}

```
app.pyに以下の記述を追記します。

```python3:app.py

app.register_blueprint(demo_routes)

```
ファイル構造としては以下の通りです。

```bash
$ tree -a

├── app.py
├── demo
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-38.pyc
│   │   └── demo.cpython-38.pyc
│   └── demo.py
├── requirements.txt

```

ローカル起動させれpostmanでアクセスすると以下のようになります。
![スクリーンショット 2021-07-25 16.24.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/817075/65ea4afd-fd97-3144-3814-4d1a35b5ae46.png)



# 参考にさせていただいた記事
・[【Chaliceに入門してみた】LambdaとAPI Gatewayを手動で構築して消耗していた過去の私へ | DevelopersIO](https://dev.classmethod.jp/articles/chalice-handson/)
・[AWSChaliceを使用してサーバーレスアプリケーションを構築する方法](https://ichi.pro/awschalice-o-shiyoshite-sa-ba-resuapurike-shon-o-kochikusuru-hoho-159438918309967)
・[Documentation — AWS Chalice](https://aws.github.io/chalice/)
・[AWS Chaliceで爆速でREST APIを作ってみる | It works for me](https://www.blog.danishi.net/2020/11/19/post-4237/)
・[[AWS Black Belt Online Seminar] Dive deep into AWS Chalice 資料及び QA 公開 | Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/webinar-bb-aws-chalice-2019/)
・[【Chalice】AWS Lambdaで簡単サーバレス環境構築 | トモテク](https://develop.blue/2020/03/python-chalice/)
・[Chalice — AWS Chalice](https://aws.github.io/chalice/api.html#blueprints)