爆速 API 開発を実現するサーバーレスアプリケーション開発向けフレームワーク

2020-03-02
デベロッパーのためのクラウド活用方法

Author : 鈴木 哲詩

サーバーレスアーキテクチャを採用すると、これまでアプリケーションが稼働するプラットフォーム上の OS のパッチ管理やスケーラビリィ管理などのために割いていた時間を、ビジネスロジックの実装をするための時間に充てることが出来るようになります。これによって、よりビジネスを加速させることが期待できます。

しかし、単にアプリケーションコードだけを実装すればいいということではなく、異なるパラダイムには異なるパラダイムのための管理手法を取り入れる必要があり、そこには当然学習コストを含めて別のコストが発生することとなります。そのような課題に対するソリューションとして、フレームワークの採用が合理的となる場合があります。

そこで AWS Chalice はいかがでしょうか ? AWS Chalice は、AWS が提供するサーバーレスアプリケーションのためのフレームワークのひとつです。

AWS Chalice とは

AWS Chalice は Python 製のフレームワークで、Python で AWS Lambda を用いたサーバーレスアプリケーションを構築するにおいて、シンプルかつパワフルな機能を提供しています。

百聞は一見に如かず。まずは以下の例をご覧ください。

from chalice import Chalice

app = Chalice(app_name='builders_flash_chalice')


@app.route('/welcome')
def welcome():
    return {'message': 'Welcome to Builders Flash!'}

この実装では以下のような処理が定義されています。

- /welcome へのアクセスに対して {"message": "Welcome to Builders Flash!} をレスポンスする

「Chalice を使ったことがない」、「Python に馴染みがない」という方でも、この実装がどのように動作するのかということを直感的に想像出来たのではないでしょうか。

ではこれが実際に AWS 上ではどのように展開されるかということを考えてみましょう。
AWS でサーバーレスアプリケーションを構築するとなれば、その中核となるのはほとんどの場合で AWS Lambda となるでしょう。

この実装では、この部分が AWS Lambda で実行される処理の主要部となります。(厳密にはもう少し複雑な処理を経て welcome 関数が呼び出されますが、ここではいったん簡潔にこのような理解で問題ありません。)

def welcome():
    return {'message': 'Welcome to Builders Flash!'}

そして、この関数は @app.route('/welcome') デコレータで修飾されています。AWS でサーバーレスで REST API を構築するとなれば、登場するのは Amazon API Gateway ですね。この @app.route デコレータは、引数に取った URL Path との対応付けが定義されると同時に、Amazon API Gateway のエンドポイントひとつひとつに対応していることを示します。

つまり、

『Amazon API Gateway に設定された URL の /welcome パスにアクセスをすると、関連付けられた AWS Lambda の welcome 関数が実行される』

ということになります。

AWS Chalice によってもたらされるサーバーレスアプリケーションの開発体験では、アプリケーションコードの中だけで AWS Lambda で処理されるべき実装が、どの AWS サービスと連携をするべきかということをデコレータによって簡単に定義することが出来ます。

『別途の連携定義を管理することは不要です。』

他にも以下のようなデコレータの提供があります。Amazon API Gateway 以外のサービスと連携するためにもまた同様の定義によって実装することが可能です。

ここまでお読みいただけた方であれば、それぞれの説明を受けずともこれらの役割を容易に想像出来るのではないでしょうか。

@app.on_s3_event('mybucket')
def resize_image(event):
    pass
@app.schedule('rate(5 minutes)')
def rate_handler(event):
    pass
@app.on_sns_message(topic='mytopic')
def handler(event):
    pass
@app.on_sqs_message(queue='myqueue')
def handler(event):
    pass
@app.lambda_function()
def handler(event, context):
    pass
@app.authorizer(ttl_seconds=30)
def jwt_auth(auth_request):
    pass
@app.on_ws_message()
def websocket_msg(event):
    pass

それぞれの詳細については是非公式ドキュメントをご参照ください。

デプロイ

ここまででアプリケーションの実装をシンプルかつ直感的に行えそうだということを感じていただけたでしょうか。ではこの実装を実際に AWS 上にデプロイして動作させるようにするにはどうしたらいいのでしょう ?

AWS Chalice には、CLI の提供もあります。そのサブコマンドとして、deploy コマンドがあります。

$ chalice deploy
Creating deployment package.
Creating IAM role: builders_flash_chalice-dev
Creating lambda function: builders_flash_chalice-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:ap-northeast-1:************:function:builders_flash_chalice-dev
  - Rest API URL: https://**********.execute-api.ap-northeast-1.amazonaws.com/api/

はい、デプロイ完了です。
コマンド実行から完了までに要する時間は数十秒。爆速です。

Amazon API Gateway のリソースも自動的に作成されますので、デプロイが完了したらその瞬間から払い出される API URL に対してすぐにアクセスすることが出来ます。AWS Lambda に割り当てる実行権限管理のための IAM role も自動的に作成されて自動的にアサインされています。

今回は Amazon API Gateway と連携する AWS Lambda 関数の例でしたが、たとえば on_s3_event で修飾されている関数実装があるのであれば、指定された Amazon S3 のバケットと連携するための設定も自動的に行われます。アプリケーションコード実装以外に別途の定義は不要です。

最後に

今回は AWS Chalice の概要をご紹介しました。AWS Chalice を使ってサーバーレスアプリケーションの爆速開発を体験してみたいと感じていただけていれば嬉しいです。

今回は概要まででしたので、ご興味を持たれて実際にご利用を検討されたいという方は是非こちらのウェビナーもチェックしてみてください。

他にも以下のようなコンテンツを用意していますので、よろしければチェックしてみてください。

そして、AWS Loft Tokyo では、「AWS Amplify & Chalice ハンズオン 〜怠惰なプログラマ向けお手軽アプリ開発手法〜」というワークショップも不定期に開催しております。本イベントは、ハンズオン形式で実際にアプリケーションを実装していただくワークショップですので、ぜひご参加ください !

Enjoy Serverless!


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

プロフィール

鈴木 哲詩
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト

アプリケーションプロトタイピングソリューションアーキテクトとして AWS をご利用のお客様をソフトウェアのレイヤーからご支援しています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する