【AWSサービス 基礎】Amazon API Gateway で REST API を作成しリクエストを処理する

目次

概要

Amazon API Gatewayは、APIの作成・公開・管理を行うフルマネージドサービスです。バックエンドのサービス(Lambda関数、EC2、外部HTTPエンドポイントなど)へのリクエストを受け付ける「フロントドア」として機能します。

Webアプリケーションやモバイルアプリケーションを構築する際、クライアントとバックエンドの間にAPI Gatewayを配置することで、認証・認可、リクエストのスロットリング、レスポンスのキャッシュなどを一元管理できます。この記事では、API Gatewayの基本を理解するために、REST APIを作成してリクエストを処理する手順を体験します。

この記事のメリット

  • Amazon API Gatewayの役割と基本的な仕組みを理解できる
  • REST API、リソース、メソッド、統合といったAPI Gatewayの主要概念を把握できる
  • AWSマネジメントコンソールからREST APIを作成し、テストリクエストを実行する手順を習得できる
  • API Gatewayのステージとデプロイの仕組みを理解できる

キャラクター紹介

クラウド資格実践ラボの基礎学習記事では、ルクシーちゃんと代表の土肥が対話形式で AWS 認定試験で必要な知識をハンズオンとともに解説していくブログです。これからこのブログを案内する2人を紹介します。

ルクシーちゃん

クラウド資格に挑戦中の好奇心旺盛なナビゲーター。初学者目線で「これってなんだろう?」と素朴な疑問を投げかけ、知識を引き出していく役どころ。難しい内容も、ルクシーちゃんと一緒なら一歩ずつ理解できると思います!

土肥(とひ)

株式会社Luxyの代表であり同社の元エンジニア。これまでオンプレとAWS環境のインフラを担当。AWS認定資格の学習で得た知識をハンズオンとともに解説するのが得意。直近では新人の教育なども行っており、これから技術を学ぼうという方が納得できるように解説できることに喜びを感じているとのこと。

技術解説

API Gatewayとは

Luxyちゃん

とひさん、Amazon API Gatewayってどんなサービスなんですか?

土肥

ざっくり言うと、APIの「フロントドア」を作ってくれるサービスだよ。クライアントからのHTTPリクエストを受け取って、適切なバックエンドサービスにルーティングしてくれるんだ。

Luxyちゃん

フロントドア…。お店の受付みたいな感じですか?

土肥

まさにそのイメージ!お客さん(クライアント)が来たら、受付(API Gateway)が要件を聞いて、担当部署(バックエンド)に取り次いでくれる感じだね。しかもAPI Gatewayが提供するAPIタイプは3種類あるよ。まとめるとこんな感じ。

APIタイプ用途特徴
REST API汎用的なRESTful APIリクエスト検証、キャッシュ、WAF統合、リソースポリシーなどフル機能
HTTP APIシンプルなHTTP APIREST APIより低レイテンシ・低コスト。機能は限定的
WebSocket API双方向通信チャットアプリやリアルタイム通知などに使用
Luxyちゃん

3種類もあるんですね!どれを使えばいいんですか?

土肥

一番よく使われるのは「REST API」だよ。機能がフルに揃っていて汎用的なんだ。この記事でもREST APIを使って進めていくよ。

Luxyちゃん

なるほど、まずはREST APIを押さえておけばいいんですね!

REST APIの主要コンポーネント

Luxyちゃん

REST APIはどういう仕組みで動いているんですか?

土肥

REST APIは大きく3つのコンポーネントで構成されているよ。「リソース」「メソッド」「統合」の3つだね。順番に説明するね。

Luxyちゃん

お願いします!

土肥

まず「リソース」は、APIのURLパスに対応する要素だよ。例えば /users とか /users/{userId} のように、APIのエンドポイントを階層構造で定義するんだ。

Luxyちゃん

Webサイトのページ構造みたいなものですか?

土肥

そうそう、イメージとしてはそれに近いね。次に「メソッド」は、リソースに対して定義するHTTPメソッド(GET、POST、PUT、DELETEなど)のことだよ。同じ /users というリソースでも、GETなら一覧取得、POSTなら新規作成、みたいに処理を分けられるんだ。

Luxyちゃん

リソースが「どこに」で、メソッドが「何をするか」ってことですね!

土肥

その通り!そして3つ目の「統合(Integration)」は、メソッドがリクエストを受けたときに、どのバックエンドにルーティングするかを定義するものだよ。統合タイプにはいくつか種類があるんだ。

統合タイプ説明
Lambda関数AWS Lambda関数を呼び出す
HTTP外部のHTTPエンドポイントにプロキシする
Mockバックエンドを呼び出さず、固定レスポンスを返す
AWSサービスS3やDynamoDBなどのAWSサービスを直接呼び出す
VPCリンクVPC内のプライベートリソースにアクセスする
Luxyちゃん

Mockっていうのは何ですか?バックエンドを呼び出さないって不思議です。

土肥

Mockは、バックエンドなしで固定のレスポンスを返してくれる統合タイプだよ。APIの動作確認をしたいけど、まだバックエンドができてないってときに便利なんだ。今回の実践でもこれを使うよ!

REST APIのリクエストフロー(クライアント → API Gateway → メソッド → 統合 → バックエンド)

ステージとデプロイ

Luxyちゃん

APIを作ったら、すぐに外部からアクセスできるんですか?

土肥

