Amazon API Gatewayのプライベート統合をHTTP・RESTそれぞれでやってみた

Amazon API Gatewayをプライベート統合する場合、HTTP型とREST型で構成が大きくことなります。 HTTP型はVPC内にENIを作り、REST型はVPCエンドポイントサービスを作成します。
2022.01.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon API Gatewayにはプライベート統合という機能があり、VPC内のリソースをバックエンドとしてリクエストを処理できできます。

例えば、VPC内にあるALB+ECS FargateをAPI Gatewayのオリジンに設定できます。

ここで注意が必要です。

API GatewayはRESTとHTTPの2種類があり、どちらもVPCリンクを経由してVPCリソースと連携するという点では同じですが、 VPCリンクの実態や連携時の構成が大きく異なります。

この構成の違いを解説します。

前提

簡略化のため、VPC内ではALBでリクエストを処理するものとします。 ALB配下にはECS・Lambda・EC2など様々なリソースをターゲットに指定できます。

インターネットから直接ALBへアクセスすることが無いよう、インターナル型ALBで作成します。

API GatewayはRESTとHTTPのどっちを使う?

API Gatewayは REST型HTTP型 の2種類あります。

API Gatewayリリース時から存在するのが REST型 です。 API管理を含め、機能が豊富です。

一方で、低レイテンシーでコスト効率の高いのが後発の HTTP型 です。

ターゲット連携も豊富で、今回のプライベート統合の場合、ターゲットにALB/NLB/Cloud Mapと3つも指定できます。 プライベート統合以外にも、Lambdaはもちろんのこと、EventBridge、SQS、Step FunctionsなどAWSの様々なサービスとシームレスに統合できます。

この2つのAPI Gatewayの違いは、次のドキュメントにまとまっています。

API Gateway プライベート統合の設定 - Amazon API Gateway

どちらを選ぶかによって、プライベート統合の構成やその後の拡張構成が大きく異なります。

まずは、自分に必要なAPI Gatewayはどちらなのか、十分に比較検討を行ってください。

HTTP API Gatewayのプライベート統合

HTTP型API GatewayをVPCバックエンドとプライベート統合する場合、バックエンドのあるVPC内にelastic network interface(ENI)をVPCリンクとして作成し、 API GatewayはこのENI経由でバックエンドと通信します。

API GatewayのあるProvider側、バックエンドのあるConsumer側それぞれにENIが作成され、 この2つのVPC間はAWS HyperPlaneによってVPC-to-VPC NATでつながっています。

Understanding VPC links in Amazon API Gateway private integrations | AWS Compute Blog から

VPCリンクの作成

VPCリンク作成時には、ENIの

  • VPC
  • サブネット
  • セキュリティグループ

を指定します。

ここで指定するセキュリティグループは、バックエンドアクセス時のソースとなります。 専用のセキュリティグループを割り当てましょう。

各VPCに対してVPCリンクは一つあればよく、VPC内にバックエンドが複数ある場合、バックエンド間でVPCリンクを共有できます。

The VPC, the VPCs subnets, and the VPCs security groups for a given VPC link cannot be changed after creation.

https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vpc-links.html

ENI一覧には、説明が「ENI Managed by API Gateway」でPCリンク作成時に指定したセキュリティグループがあたっているENIを確認できます。

VPCリンクへのトラフィックが60日無いとENIは削除され、VPCリンクのステータスは AVAILABLE から INACTIVE に変わります。 次回トラフィック発生時にENIは再作成され、VPCリンクのステータスは数分で AVAILABLE に戻ります。

セキュリティグループの設定

HTTP API GatewayはVPCリンクで作成したENI経由でバックエンドにアクセスします。

バックエンドがALBの場合、ALBのセキュリティグループのインバウンドルールにおいて、VPCリンク(ENI)のセキュリティグループをソースとする通信を許可してください。

API Gatewayが管理するENI向けセキュリティグループのインバウンドルールを変更しても、アクセスコントロールに使えません。 インバウンドルールはブランクのままで問題ありません。

メソッドの連携

API Gatewayのメソッド連携時には

  • 統合タイプ :Private Resource
  • 統合詳細 : ターゲットのALB/Cloud Map

を指定します。

VPCリンクの指定は不要です。

REST API Gatewayのプライベート統合

REST型API GatewayをVPCバックエンドとプライベート統合する場合、VPCバックエンドを VPCエンドポイントサービス化(サービスプロバイダー) し、 API Gatewayはこのサービスの コンシューマー としてVPCエンドポイントから通信します。

Understanding VPC links in Amazon API Gateway private integrations | AWS Compute Blog から

VPCリンクの作成

準備としてバックエンドの前段にインターナルNLBを設置します。

VPCリンク作成時に、このNLBを指定し、NLBとそのターゲットを サービスプロバイダー にします。 VPCのエンドポイントサービス一覧にはこのNLBのエンドポイントサービスを確認できます。

このエンドポイントはインターフェース型のAWS PrivateLinkのため、その費用も発生します。

料金 - AWS PrivateLink | AWS

セキュリティグループの設定

NLBのENI経由でバックエンドにアクセスします。

NLBはセキュリティグループに対応していないため、バックエンドのセキュリティグループのインバウンドルールにおいて、NLBがあるサブネットをソースとする通信を許可してください。

メソッドの連携

API Gatewayのメソッド連携時には

  • 統合タイプ :VPCリンク
  • VPCリンク : 作成したREST型VPCリンク
  • エンドポイントURL : NLBのエンドポイント

を指定します。

まとめ

API Gatewayをプライベート統合する場合のHTTP型とREST型の違いをまとめます。

項目 HTTP REST
VPC Linkの実態 ENI サービスエンドポイント
VPC Linkの作成 VPCごとに一つ バックエンドごとに作成
構成の変更 無し バックエンドの前にNLBを設置
アクセスコントロール VPC Link用セキュリティグループからの通信を許可 NLBからの通信を許可
コスト 変化なし NLBとサービスエンドポイント(PrivateLink)の費用が発生

全く違いますね。

Amazon API Gatewayを評価する場合は、REST型とHTTP型の機能比較だけでなく、システム全体の構成の違いも十分に検討しましょう。

それでは。

参考