🚀

【AWS】AWS ChaliceでAPI Gateway/Lambdaを自動生成する

2022/06/17に公開


はじめに

ご覧いただきありがとうございます。阿河です。
今回は小ネタです。

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

最近触る機会があり便利だったので、アウトプットしようと思います。

API GatewayとLambdaを自動作成します。

対象者

  • AWSを運用中
  • Lambda/Python初心者
  • API Gatewayの設定が面倒

概要

(★)がついているセクションは、今回手を動かして頂く項目です。

  1. CloudShell上に開発環境を作る(★)
  2. API GatewayとLambdaを自動生成する(★)

各種ドキュメントを参照しながら、進めていきます。

事前準備

  • AWSアカウント作成
  • AdministratorAccessを付与したIAMユーザーの作成

1.CloudShell上に開発環境を作る

AWS Chaliceを使用すると、Lambdaを使用するPythonアプリケーションをすばやく作成してデプロイできます。

Chalice CLIを使用すると、REST APIをAPI GatewayとLambdaを数分でデプロイできます。

まず開発環境を整えます。
CloudShellを開きましょう。

右上のCloudShellアイコンをクリックします。

CloudShell

$ python3 --version
Python 3.7.10

$ python3 -m venv venv37
$ . venv37/bin/activate
(venv37)

$ python3 -m pip install chalice

$ chalice --version
chalice 1.27.1, python 3.7.10, linux 4.14.276-211.499.amzn2.x86_64

セットアップ方法は公式に載っています。
Chaliceをインストールできたら、成功です。

2.API GatewayとLambdaを自動生成する

チュートリアルを参考にしながら、作成を進めていきます。

まずプロジェクトを作成します。

CloudShellで以下のプロジェクトを作成します。

$ cd
$ chalice new-project trans_en_jp
Your project has been generated in ./trans_en_jp

$ ls
trans_en_jp

$ cd trans_en_jp
$ ls
app.py  requirements.txt

プロジェクトを作成すると、配下にディレクトリが作成されます。
またディレクトリ配下には、app.pyとrequirements.txtがあります。

app.pyは「APIの実装を行うファイル」、requirements.txtは「利用するライブラリの定義を行うファイル」です。

app.py

from chalice import Chalice

app = Chalice(app_name='trans_en_jp')


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

app.pyの中身には上記のようなコードが書かれています。
公式にも、app.pyについて記載があります。

ルーティングについては、こちらを参照ください。Chalice.route()メソッドは、APIに対してどのようなルートを作成するかを構築するために使用されます。

関数を @app.route(...) で装飾し、ユーザーがそのURLをリクエストするたびに、装飾した関数が呼び出されます。

このapp.pyを書き換えます。

以前作成した翻訳のコードを使います。
一部書き換えて、英語を渡すと日本語に翻訳するようにします。

from chalice import Chalice
import boto3

app = Chalice(app_name='trans_en_jp')


@app.route('/{name}')
def translate(name):
    trans_client = boto3.client('translate', region_name='us-east-1')
    res = trans_client.translate_text(
            Text=name,
            SourceLanguageCode='en',
            TargetLanguageCode='ja'
            )
    
    return res.get('TranslatedText')

chalice deploy を実行すれば、アプリケーションをデプロイできます。

$ cd translate
$ chalice deploy
Creating deployment package.
Creating IAM role: trans_en_jp-dev
Creating lambda function: trans_en_jp-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  - Rest API URL: https://xxxxxxxxxxxxxxxxxxxx.ap-northeast-1.amazonaws.com/api/

URLが発行されました。

AWSマネジメントコンソールを確認しましょう。
Lambdaのページに飛びます。

Lambda関数が作成されています。
またAPI Gatewayも自動で紐づいているようです。

CLIで行った設定に基づいて、AWS上でLambda関数が作成されたことを確認できました。

次はAPI Gatewayを見てみましょう。

GETメソッドが作成されています。

試しにURL/Hello にアクセスしてみましょう。

今回はURL/Hello にアクセスしてみました。
「Hello」が「こんにちは」に翻訳されています。

「英語を投げると日本語に翻訳して返す」APIが作成されているのが分かります。
このようにChaliceを使えば、API GatewayとLambdaをCLIベースで手軽に自動生成できます。

最後にお片付けします。

chalice delete
Deleting Rest API: xxxxxxxxxxxx
Deleting function: arn:aws:lambda:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Deleting IAM role: trans_en_jp-dev

AWSマネジメントコンソールに移動すると、API GatewayおよびLambda関数が削除されています。

さいごに

今回は簡単な検証でしたが、AWS Chaliceを使って簡単にAPI GatewayとLambda関数をデプロイできました。

お疲れ様でした!!

MEGAZONE株式会社 Tech Blog

Discussion