メニュー
Amazon API Gateway
開発者ガイド

Amazon API Gateway とは?

Amazon API Gateway は、規模の大きさに関係なく、開発者が API を作成、配布、保守、監視、保護できる AWS サービスです。AWS または他のウェブサービス、AWS クラウドに保存されているデータにアクセスする API を作成できます。

AWS クラウドへのゲートウェイ

API Gateway は、「AWS サービス」およびその他のパブリックまたはプライベートのウェブサイトに接続するためのクラウドの「バックプレーン」とみなすことができます。一貫性のある RESTful アプリケーションプログラミングインターフェイス (API) を搭載しており、モバイルアプリケーションやウェブアプリケーションを使用して、AWS サービスにアクセスできます。

API Gateway のアーキテクチャを次の図に示します。

 API Gateway アーキテクチャの図

実際に、API Gateway では、「RESTful API」を作成、設定、およびホストして、アプリケーションで AWS クラウドにアクセスできるようにします。たとえば、API Gateway を使用するアプリケーションでは、ユーザーの年収と経費のデータを Amazon S3 または Amazon DynamoDB にアップロードし、AWS Lambda でデータを処理して負担税額を算出し、IRS のウェブサイト経由で所得税の申告書を提出できます。

アーキテクチャ図で示されているように、アプリケーション (またはクライアント) では、1 つ以上の API を介して、インターネット上の AWS のサービスまたはウェブサイトにプログラムからアクセスできます。このアプリケーションは、API Gateway でホストされています。このアプリケーションは、API のフロントエンドで表示されます。統合された AWS のサービスおよびウェブサイトは、API のバックエンドにあります。

Amazon API Gateway を使用すると、AWS クラウドベースのアプリケーションを構築するために、統合された一貫性のある開発者エクスペリエンスをユーザーに提供できます。

AWS サーバーレスインフラストラクチャの一部

API Gateway は、AWS Lambda と連携して、AWS サーバーレスインフラストラクチャのうち、アプリケーション向け部分を形成します。アプリケーションで一般的に利用可能な AWS サービスを呼び出す場合は、Lambda を使用して必要なサービスを操作し、API Gateway の API メソッドを使用して Lambda 関数を呼び出すことができます。AWS Lambda では、可用性に優れたコンピューティングインフラストラクチャでコードを実行します。また、必要に応じて、コンピューティングリソースを実行および管理します。サーバーレスアプリケーションを有効にするために、API Gateway では、AWS Lambda および HTTP エンドポイントを使用した「プロキシ統合の効率化」をサポートしています。

開発者エクスペリエンス

API Gateway を使用する開発者は、アプリ開発者と API 開発者の 2 種類です。アプリケーション開発者は、API Gateway を使用して AWS サービスを呼び出すために機能するアプリケーションを構築します。API 開発者は、API Gateway で必要な機能を使用できるように、API を作成およびデプロイします。API 開発者は、API を所有する AWS アカウントの IAM ユーザーである必要があります。アプリケーション開発者には、AWS アカウントは必要ありません。ただし、API で IAM のアクセス権限が不要であることが前提です。

API GatewayAPI の作成と管理

API 開発者は、API Gateway サービスコンポーネント (apigateway) を使用して、API を作成、設定、およびデプロイします。各 API には、リソースとメソッドのセットが含まれています。リソースは、リソースパスを介してアプリがアクセスできる論理エンティティを表します。

たとえば、/incomes は、アプリケーションユーザーの収益を表すリソースのパスです。リソースには、適切な HTTP 動詞 (GET、POST、PUT、PATCH、DELETE など) によって定義されるオペレーションを 1 つ以上含めることができます。リソースパスとオペレーションの組み合わせによって API のメソッドが識別されます。たとえば、POST /incomes メソッドで、呼び出し元が得た収益を追加し、GET /expenses メソッドで、呼び出し元によって報告済みの経費を問い合わせます。

メソッドは、API のユーザーによって送られる REST API リクエストに対応しており、該当するレスポンスがユーザーに返されます。アプリケーション側で、リクエストされたデータの保存先および取り込み先を把握する必要はありません。API は、統合リクエストまたは統合レスポンスを使用して、バックエンドと連結します。

たとえば、DynamoDB をバックエンドとして使用した場合、API 開発者は、受信するメソッドリクエストを選択されたバックエンドに転送するように統合リクエストを設定します。この設定には、適切な DynamoDB アクションの仕様、IAM のロールとポリシー、および必要な入力データ変換などがあります。バックエンドは、統合レスポンスとして API Gateway に結果を返します。統合レスポンスをクライアントの (一定の HTTP ステータスコードの) 適切なメソッドレスポンスにルーティングするには、統合からメソッドまで必要なレスポンスパラメータをマッピングするように統合レスポンスを設定できます。その後、必要に応じて、バックエンドの出力データ形式をフロントエンドの出力データ形式に変換します。API Gateway を使用することで、ペイロードのスキーマまたはモデルを定義して、本文マッピングテンプレートを容易に設定できるようにします。

API 開発者として、API を作成および管理するには、「ご利用開始にあたって」の説明に従って、API Gateway 管理コンソールを使用するか、「API Gateway REST API」を呼び出します。API を呼び出す方法には、複数の方法があります。たとえば、AWS コマンドラインインターフェイス (CLI)、または AWS SDK を使用する方法があります。また、REST API クライアント (例: Postman) を使用して、API 呼び出しを行うこともできます。また、「AWS CloudFormation テンプレート」または「Swagger に対する API Gateway 拡張」を使用して API を作成することもできます。API Gateway を使用できるリージョン、および関連する管理サービスエンドポイントのリストについては、「リージョンとエンドポイント」を参照してください。

API Gateway API を呼び出す

アプリ開発者は、API Gateway サービスコンポーネント (execute-api) を使用して、API Gateway で作成またはデプロイされた API を呼び出すことができます。基礎となるプログラミングエンティティは、作成された API によって公開されます。このような API を呼び出す方法はいくつかあります。API Gateway コンソールを使用して、API の呼び出しをテストします。REST API クライアント (例: CURL、Postman、または API Gateway で生成された SDK) を使用して、API で API を呼び出すことができます。

apigatewayexecute-api の API Gateway サービスコンポーネント間の違いに注意してください。IAM のアクセス権限ポリシーを設定して、API を構築または呼び出す場合など、選択する際は、適切なサービスコンポーネント名を参照します。

API Gateway のメリット

API Gateway を使用すると、堅牢かつ安全でスケーラブルなモバイルアプリおよびウェブアプリケーションのバックエンドを提供できます。API Gateway により、モバイルとウェブアプリケーションを、AWS Lambda でホストされるビジネスロジック、Amazon EC2 でホストされる API、または AWS の内外でホストされる一般にアドレス可能なウェブサービスに安全に接続できます。API Gateway を使用すると、バックエンドサービス向けの API を作成および操作できます。たとえば、認証やアクセスコントロール、トラフィック管理、モニタリング、分析、バージョン管理、ソフトウェア開発キット (SDK) の生成を行うためにインフラストラクチャを開発または維持する必要はありません。

API Gateway は、内部のまたはサードパーティーエコシステムパートナーのモバイルアプリケーション、ウェブアプリケーション、サーバーアプリケーションからバックエンド API への安全で信頼性の高いアクセスを確立したいと考えているウェブおよびモバイル開発者を対象としています。API の背後のビジネスロジックは、API Gateway プロキシが呼び出す一般にアクセス可能なエンドポイントから提供されるか、Lambda 関数として完全に実行される場合もあります。