AWS Chalice を使って爆速でモックAPIを作ってみました。
AWS Chalice は Python 製のフレームワークで API Gateway と Lambda をサクッと構築できます。(詳細は公式を参照ください。)
構成
構築する環境はAPI Gateway + Lambdaとなります。
今回は以下前提にて構築します。
- pythonインストール済み
- Lambdaに付与するロールは事前作成済み(ロールの自動生成は使わない)
- AWS CLIの設定済み
構築
何はともあれ作っていきます。
-
chalice インストール
pip install chalice
-
プロジェクト作成
chalice new-project chalice-example cd chalice-example
-
app.py
を修正- 初期状態からコメントアウトを削除
app.pyfrom chalice import Chalice # app_nameに指定した値がAPI Gateway名になる app = Chalice(app_name='chalice-example-apigateway') # GETメソッドで'/'にアクセスした際{'hello': 'world'}を返す @app.route('/') def index(): return {'hello': 'world'} # GETメソッドで'/hello/{name}'にアクセスした際{'hello': 'パスパラメータ(name)'}を返す @app.route('/hello/{name}') def hello_name(name): return {'hello': name} # POSTメソッドで'/users'にアクセスした際{'user': body}を返す @app.route('/users', methods=['POST']) def create_user(): user_as_json = app.current_request.json_body return {'user': user_as_json}
-
.chalice/config.json
を修正- ロールを自動生成させないように
manage_iam_role
を指定 - Lambdaに付与するロールを
iam_role_arn
に指定 - Lambda名
app_name
を変更
config.json{ "version": "2.0", "app_name": "chalice-example-lambda", "stages": { "dev": { "api_gateway_stage": "api", "manage_iam_role": false, "iam_role_arn": "arn:aws:iam::XXXXXXXXXXXX:role/XXXXXXXXXXXX" } } }
- ロールを自動生成させないように
-
デプロイ
chalice deploy --profile [AWS CLI プロファイル名]
-
リソース確認
マネコンからAPI GatewayとLambdaが作成されているか見てみます。
APIGatewayを見てみるとchalice-example-apigateway
という名前で作成されていて、Lambdaが紐づいているようです。
次は、紐づいているLambdaを見てみます。
chalice-example-lambda-dev
という名前で作成されてます。
※-dev
がついているのはconfg.json
で指定したステージ名で、デプロイ時に指定することができます。
デフォルトdevになります。
無事、API GatewayとLambdaが作成されてました! -
アクセス確認
今回はお手軽にCurlコマンドで確認します。URLはデプロイ後に出力されます。[user@server chalice-example]$ chalice deploy --profile [AWSプロファイル名] Creating deployment package. Creating lambda function: chalice-example-test-dev : # このURLに対してアクセス - Rest API URL: https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/
結果はこんな感じですべて期待通りになりました!
# GETメソッドで'/'にアクセスした際{'hello': 'world'}を返す [user@server chalice-example]$ curl https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/ [user@server chalice-example]$ {"hello":"world"} # GETメソッドで'/hello/{name}'にアクセスした際{'hello': 'パスパラメータ(name)'}を返す [user@server chalice-example]$ curl https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/hello/AAA [user@server chalice-example]$ {"hello":"AAA"} # POSTメソッドで'/users'にアクセスした際{'user': body}を返す [user@server chalice-example]$ curl -X POST -H "Content-Type: application/json" -d '{"Name":"AAA", "Age":"100"}' https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/api/users {"user":{"Name":"AAA","Age":"100"}}
-
削除
不要なリソースは削除しましょう。chalice delete --profile [AWS CLI プロファイル名]
最後に
chaliceを使うことでわずか数コマンドで簡単にモックAPIが作れました。
Lambdaのコードも感覚的にわかりやすいので簡単なAPIであれば数分でいくつも開発できると思います。
この記事がどなたかの力になれれば幸いです。
補足
ローカル実行はこのコマンドをたたくだけです。
[user@server chalice-example]$ chalice local
Serving on http://127.0.0.1:8000
'/'へ接続してみると期待通りのレスポンスがありました。
[user@server chalice-example]$ curl http://127.0.0.1:8000
[user@server chalice-example]$ {"hello":"world"}