いい質問だね。実は、APIの定義を変更しただけでは外部からアクセスできないんだ。変更を反映するには「デプロイ」を実行して、特定の「ステージ」に紐付ける必要があるよ。

Luxyちゃん

ステージ…ってなんですか?

土肥

ステージは、APIのバージョンやライフサイクルを管理するための仕組みだよ。例えば devstagingprod のように環境ごとにステージを分けて運用できるんだ。開発中はdevステージで確認して、本番公開するときはprodステージにデプロイする、みたいな使い方だね。

Luxyちゃん

なるほど、環境を分けて管理できるんですね。デプロイするとどうなるんですか?

土肥

デプロイを実行すると、ステージごとに一意の呼び出しURLが生成されるよ。こんな形式になるんだ。

https://{api-id}.execute-api.{region}.amazonaws.com/{stage-name}
Luxyちゃん

URLにステージ名が入るんですね!devとprodで別々のURLになるから、安全に切り替えられるってことですね!

土肥

その通り!よく理解できてるね。じゃあ実際にAPIを作ってみよう!

実践

ここでは、API GatewayでREST APIを作成し、Mockタイプの統合を使って固定レスポンスを返すAPIを構築します。Mockタイプを使用することで、バックエンドの準備なしにAPI Gatewayの基本操作を体験できます。

前提条件

  • リージョン: ap-northeast-1(東京)
  • AWSマネジメントコンソールにログイン済み
リソース種別リソース名用途
REST APImy-first-apiハンズオン用のREST API

REST APIの作成

  • 上部の検索バーに API Gateway と入力し、表示された「API Gateway」を選択します
  • API Gatewayのコンソールが表示されます。「APIを作成」をクリックします
  • APIタイプの選択画面が表示されます。「REST API」の「構築」をクリックします
APIタイプの選択画面(REST APIの「構築」ボタン)
  • 以下を設定します
  • API名: my-first-api
  • 説明: ハンズオン用REST API
  • APIエンドポイントタイプ: リージョン
  • 「APIを作成」をクリックします
REST APIの作成画面(API名とエンドポイントタイプの入力)

リソースの作成

  • 左側ナビゲーションの「リソース」を選択します(デフォルトで選択されています)
  • / (ルートリソース)が表示されている状態で、「リソースを作成」をクリックします
  • 以下を設定します
  • リソースパス: /(デフォルト)
  • リソース名: greeting
  • 「リソースを作成」をクリックします

リソースツリーに /greeting が追加されます。

greetingが作成された状態

メソッドの作成

  • /greeting リソースを選択した状態で、「メソッドを作成」をクリックします
  • 以下を設定します
  • メソッドタイプ: GET
  • 統合タイプ: Mock
  • 「メソッドを作成」をクリックします
GETメソッドの作成画面(統合タイプでMockを選択した状態)

統合レスポンスの設定

Mockタイプの統合では、API Gatewayが直接レスポンスを返します。レスポンスの内容を設定します。

  • 作成した GET メソッドの画面で、「統合レスポンス」タブを選択します
  • デフォルトのレスポンス(ステータスコード200)が表示されます。「編集」をクリックします
  • 「マッピングテンプレート」セクションを展開し、以下を設定します
  • Content-Type: application/json(デフォルトで設定済み)
  • テンプレート本文に以下を入力します
{
  "message": "Hello from API Gateway!",
  "timestamp": "$context.requestTimeEpoch"
}
  • 「保存」をクリックします
統合レスポンスのマッピングテンプレート編集画面

APIのテスト

デプロイ前に、API Gatewayのコンソール上でテストを実行できます。

  • GET メソッドの画面で、「テスト」タブを選択します
  • クエリ文字列やヘッダーは空のままで、「テスト」をクリックします
  • レスポンス本文に以下のようなJSONが返却されることを確認します
{
  "message": "Hello from API Gateway!",
  "timestamp": "1234567890"
}
  • ステータスコードが 200 であることを確認します
テスト実行結果(ステータス200とレスポンスボディが表示された状態)

APIのデプロイ

テストで動作を確認できたら、APIをデプロイして外部からアクセスできるようにします。

  • 「APIをデプロイ」をクリックします
  • 以下を設定します
  • ステージ: *新しいステージ*
  • ステージ名: dev
  • 「デプロイ」をクリックします
APIのデプロイ画面(ステージ名の入力)

デプロイが完了すると、ステージの画面に遷移し、画面上部に「呼び出しURL」が表示されます。このURLの末尾に /greeting を追加したURLが、作成したAPIのエンドポイントです。

ステージ画面に表示された呼び出しURL

ブラウザで {呼び出しURL}/greeting にアクセスすると、設定したJSONレスポンスが返却されることを確認できます。

まとめ

  • Amazon API Gatewayは、APIの作成・公開・管理を行うフルマネージドサービスであり、バックエンドへのリクエストを仲介する「フロントドア」として機能する
  • REST APIは「リソース」「メソッド」「統合」の3つのコンポーネントで構成される
  • 統合タイプとしてLambda関数、HTTP、Mock、AWSサービス、VPCリンクが選択でき、Mock統合を使えばバックエンドなしで動作確認が可能
  • APIの変更を外部に公開するには「デプロイ」が必要であり、ステージ(dev、prodなど)ごとに一意のURLが発行される
  • コンソール上の「テスト」機能を使えば、デプロイ前にAPIの動作を検証できる

参照先

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社Luxy(https://luxy-inc.com)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した会社を引き継ぎ、代表に就任。

目次