S3 + API Gatewayを使ってLambdaを動かす
今回はAPI Gatewayを使ってLambdaを発火させることができたので、その方法をメモしておきます。
こちらは前回の続きです。
suguru-no-rururu.hatenablog.com
Lambda関数の作成
AWSコンソールでLambdaを開きます。 右上の「関数の作成」を選択。
すると、関数の作成画面が出てくるので、
任意の関数名を入力します。今回はtestFunctionとしました。
ランタイムはNode.js 14.xにしました。
ここは自由に選んで良いと思いますが、ネットの情報を見る感じ、PythonとNode.jsが多い印象なので、どちらかを選んでおくと無難です。
入力ができたら関数の作成ボタンを押す。
作成が完了するとこんな感じの画面になります。
コードを変更しておきましょう。
コードを選択し、サイドバーのindex.jsをopenにします。
そして以下のようにコードを変更します。
exports.handler = (event, context, callback) => { // TODO implement const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; callback(null, event); };
変更ができたら必ずDeployを押してください。
API GatewayでAPIの開設
AWSコンソールからAPI Gatewayの画面を開きます。
そして右上のAPIの作成を選択。
今回はREST APIを選択しました。
「構築」を選択。
画像のように設定していきます。
ここでもAPI名は任意のもので大丈夫です。
入力が完了したら、「APIの作成」を選択。
すると、APIのページに遷移します。
左上のアクションから「リソースの作成」を選択。
リソース名を入力します。
ここも任意のもので大丈夫です。
入力ができたら「リソースの作成」を選択します。
続いて、アクションからメソッドの作成をします。
先ほど作成したリソースの下に小さくメソッドを選択するとことが出てきます。
今回はformから送信ボタンを押した際に動作するAPIを作成したいので、POSTにしました。
選択ができたら、右のチェックボタンをクリックします。
セットアップ画面が出るので、ここで先ほど作成したLambda関数を選択します。
保存をクリックすると、権限を追加する警告が出ますが、OKで大丈夫です。
忘れずにAPIのデプロイをしておきましょう。
忘れがちですが、これをしないと設定が反映されません。
今回はステージ名をtest_lambdaとしました。 デプロイをすると、先ほどのAPIのパスが表示されるのでメモしておきます。
マッピングテンプレートの追加もしておきます。
リソース > POST > 統合リクエストの順でクリックしていきます。
一番下にマッピングテンプレートというところがあるので、Content-Typeのところにapplication/x-www-form-urlencoded
と入力します。
入力ができたら右のチェックマークを押します。
すると下に入力するフォームが出てくるので、以下を入力します。
{ "body" : $input.json('$') }
入力ができたら保存してください。
S3にフォームのHTMLをアップロード
続いて先ほどのAPIを叩くためのフォームを用意します。
formタグのactionのところに先ほどのパスを貼り付けてください。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <h1>S3#index.html<h1> <form action="https://{先ほどメモしたパスを貼り付け}/test_lambda/form" method="post"> <input type="submit" value="送信"> </form> </html>
S3のアップロードから先ほど作成したindex.htmlをアップします。
今回はCloudFront経由で配信しているので、Domain Nameのところからページを開きます。
先ほどのフォームが見れると思います。
送信を押してみると、レスポンスの設定を何もしていないので、{}のような文字が出ると思います。
Lambdaのログを見てLambda関数が動いているか確認しましょう。
Lambdaの先ほど作成した関数から中央あたりのメニューから
モニタリング > CloudWatchのログを表示を選択。
こちらに何か記述があればLambdaが動いている証です。
リンクになっているところをクリックすると、中身が見れます。
Lambda内でconsole.logなどをすると、こちらに表示されます。
以上で終了です。