API GatewayとLambdaが今ひとつわかってないので手を動かして勉強しました。
内容は以下の動画を参考にさせてもらいました。
AWSマネジメントコンソースからlambdaを選択し、関数を作成します。
Function nameはTransationProcessor、RuntimeはPython 3.6、PermissionsではCreate a new role with basic Lambda permissionsを選択します。
※Create a new role with basic Lambda permissionsはCloudWatchのパーミッションも含まれているようです。
Create functionをクリックするとLambda関数が作成され、以下のようにDesignerが表示されます。
※動画だとここでAmazon CloudWatch Logsも表示されている。
Lambda関数のコードを確認してみると、ボイラープレートのコードがありました。
ローカルで以下のコードを作成します。
import json print('Loading function') def lambda_handler(event, context): transactionId = event['queryStringParameters']['transactionId'] transactionType = event['queryStringParameters']['type'] transactionAmount = event['queryStringParameters']['amount'] print('transactionId=' + transactionId) print('transactionType=' + transactionType) print('transactionAmount=' + transactionAmount) transactionResponse = {} transactionResponse['transactionId'] = transactionId transactionResponse['type'] = transactionType transactionResponse['amount'] = transactionAmount transactionResponse['message'] = 'Hello from Lambda land' responseObject = {} responseObject['statusCode'] = 200 responseObject['headers'] {} responseObject['headers']['Content-Type'] = 'application/json' responseObject['body'] = json.dumps(transactionResponse) return responseObject
マネジメントコンソールのLambdaのコードに上記のコードを貼り付け保存します。
これでLambdaの準備はできました。
API Gatewayのマネジメントコンソールを開きREST APIのBuildをクリックします。
API作成画面でNew APIを選択し、API nameはTransactionApis、Endpoint TypeはRegionalを選択してCreate APIをクリックします。
無事APIが作成され以下の画面に遷移しました。
ActionsからCreate Resourceをクリックします。
Resource Nameにtransactionsと入力し、それ以外はデフォルトのままでCreate Resourceをクリックします。
次にActionsからCreate Methodをクリックします。
MethodをGETにしてIntegrations typeはLambda Function、 Use Lambda Proxy integrationはチェック、Lambda Regionは先ほどLambdaを作成したリージョンを選択、LambdaはTransactionProcessorを選択してSaveをクリックします。
Integrations typeはAPIリクエストをどこに送るか、という内容で今回はLambdaを呼び出したいのでLambda Functionを選択しています。
EC2などのHTTPエンドポイントにリクエストを送りたい場合はHTTPを選択するようです。
別のAWSサービスに送る場合はAWS Serviceを選択するようです。
Use Lambda Proxy integrationsは重要そうな項目なのですが、まだ勉強できていないので後から調べたいと思います。
すると以下のポップアップが表示されました。
API GatewayにLambda関数を呼び出す許可を与えます、という意味だと思いますのでOKをクリックします。
すると以下の画面が表示されました。
図の意味はまだよくわかっていないので後から勉強します。
次にAPIをデプロイする必要があるのでActionsからDeploy APIをクリックします。
するとDeployする詳細を入力するポップアップが表示されます。
Deployment stageで[New Stage]を選択し、Stage nameはtestと入力してDeployをクリック。
※Stage nameでproductionとtestを分けたり、v1やv2など分けるようです。
無事デプロイされました。
test配下のtransactionのエンドポイントもできていることが確認できます。
ブラウザからアクセスしてみるとLambda関数で出力された値が帰ってきました。