Amazon API Gatewayのプライベート統合をHTTP・RESTそれぞれでやってみた
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のため、その費用も発生します。
セキュリティグループの設定
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型の機能比較だけでなく、システム全体の構成の違いも十分に検討しましょう。
それでは。