おっさん社内SEエンジニアの勉強ブログ

勉強記録のブログとなります。

SAA学習-サーバレス-API GateWayの概要

API Gatewayの仕組み

f:id:In-houseSE:20211017115511p:plain

公式サイトのURL:

aws.amazon.com

今回テーマ:API GateWayの概要

APIとは

API(Application programming interface)は、システムとシステムをつなぐ連結器となります。
概略図は以下のようになります。

f:id:In-houseSE:20220412081939p:plain

また、APIを通してリクエスト/レスポンス通信により、他のサービスの機能やデータを呼び出すことが可能です。
なお、一般的には以下のよう扱いとなります。

APIの活用

APIの活用として、自社アプリ・サービスをAPI化し連携を目指す方式とAPI化された他社アプリ・サービスを活用する方式があります。 各々の概要について以下ようになります。

自社アプリ・サービスを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を連携口とし外部アプリとの連携を実現します。
簡易構成は以下のようなものがあります。

f:id:In-houseSE:20220412082004p:plain

AWSにおけるAPI提供

一般的なアプリケーションの開発ではELB経由でAPIを提供します。

f:id:In-houseSE:20220412080615p:plain

API GatewayはLambda関数を主とした簡易アプリケーション用のAPI提供に特化します。

f:id:In-houseSE:20220412081608p:plain

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 GatewayAPIメソッドを作成し、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

プライベート統合

  • VPC外のクライアントからVPC内にあるHTTP/HTTPSリソースにアクセスするために利用する統合方式
  • API Gatewayがサポートする認証方式よりAPIへのアクセスを制御

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を呼び出す場合、リージョン別APIは接続のオーバーヘッドを減らすことが可能
  • CloudFrontを利用することも可能

プライベートAPIエンドポイント

  • VPC内のクライアントに最適なルーティング
  • VPCからしかアクセスできないAPIエンドポイント
  • インターフェースVPCエンドポイントにはVPC内に作成するエンドポイントインターインターフェースを利用
  • リソースポリシーを利用し、アクセス制御が可能

キャッシュ機能の利用

APIのリソースのパフォーマンス向上の1つにキャッシュ機能の利用があります。
キャッシュ機能はエンドポイントへの呼び出しの数を減らしてAPIリクエストのレイテンシーを短くすることが可能です。
以下はキャッシュのTTLの設定に関する内容です。

  • デフォルトのTTLは300秒
  • 最大TTL値は3600秒
  • TTL=0はキャッシュを無効化

ロットリングの利用

APIのリソースのパフォーマンス向上のもう1つにスロットリングの利用があります。
ロットリングとは、リクエスト数が多すぎる場合に制限をかけることで、トラフィック急増に対しバックエンドサービスを守ることが可能です。
以下はスロットリング制限が可能な方法になります。

サーバー側のスロットリング制限

  • すべてのクライアントに対するリクエストを制限
  • 全体のリクエストが多すぎるため、バックエンドサービスが処理しきれなくなることを防ぐことが可能

クラアントあたりのスロットリング制限

  • クライアントごとに「使用量プラン」に応じて制限を実施
  • 特定のユーザーからのリクエストが多い場合は有効

API Gatewayの認証方式

API Gatewayへのアクセス認証は、以下のように様々なタイプを利用可能です。

リソースポリシー(REST APIのみ)

  • JSON形式のリソースポリシーを定義
  • 他のリソースからAPI Gatewayへのアクションの許可または拒否を設定

IAM認証

  • APIのアクセス制限を設定したIAMポリシーを作成
  • IAMユーザーやIAMロールに付与し、APIへのアクセスを制限
  • APIメソッドでIAM認証を有効化

Lambdaオーソライザー

  • Lambda関数を作成することで、認証プロバイダーでの認証結果をもとにAPIへのアクセス制限をメソッド単位で実施

Cognitoオーソライザー

  • 認証プロバイダとしてCognitoユーザープールを用いて、APIへのアクセス制御をメソッド単位で実施

今回のテーマは以上です。