前提
プライベートサブネット内にECS Fargateでアプリケーションがホスティングされており、その前段にALB (Internal)が配置されている構成があるとします。
普段はALBを通してVPC内のサービスからECSのアプリケーションへ疎通するようにしていますが、VPC外のリソースからアプリケーションに通信したいケースが出てきました。
その際、ALBの前段にAPI Gatewayを構築することにしたのですが、HTTP APIとREST API、どちらを採用するか、今回比較した上で検討してみたいと思います!
ECS Fargateとの統合
API Gatewayの統合機能を用いてECS Fargateと接続する場合、間にVPCリンクを挟む必要があります。
REST API, HTTP APIではVPCリンクの仕様が異なるため、Fargateと接続する際の構成も異なります。
HTTP API
HTTP APIで提供されるプライベート統合では、VPCリンク経由でALBに接続可能。
REST API
REST APIにおいては、VPCリンクのターゲットとしてサポートされているのがNLBのみのため、VPCリンク -> NLB -> ALB(Internal) -> ECS といった構成となり、ALBの前段にNLBを挟む構成になります。
セキュリティ周り
WAF / WebACL
HTTP APIではWeb ACLをアタッチすることができない(2024/12現在)
HTTP APIを採用した上でWAFを利用したい場合は、前段にCloudFrontを置く構成にして、CloudFrontにWeb ACLをアタッチすると良いでしょう。
参考
Authorizer / Resource Policy
REST APIと同様, Cognito, IAM, Lambda関数を用いたAuthorizerの設定ができる。
しかしリソースポリシーは利用不可
例えばIP制限を行いたい場合、リソースポリシーの代わりに以下の手段を用いると良いでしょう。
- 前段にCloudFrontを置く構成にして、WAFによるアクセス制限を行う
- Lambda関数によるAuthorizerで送信元IPによるアクセス制御を行う
相互TLS認証
mTLSとはMutual Transport Layer Security (相互トランスポート層セキュリティ)の略称で、さらに、略して「相互TLS認証」と言います。クライアントとサーバーの両方が互いに証明書を利用して認証することで、セキュアに認証できる方式のことを指します。
REST API, HTTP APIともに相互TLS認証が利用可能です。
コスト面
東京リージョンでの料金
HTTP API
リクエスト数(月間) | 料金 |
---|---|
最初の 3 億 | USD 1.29 |
3 億以上 | USD 1.18 |
REST API
リクエスト数(月間) | 料金 |
---|---|
最初の 3 億 3,300 万 | USD 4.25 |
次の 6 億 6,700 万 | USD 3.53 |
次の 190 億 | USD 3.00 |
200 億以上 | USD 1.91 |
HTTP APIを用いる場合の方が基本的にコストが低い
また、VPC内のFargateと統合するという前提であれば、HTTP APIを採用すればNLBを配置するコストも削減できます。
VPC Linkの料金
REST APIとHTTP APIではVPC Linkの仕様も異なり、RESTの場合はVPCエンドポイント(Interface), HTTPの場合はENIがVPCリンクの実態となっております。
VPCエンドポイントは1時間あたり0.014 USDの料金と、データ処理で1GBあたり0.01 USDが発生しますが、ENI自体には料金が発生しません。
そのため、VPCリンクに関してもHTTP APIの方が安くつくということになります。
HTTP APIのVPCリンクは60日間トラフィックがないとENIが削除される仕様となっているので、留意しておく必要があります。
参考
まとめ
設定項目のシンプルさ・コスト効率の良さという観点ではHTTP APIを採用した方が良さそうに見えます。
また、HTTP APIのVPCリンクはREST APIと異なり、ALBもターゲットとして設定できるのでHTTP APIを採用することで余分にNLBを立てる必要もなくなるでしょう。
しかし、WAFのWeb ACLを直接アタッチできない, リソースポリシーによるアクセス制御に対応してないといった部分もあるので、要件によってはREST APIを選択した方が良い場合もあるでしょう。