【Chaliceに入門してみた】LambdaとAPI Gatewayを手動で構築して消耗していた過去の私へ

こんにちは。AWS Loftが大好きな佐伯、改めKyoです。(まさか社内に佐伯さんが3名もいるとは…)

AWS Loftでのハンズオンに参加してきたのでレポします。

AWS Amplify & Chalice ハンズオン 〜怠惰なプログラマ向けお手軽アプリ開発手法〜

Chaliceとは?

ChaliceはAWS Lambdaを使ったサーバレスアプリケーションを、Pythonで構築するためのマイクロフレームワークで、以下が可能です。

  • コマンドラインによるアプリの構築、デプロイおよび管理
  • API Gatewayをはじめ、S3, SNS, SQSといったAWSサービスとのインテグレーション
  • IAM ポリシーの自動生成

Python Serverless Microframework for AWS

ちなみにChaliceとは聖杯のことです。ChaliceはPythonのマイクロウェブフレームワークであるFlaskライクな構成になっており、聖杯とフラスコ、器つながりなのかーと想像(妄想?)が膨らみますね。

使うと何が嬉しいの?

LambdaとAPI Gatewayの組み合わせはサクっとAPIを実装できてとても便利なのですが、どうせなら関連するコンポーネントをまとめて構築や管理をしたくなるのが人情というもの。

Sereverless Frameworkという方法もあるのですが、 こちらはAWS以外にもAzureやGCPへ対応しており、機能も豊富ということでちょっとだけ学習が大変。

「シンプルにLambdaとAPI GatwayでAPIを構築&管理したいだけなんだけどなー。。」

そんな時がChaliceの出番です。

なお、ハンズオンのページには以下のような記載がありました。

また、少ない操作で、一分以内にサーバーレスな RESTful API をデプロイできる Python 製のアプリケーションフレームワーク、「Chalice」もあります。

ほんとに一分以内にデプロイできるのかやってみた

結論から述べると、一分以内のデプロイは可能だと思います。

ただし、環境構築がうまくいっていることが前提です。

というのも、私の場合、準備のAWS CLIの設定がうまくいきませんでした。もう少し詳しく言うと、CLIのインストール自体は問題なかったものの、credentialファイルを作れない状態でした。

これはハマりそうだな、ということでサポートの方にヘルプを求めたところ、一度touchして後から中身を書き加えるという方法でうまくいきました。サポートの方が言うには、Chaliceそのものよりも環境構築でハマるパターンが多いようです。

「困ったらその場で聞ける」はハンズオンの最大のメリットですね。

デプロイまでの手順は以下です。(なお、作業はvirtualenvによるPython 3.7.3の仮想環境で行いました。)

Chaliceのインストール

$ pip install chalice

プロジェクトの作成

$ chalice new-project helloworld
$ cd helloworld

エディタで app.pyを編集(今回は確認)

from chalice import Chalice

app = Chalice(app_name='helloworld')

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

デプロイ

$ chalice deploy

以上。URLが返ってくるので、curlで確認します。

マネジメントコンソールを覗いてみると以下が生成されています。

Lambda

API Gateway

IAM

なお、いつもLambda用のIAMロールにどこまでのポリシーをつけるものか…と悩んでいたのですが、Chaliceでは、呼び出す(AWSの)APIを判断し、最小のポリシーををつけてくれるようです。便利!!

なお、片付けは以下のコマンドから。

$ chalice delete

一発で綺麗さっぱり作ったものが削除されます。

その他のハンズオンコンテンツ

上記で作ったAPIをベースにアメリカの都市名から州名を返すメソッドを追加し、それにエラーレスポンスを実装したり、PUTを追加したりと内容盛りだくさんでした。

また、私は今回時間の関係で省略したのですが、以下のような内容もありました。

  • API キーと認可機能
  • Amazon S3 へのファイルアップロード処理パターン
  • 画像認識 API

終わりに

LambdaとAPI Gatwayを使ったAPIをPythonで高速に構築できるマイクロフレーム「Chalice」、シンプルなAPI開発の際には検討してみてはいかがでしょうか?

以上、Kyoでした。