AWSにおけるグローバルIPの固定について(ALB利用時)

こんにちは、インフラの天津です。

今日はAWSにおけるIP固定化の手法と選択について書きたいと思います。

きっかけ

先日、社内のとあるALBを使用しているサービスでグローバルIPを固定化する必要が出てきました。

その際に固定化の手法がまとまっていると今後迷わないなと思い、記録がてらブログを書こうと思いました。

先に結論

要件によってどの方式がFitするか変わります。

下記に表を作成してみましたので参考になさってください。

個人的なおすすめはGlobal Acceleratorです。

公式ドキュメントにもユースケースとしても下記の通り紹介されています。

AWS Global Accelerator では、ロードバランサーや EC2 インスタンスといったリージョナルリソースを 2 つの静的 IP アドレスに関連付けることができます。これらのアドレスを、クライアントアプリケーション、ファイアウォール、DNS レコードでホワイトリストに 1 度限り追加します。AWS Global Accelerator を使用すると、AWS リージョン内のエンドポイントを追加したり削除したりできます。

IPを固定化する手法

AWSにおけるIPの固定化は下記の方法があります。

  • Global Accelerator + ALB
  • NLB
  • 自作LoadBalancer(EC2(Elastic IP使用)) + nginxなど)
  • EC2 単体(Elastic IP使用)

各手法の比較

表にまとめてみました。

料金・コスト

各料金・コストはALB + EC2のパターンに比べてのものです。

プラン 固定IP 料金 構築コスト 運用コスト
1 Global Accelerator + ALB Global Acceleratorが提供 中~大
Global Acceleratorが追加
2 NLB Elastic IP
NLB使用料金のみ
3 NLB + ALB Elastic IP
NLBが追加
4 NLB + 内部自作LB(L7)(EC2 + nginxなど) Elastic IP 中〜大
EC2のスケールに応じて料金増
5 自作LB(L7)
(EC2(Elastic IP使用)) + nginxなど)
Elastic IP 中〜大
EC2のスケールに応じて料金増
6 EC2 単体(Elastic IP使用) Elastic IP
ALBが取り除かれるため料金低下

制限事項・考慮事項など

次に制限事項や考慮事項です。

プランごとにできないことや考慮しないといけないことが見えてきます。

プラン 制限・考慮事項 備考
1 Global Accelerator + ALB - 特になし
(以前の懸念であったClient IPも保持可能になった)
例)1TBの通信量
$28(使用料 $18 + 通信料 $10)/月程度
2 NLB - L4のLBであるため下記のようなL7の機能が使用できない
- X-forwarded-Protoが付与できない
- http->httpsリダイレクトが使用できない
3 NLB + ALB - NLBのターゲットグループとしてALBが追加されるため、ALBの動的変化に追随するLambdaを組む必要がある AWS Blog - Application Load Balancerに静的IPアドレスを使用する| ネットワーキングとコンテンツ配信
4 NLB + 内部自作LB(L7)(EC2 + nginxなど) - NLBのターゲットグループとしてEC2が追加されるため、ALBの動的変化に追随するLambdaを組む必要がある
- 自作LBのオートスケール構築やサーバ管理が必要
- バックエンドサーバのオートスケール時の自作設定変更対応が必要
5 自作LB(L7)
(EC2(Elastic IP使用)) + nginxなど)
- AWS WAFやACMによるSSL終端などALB・ELBで使用できる機能は使用できない
- 自作LBのオートスケール構築やサーバ管理が必要
- SSL終端のための証明書管理が必要
- バックエンドサーバのオートスケール時の自作LB設定変更対応が必要
6 EC2 単体(Elastic IP使用) - スケール不可能
- AWS WAFやACMによるSSL終端などALB・ELBで使用できる機能は使用できない
- SSL終端のための証明書管理が必要

では何を選ぶべきなのか?

観点として大きいのは料金かと思いますがもちろん要素はそれだけではありません。

個人的には下記の基準で選択していくかなと思います。

  • 料金が許容できる場合: Global Accelerator + ALB
  • トラフィックが多くWAFなど不要でL4 LBで対応可能: NLB
  • シングルサーバで要求される可用性が低い場合:EC2 単体(Elastic IP使用)

それ以外は多段構成、自作となるため、構成が複雑で運用が難しくなると考えられるためあまりおすすめできません。

終わりに

Global AcceleratorのClient IP保持機能があることでALBに後付けするだけでIP固定化できるのは非常に便利だなと感じています。

ちなみに、きっかとなったIP固定化作業では当初NLBで固定化することを考えていました。

しかし、バックエンドアプリケーションにてx-forwarded-protoヘッダが必須であったためGlobal Accelerator + ALBを採用しています。
(結果的にGlobal Acceleratorを採用してよかったと感じています)

今回は以上になります。

AWSでのグローバルIPの固定にしようと思う人に、本記事が参考になれば幸いです。

最後までお読みいただきありがとうございました。