知れば納得!HTTP API と REST API の VPC リンクは違うんやで。
前回、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)でした!