知れば納得!HTTP API と REST API の VPC リンクは違うんやで。

HTTP API の VPC リンクは無料だった!
2020.03.19

前回、HTTP API でプライベート統合を利用して、プライベートサブネット内の Fargate API をコールする記事を書きました。

プライベート統合を利用するには「VPC リンク」が必要となりますが、この VPC リンクについて HTTP API と REST API で異なる点があるので、記事にまとめました。

主な違いは、以下の 3 点です。

ターゲットサービスの違い

REST API と HTTP API は VPC リンクを介してプライベート統合を実装しますが、各 VPC リンクのターゲットとして指定できるサービスは異なります。

タイプ VPC リンクのターゲット
REST API NLB
HTTP API NLB
ALB
Cloud Map

AWS WAF

HTTP API は WAF に対応していませんので API Gateway 側では AWS WAF を利用出来ませんが、ターゲットが ALB の場合は ALB に AWS WAF を実装することが出来ます。

ELB のログ

NLB の場合、TLS 通信しかログを取得できません。また、NLB と ALB では取得できるログの内容が異なりますので、ALB が選択できることが嬉しい場合もありそうです。

HTTP API の VPC リンクは無料!

REST API

REST API の場合、VPC リンクの実態は Private Link となっており、以下のように自動的に Endpoint Service が作成されています。

そのため、REST API の VPC リンクには Private Link として料金が発生します。(執筆時点の東京リージョン料金)

項目 料金
VPC エンドポイント料金 $0.014/時間
データ処理料金(双方向) $$0.01/GB

HTTP API

次に、HTTP API の場合ですが、VPC リンクの実態は ENI です。

ENI は作成しても追加費用はありませんし、データ処理料金の発生もありません!(AZ 間通信などの通常料金は発生します)

REST API の構成図(例)

REST API の場合、Private Link による接続ですので、API Gateway 側の ENI は VPC 外ということになります。

HTTP API の構成図(例)

HTTP API の場合、API Gateway の基盤ネットワークからターゲットの VPC 内に ENI で延伸することになります。

図を見て解るとおり、HTTP API の各ターゲットリソースとして許可するのは VPC 内に伸びてきた ENI からの通信になります。よって、VPC リンクにアタッチされているセキュリティグループや、サブネットの CIDR を許可すると良いでしょう。

注意!自動的に INACTIVE される

HTTP API の VPC リンクは 60 日間トラフィックが無い状態が続くと、自動的に INACTIVE になり ENI が削除されます。

API リクエストが再開すると再プロビジョニングされますが、再度 ACTIVE になるまで数分かかる場合がある、と公式ガイドに記述されています。

おそらく再 ACTIVE になるまでのリクエストはエラーになるでしょうから、クライアント側でリトライ処理があると良いでしょう。もしくは INACTIVE を回避するために定期的にトラフィックを流す、ということも考えられます。

そもそも 60 日間トラフィックが流れていない状態が対象ですし、インパクトの高い処理を実行しているとは考えにくいのでエラーを受け入れて再実行、でも良い場合が多いかもしれません。

どういった用途で利用されるかによって、どこまでの対処を実装するか検討ください。

VPC リンクステータスの確認

以下のコマンドで VPC リンクステータスの確認は出来ますので、VpcLinkStatus の値を監視してイベントをトリガーすることも可能でしょう。

$ aws apigatewayv2 get-vpc-link --vpc-link-id tg4tdf
CreatedDate: '2020-03-18T08:51:48+00:00'
Name: http-link
SecurityGroupIds:
- sg-09c2a9afd999210c2
SubnetIds:
- subnet-xxxxxxxx
- subnet-xxxxxxxx
Tags: {}
VpcLinkId: tg4tdf
VpcLinkStatus: AVAILABLE
VpcLinkStatusMessage: VPC link is ready to route traffic
VpcLinkVersion: V2

さいごに

同じ「VPC リンク」という呼び名でも、REST API と HTTP API では実態が 「Private Link」 と 「ENI による延伸」 という違いがあることが解りました。

この事実を理解していると、「料金」や「サポートされるターゲットサービス」などが異なっているという点も納得できますね!

プライベート統合を検討される際の参考にしていただければと思います!

以上!大阪オフィスの丸毛(@marumo1981)でした!