Perl を使った AWS Lambda を API Gateway に登録してブラウザから Hello, World する
前回までのあらすじ
AWS Lambda で Perl を動かすことに成功した sironekotoro.
しかし、それは AWS Lambda 上で「動かしただけ」であり、なんのアクションもインプットもないものだった・・・
ってわけで
・・・いや、アクションもインプットもあったら Hello, World じゃないやろ。
今回は AWS Lambda と Amazon API Gateway を組み合わせてみます。
ブラウザでアクセスすると Hello, World! って出てくる、そういうのを目指します。
AWS Lambda の準備
なお、2021年04月02日時点での画面での記述です。
前回と同じ部分ありますが、まぁ、そういうものだと思ってお付き合いください。
ただし、2ヶ月後も同じ設定項目が、同じ名前で、同じ画面にあるかどうか・・・
AWS Lambda のページ右上にある「関数の作成」をクリックする
関数の作成
- 「1から作成」を選択
- 関数名:my_perl_function
- ランタイム:Amazon Linux 2 でユーザー独自のブートストラップを提供する
- 実行ロール:デフォルトの「基本的な Lambda アクセス権限で新しいロールを作成」のまま
右下の「関数の作成」をクリックする
「関数の概要」の画面にある Layers(0) をクリックする
レイヤーの追加をクリックする
「ARN を指定」を選択する
- Amazon リソースネーム(ARN)に以下を入力する
arn:aws:lambda:ap-northeast-1:445285296882:layer:perl-5-32-runtime-al2:1
保存をクリックする。「関数の概要」のところで Layers(1) となっていればok
コードソース
今回はデフォルトで用意されている
bootstrap.sample
,hello.sh.sample
,README.md
を削除しておきます。- 該当のファイル名の上で右クリック -> Delete を選択
File から New File を選択し、エディタ部に以下のようにコードを書きます。
書いたら File から Save As を選択してファイルを保存します。または Ctrl + s 。
テスト
エディタ部の上にある「Test」をクリックします
- ラジオボタンは「新しいテストイベントの作成」でそのまま
- イベント名はなんでも良いですが、ここでは「first1」としておきます
- 下のエディタ部分は触らずに右下の「作成」ボタンをクリックします
ここで、Test の右隣にある Deploy ボタンをクリックします
デプロイが成功すると、Deploy の右にある表示が緑色で「Changes Deployed」に変わります。
再度、Test ボタンを押すと、エディタ部にタブが一つ増えテスト結果が表示されます。
ここまでが AWS Lambda 側の準備です。
このテストはは、用意されたJSONをそのまま受け取り、body に入れて返しているというものです。
テスト結果を見ると、Web アプリ作っている人にはお馴染みの Content-Type
や statusCode
がありますね。
この段階でよく(自分が)引っかかるポイントは、Deploy ボタン押すのを忘れてテストやって反映されてない!ってやるやつです。
Amazon API Gateway の準備
AWS のページ上部にある検索窓に API Gateway と入れて、そこから API Gateway の設定ページに進みます。
「統合を追加」のボタンをクリックし、以下のように設定します
- 統合:Lambda
- AWSリージョン:Lambda を作ったリージョン(今回は ap-northeast-1 (東京リージョン)) を選択
- Lambda 関数:作成した Lambda の名前 `` を選択
- api 名:任意に設定できるが、今回は Lambda 関数名に合わせて
my_perl_api
とする
「次へ」をクリック
ルートを設定
ここで、HTTP のメソッドに応じた Lambda 関数を設定することができるが、今回は 1 つだけなので ANY のままでよい。
リソースパスが API のエンドポイントになる(今回は Lambda 関数名である
my_perl_function
)「次へ」をクリック
API はバージョンによって
v1
とかv2
などのようにバージョン分けすることができる。が、今回はそこまで改修しないのでデフォルトで設定されている通り、自動バージョニングを設定する。
「次へ」をクリック
確認画面が出るので、「作成」をクリック
これで出来上がり。
「URLを呼び出す」のところにある URL をクリックすると・・・このように not found
になります。
このURLの後ろにエンドポイントである /my_perl_function
を追加してみます。
出ました! Hello! World
これで、 AWS Lambda で作成した関数を AMAZON API Gateway に紐づけることができました。