SAA学習-サーバレス-API GateWayの概要
公式サイトのURL:
APIとは
API(Application programming interface)は、システムとシステムをつなぐ連結器となります。
概略図は以下のようになります。
また、APIを通してリクエスト/レスポンス通信により、他のサービスの機能やデータを呼び出すことが可能です。
なお、一般的には以下のよう扱いとなります。
- APIはアプリケーションソフトウェア開発に利用される標準的なインターフェース群のこと
- Web APIはWeb上で他のサービスを呼び出す方式や取り決めのこと
APIの活用
APIの活用として、自社アプリ・サービスをAPI化し連携を目指す方式とAPI化された他社アプリ・サービスを活用する方式があります。 各々の概要について以下ようになります。
自社アプリ・サービスをAPI公開
- 自社アプリ・サービスをAPI化し、他社との連携しサービスと展開
他社アプリ・サービスのAPI活用
- 他社APIサービスを活用し、自社事業と組み合わたアプリやサービスを展開
APIエコノミー
APIエコノミーとは、自社サービスやデータをAPI化し社内外連携を促進し、ビジネス領域や価値を拡大させるビジネス活動となります。
API利用の必要事項
APIを活用するためには、APIを効率的に構築/運用/保守ができる状態であることが必要です。
項目としては以下のようなものが挙げられます。
API Gateway
API Gatewayとは、API作成/管理をフルマネージド型サービスでAWSが提供しています。
概要としては以下のようなものが挙げられます。
- 最大数十万個のAPI同時呼び出し・受付が可能
- アクセス制御の管理
- DDoS攻撃対応やスロットリングによるバックエンド保護
- EC2Lambda/任意のWebアプリケーションのワークロード処理を実行
- Lambdaと密接に統合
- WebSocketを利用したリアルタイムかつ双方向通信のAPIも処理可能
ユースケース
使用事例として、API Gatewayを連携口とし外部アプリとの連携を実現します。
簡易構成は以下のようなものがあります。
AWSにおけるAPI提供
一般的なアプリケーションの開発ではELB経由でAPIを提供します。
API GatewayはLambda関数を主とした簡易アプリケーション用のAPI提供に特化します。
API Gatewayのタイプ
API Gatewayのタイプは、通信方式に応じて利用を選択します。
利用できるタイプは以下の3種類となります。
HTTP API
RESTful API
- バックエンドのHTTPエンドポイント、Lambda関数、その他AWSのサービスに使用
- 主に同期通信に依存するアプリケーションに利用
- REST APIはクライアントサービスにリクエスト送信し、サービスが同期的に応答するリクエスト/レスポンスモデルに使用
WebSocket API
- 双方向用の通信方式
- チャットアプリ、コラボレーションプラットフォーム、マルチプレイヤーゲーム、金融取引基盤などのリアルタイムアプリに利用
API Gatewayの料金
API Gatewayの料金はAPI Gatewayタイプに応じて形式が異なります。
- HTTP API:使用したAPIコール分だけ料金発生
- RESTful API:受信したAPIコールと転送データ量に対してのみ料金発生
- WebSocket API:送受信したメッセージ数及び分単位の接続合計時間から料金発生
API Gatewayの統合
API GatewayはAPIメソッドを作成し、Lambda関数やWebサイトなどバックエンドポイントと統合します。
この際の統合タイプが以下の4つとなります。
Lambda統合
- Lambda関数との統合方式
- プロキシ統合またはLambda非プロキシ統合を使用し、APIメソッドをLambda関数に統合
Lambdaプロキシ統合
- API Gatewayがクライアントリクエスト全体をバックエンドLambda関数にマッピングし、Lambda関数と統合
- API Gatewayに許可ロールを設定し、統合設定することで自動的にマッピング統合が可能
- クライアントがAPIリクエスト送信するとAPI Gatewayは統合されたLambda関数にrawリクエストを渡し、リクエストパラメータの順序は保持されない
- リクエストデータには、リクエストヘッダー、クエリ文字列パラメータ、URLパス変数、ペイロードおよびAPI設定データを含む
- 設定データは、現在のデプロイステージ名、ステージ変数、ユーザーIDまたは承認コンテキストを含む
Lambda非プロキシ統合
HTTP統合
- バックエンドのHTTPエンドポイントを公開
- HTTPプロキシ統合またはHTTPカスタム統合を使用し、APIメソッドをHTTPエンドポイントに統合
- 利用ポート:80、443、1024-65535
プライベート統合
Mock統合
- バックエンド統合することがなくAPI Gatewayから直接APIレスポンスを生成する統合方式
- APIを操作する必要がある他の依存チームのブロックを解除可
- APIの概要やAPIへのナビゲーションを提供できるAPIライディングページをプロビジョンすることが可能
APIエンドポイントのタイプ
APIエンドポイントタイプは、APIトラフィックの発信元に応じて、エッジ最適化、リージョン別またはプライベートを選択します。
エッジ最適化APIエンドポイント
- CloudFrontと連携し、グローバルにクライアントが分散している場合、最適にルーティング
- APIリクエストは債よりのCloudFront POP(Point Pf Presence)にルーティング
- CloudFrontは、リクエストをオリジンに転送する前に、Cookie名の自然な順序でHTTP Cookieを並べ替える
リージョナルAPIエンドポイント
プライベートAPIエンドポイント
- VPC内のクライアントに最適なルーティング
- VPCからしかアクセスできないAPIエンドポイント
- インターフェースVPCエンドポイントにはVPC内に作成するエンドポイントインターインターフェースを利用
- リソースポリシーを利用し、アクセス制御が可能
キャッシュ機能の利用
APIのリソースのパフォーマンス向上の1つにキャッシュ機能の利用があります。
キャッシュ機能はエンドポイントへの呼び出しの数を減らしてAPIリクエストのレイテンシーを短くすることが可能です。
以下はキャッシュのTTLの設定に関する内容です。
スロットリングの利用
APIのリソースのパフォーマンス向上のもう1つにスロットリングの利用があります。
スロットリングとは、リクエスト数が多すぎる場合に制限をかけることで、トラフィック急増に対しバックエンドサービスを守ることが可能です。
以下はスロットリング制限が可能な方法になります。
サーバー側のスロットリング制限
クラアントあたりのスロットリング制限
- クライアントごとに「使用量プラン」に応じて制限を実施
- 特定のユーザーからのリクエストが多い場合は有効
API Gatewayの認証方式
API Gatewayへのアクセス認証は、以下のように様々なタイプを利用可能です。
リソースポリシー(REST APIのみ)
IAM認証
Lambdaオーソライザー
- Lambda関数を作成することで、認証プロバイダーでの認証結果をもとにAPIへのアクセス制限をメソッド単位で実施
Cognitoオーソライザー
- 認証プロバイダとしてCognitoユーザープールを用いて、APIへのアクセス制御をメソッド単位で実施
今回のテーマは以上です。