🐑

Amazon API Gateway とAWS Lambdaを使ってAPIを作る

2022/02/13に公開

AWS Lambdaを使ってみたかったので、Amazon API Gatewayを使ってAPIを作成し、動作確認をします

事前準備

  • AWSアカウントの作成、IAMユーザの作成をします。
  • 以下のドキュメントを参考にしてください。

https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html

AWS Lambdaで関数を作成する

  • AWSマネジメントコンソールで lambda と検索し、AWS Lambda コンソールを開きます
  • 画面右上の 関数の作成 をクリックします

  • 以下の設定にします
    • 関数名: hello-lambda
    • ランタイム: Node.js 14.x
    • アーキテクチャ: x86_64
    • 実行ロール: 基本的な Lambda アクセス権限で新しいロールを作成
  • 画面右下の 関数の作成 をクリックします

API Gatewayを作成する

  • AWSマネジメントコンソールで API Gateway と検索し、API Gatewayのコンソールを開きます
  • HTTP API構築 をクリックします

APIの作成

  • APIの作成画面で 統合を追加 をクリックします

  • 以下の設定にします
    • 統合: Lambda
    • AWSリージョン: Lambdaの関数を作成したリージョンを指定してください
    • Lambda関数: hello-lambda(先ほど作成した関数を指定してください)
    • バージョン: 2.0
    • API名: hello-lambda-api
  • 画面右下の 次へ をクリックします

ルートの作成

  • 以下の設定にします
    • メソッド: ANY(実際にAPIを使うならメソッドはGETとかPOSTとか用途に合わせて設定する)
    • リソースパス: hello-lambda
    • 統合ターゲット: hello-lambda
  • 画面右下の 次へ をクリックします

ステージを定義

  • 以下の設定にします
    • ステージ名: $default
    • 自動デプロイ: ON
  • 画面右下の 次へ をクリックします

確認して作成

  • 画面右下の 作成 をクリックします

APIエンドポイントを確認する

  • AWSマネジメントコンソールで lambda と検索し、AWS Lambda コンソールを開きます
  • 関数から先ほど作った hello-lambda をクリックします
  • 設定 タブの中にAPI Gatewayのトリガーが追加されており、そこでAPIエンドポイントを確認できます
    • (例) https://xxxxxx.execute-api.<region>.amazonaws.com/hello-lambda

APIの動作を確認する

  • ターミナルを開いて、以下のコマンドのAPIエンドポイントの部分を変更し、実行してください
  • Hello from Lambda! というレスポンスが返って来れば成功です🎉
$ curl {APIエンドポイント}

# 例
$ curl https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/hello-lambda

データをPOSTしてレスポンスを変える

  • Lambda関数の実装を変更してみます
  • POSTされたデータ(name)を受け取り、そのデータをもとにレスポンスを返します
  • Lambdaコンソールの コード タブで以下の実装に書き換えてください
  • 実装を変更したあと、Deploy ボタンをクリックしてください
exports.handler = async (event) => {
    const name = JSON.parse(event['body'])['name'];
    const response = {
        statusCode: 200,
        body: JSON.stringify(name),
    };
    return response;
};

データをPOSTしてAPIの動作を確認する

  • ターミナルを開いて、以下のコマンドのAPIエンドポイントの部分を変更し、実行してください
  • Hello KIMURA というレスポンスが返って来れば成功です🎉
$ curl -X POST -H "Content-Type: application/json" -d '{"name":"KIMURA"}' {APIエンドポイント}

# 例
$ curl -X POST -H "Content-Type: application/json" -d '{"name":"KIMURA"}' https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/hello-lambda

後片付けをする

  • 以下の各AWSコンソール画面にアクセスし、作成されたものを削除してください

Lambda

  • 関数 hello-lambda を選択し、アクションボタンから削除します

API Gateway

  • hello-lambda-api を選択し、アクションボタンから削除します

Identity and Access Management (IAM)

  • Lambda関数を作る際、実行ロール の設定で 新しいロールを作成 を選択していたので、削除します
  • ロール名が hello-lambda-role-xxxxx となっているロールを選択し、削除します

  • またAPI GatewayでLambda関数と統合する際にポリシーが作成されているので、削除します
  • ポリシー名が AWSLambdaBasicExecutionRole-xxxxxx、 タイプが カスタマー管理 のものを選択し、アクションボタンから削除します

Cloudwatch

  • Lambda関数のログを取得するためのロググループが作成されているので、削除します
  • /aws/lambda/hello-lambda というロググループを選択し、アクションボタンから削除します

Discussion