API GatewayとLambdaを使って、簡単な動的Webサイトを作ってみました。URLに和暦を入れて、アクセスすると、西暦が表示されるAPIです。具体的には、https://example.com/dev.japanese?input_text=reiwa2
にアクセスすると、[2020]と表示されます。
完成イメージ
アーキテクチャ
作成の流れ
Lambda関数を作成する
Lambdaのコンソールに移動し、Lambda関数を作成します。右上のリージョンは「東京」を選びます。
関数を作成します。関数名、ランタイムを入力します。他の値はデフォルト値のままで「関数の作成」ボタンをクリックします。
関数が作成されました。いったん置いておいて、次にAPI Gatewayの設定に移ります。
/japaneseリソースを作成する
API Gatewayのコンソールを開きます。リソースとは、APIのパスのことです。リソースに「test」を追加したとすると、APIのエンドポイントは、https://example.com/testとなります。右上のリージョンは「東京」を選んで、「APIを作成」ボタンをクリックします。
今回、APIタイプは作成事例が多い「REST API」を選びました。
参考サイト:AWS公式 REST API と HTTP API 間で選択する
GETメソッドを作成する
↓「GET」を選んで、チェックマークをクリックします。
統合タイプとしてLambda関数を選択、プロキシ統合してインプット/アウトプットをパススルーする
↓統合タイプは「Lambda関数」を選び、 「Lambda プロキシ統合の使用」にチェックを入れます。チェックを入れると、API Gatewayは変換処理をせずにインプットしたものをそのままパススルー(素通り)します。Lambdaリージョンは先ほど作った東京リージョンである「ap-northeast-1」を選びます。Lambda関数には先ほど作成した関数名を入力して、「保存」をクリックしいます。
メソッドができました。
パラメータを設定する
リクエストパラメータを設定する
プログラム中で呼びだされる関数に与えられる値(引数)を設定していきます。
↓「URLクエリ文字列パラメータ」に名前を入力し、チェックマークをクリックします。
↓Lambda関数の修正が必要なので、さきほど作ったLambda関数をクリックして、Lambdaのコンソール画面に遷移します。
↓API Gatewayのルールに従って、レスポンスを返す必要があるので、return値を修正していきます。API GatewayのルールはAmazon API Gateway デベロッパーガイドに記載されてます。
↓さきほど作成したLambda関数には、「statusCode」、「body」はありますが、「headers」、「isBase64Encoded」がありません。
今回はAPIのやりとりにヘッダーを使っていないので、「headers」はブランクとします。
Base64エンコードとは、64種類の英数字のみを使い、それ以外の文字を扱えない環境でデータを扱うためのエンコード方式です。今回はエンコードしていないので、「false」とします。
Lambdaでは何かしらの処理をする際、イベントを受け取ります。そのイベントがlambda_handler(event, context)の中のeventに格納されます。
import json
def lambda_handler(event, context):
input_text = event['queryStringParameters']['input_text']
if input_text == 'reiwa1':
output_text = 2019
elif input_text == 'reiwa2':
output_text = 2020
elif input_text == 'reiwa3':
output_text = 2021
else:
output_text = 'other'
return {
'statusCode': 200,
'body': json.dumps(output_text),
'isBase64Encoded': False,
'headers' : {}
}
インプットパラメータを設定する
API GatewayのパラメータをLambdaのinput_textに代入するよう設定していきます。
↓Lambdaコンソールの「テスト」タブをクリックします。
↓「イベント共有の設定」は「プライベート」を選びます。「テンプレート」は「apigateway-aws-proxy」を選びます。下の方の「イベントJSON」には、API Gatewayからどのように情報が渡されるかが記載されています。8行目の「foo」を「input_text」に、「boo」を「reiwa2」に書き換え、「保存」をクリックします。API GatewayがLambdaに「reiwa2」というパラメータを引き渡すと、Lambdaが処理をして、「2020」というパラメータが戻ってくるはずです。
Lambda関数を修正する
Lambda関数をテスト実行する
「Test」ボタンをクリックすると、テスト実行します。レスポンスに先ほど設定した「body」、「isBased64Encoded」、「headers」が返ってきていることがわかります。
APIをデプロイする
API GatewayのコンソールからAPIをデプロイします。
[URLの呼び出し]に記載されているURLをコピーして、さきほど必須設定した[input_text]に[reiwa2]と入力し、ブラウザでURLにアクセスします。そうすると、[input_text]で指定した和暦に対する西暦が表示されました。
https://xxx.execute-api.ap-northeast-1.amazonaws.com/dev/japanese?input_text=reiwa2
コメント