💨

AWSを触ってみる【API Gateway】

に公開

はじめに

AWSが提供する学習プラットフォームAWS Skill Builderの学習プランが11/2まで無料で急ぎでやってみたので学んだことをまとめます。
https://aws.amazon.com/jp/blogs/news/begin-your-aws-journey-with-new-free-aws-builder-labs-learning-plan-on-aws-skill-builder/
実際にAWSコンソールを開きながら進められるのでおすすめです。
※自分はAWSを業務で若干しか触ったことないレベルなのでほぼ初心者です。

API Gatewayとは

Amazon API Gateway は AWS が提供するマネージド型サービスで、API の作成、デプロイ、メンテナンスを容易にします。
クライアントからのAPIリクエストを受け付け、バックエンドの各サービスに振り分けるための単一の入口となるシステムです。

API Gatewayの特徴

LambdaとAPI Gatewayを組み合わせることでインフラを一切持たず、コードだけで API を公開できます。

  • サーバーの管理が不要(インフラ不要、コードだけ)
  • 従量課金(使った分だけ支払い)
  • スケールが自動(アクセスが急増しても耐える)

API Gatewayの用途

API Gateway は Lambda と組み合わせて使われることが非常に多いです。

  • サーバーレス API の構築
    例:API Gateway → Lambda → DynamoDB のような構成で API を作れる。
  • 既存のバックエンドにアクセスするための API フロント
    例:API Gateway を経由して EC2 / ECS / on-premise(VPC 内)にある API を呼び出す。
  • 認証付きエンドポイントを作る
    例:Cognito / IAM ロールでアクセス制御できる。

サーバーレスなAPIを構築する

API Gateway と Lambda を使って、ランダムな質問と回答を返す FAQ API を作成します。

API の流れは以下のとおりです

  • ユーザーが API Gateway に HTTP リクエスト(GET)を送る
  • API Gateway がリクエストを Lambda 関数に渡す
  • Lambda が質問と回答の JSON を作り、API Gateway に返す
  • API Gateway がユーザーにレスポンスを返す

→ サーバーの管理不要で API を公開できる のがポイントです。

Lambda関数を作成する

  1. マネジメントコンソール「Lambda」>「関数の作成」

  2. 「一から作成」>関数名入力

  3. ランタイム「Node.js 22.x」

  4. デフォルトの実行ロールの変更>既存のロースを使用する>既存のロール「lambda-basic-execution」を選択

  5. 「関数の作成」

  6. 「コード」タブ>index.jsを書き換える

index.js
var json = {
  "service": "lambda",
  "reference": "https://aws.amazon.com/lambda/faqs/",
  "questions": [
    {
      "q": "AWS Lambdaとは?",
      "a": "サーバーを用意しなくてもコードを実行できるサービスです。コードが実行された時間だけ料金がかかります。"
    },
    {
      "q": "AWS Lambdaはどんなイベントで動く?",
      "a": "S3にファイルがアップロードされたときや、DynamoDBのデータが更新されたときなど、いろいろなイベントをきっかけに自動で動きます。スケジュール実行もできます。"
    },
    {
      "q": "LambdaとEC2はどう使い分ける?",
      "a": "Lambdaは「イベントに反応してコードを実行したいとき」に使います。EC2は「常に動き続けるサーバーを使いたいとき」向けです。Lambdaはサーバー管理が不要で、自動でスケールします。"
    }
  ]
}

export const handler = function(event, context) {
    var rand = Math.floor(Math.random() * json.questions.length);
    console.log("Quote selected: ", rand);

    var response = {
        body: JSON.stringify(json.questions[rand])
    };
    console.log(response);
    context.succeed(response);
};

  1. 「Deploy」

API Gatewayエンドポイントを作成する

  1. 「設定」タブ>「編集」
  2. 説明入力>「保存」
  3. 「トリガーの追加」

    API Gateway に対して呼び出しが行われるたびに Lambda 関数をトリガーします。
  4. トリガーの設定「API Gateway」>インテント「新規APIを作成」>APIタイプ「REST API」

Lambda 関数を作成し、設定できました。また、Lambda 関数のトリガーに使用する新しい API Gateway REST エンドポイントを作成しました。

Lambda関数をテストする

エンドポイントにアクセスする方法

  1. APIエンドポイントにリクエストする
エンドポイントの確認の仕方

「設定」タブ>トリガー>詳細

  1. URLからアクセスするとレスポンスが返ってくる

テストを実行する方法

  1. 「テスト」タブ>イベント名追加>イベントJSON追加

  2. 「テスト」実行
    成功

  3. 「モニタリング」タブ>「CloudWatchログを表示」>ログストリーム
    ログが確認できる

まとめ

理解が深まってきたら追記します。

Discussion