Fargateコンテナの利用するPublic IPアドレスを固定する

AWS運用自動化サービス「Cloud Automator」

こんにちは!
AWSをこよなく愛す技術4課の山本(通称ヤマゾン)です
昨日は実質9.1時間くらい寝ました

Fargateコンテナの利用するPublic IPアドレスを固定する

以下のような前提があり、Fargateコンテナの利用するPublic IPアドレスを固定することにしました

  • 前提条件
    • Fargateのコンテナから実行する外部API側にファイアウォールがあり、特定のIPアドレスからの接続を許可する仕様となっている

しかし、FargateのコンテナにPublic IPアドレスを割り当てる場合、「自動割当」になるため、IPアドレスを固定することは出来ません
そこで、FargateコンテナをPrivateサブネットに配置し、NAT ゲートウェイを利用することにより、IPアドレスを固定化することにしました

NAT ゲートウェイごとに 1 つだけの Elastic IP アドレスを関連付けることができます。作成後に NAT ゲートウェイから Elastic IP アドレスの関連付けを解除することはできません。NAT ゲートウェイで別の Elastic IP アドレスを使用するには、新しい NAT ゲートウェイを作成してそのアドレスを関連付け、ルートテーブルを更新します。

参考:NAT ゲートウェイ

構成図

  • NATゲートウェイ用パブリックサブネット(AZ-a)
    • 10.0.6.0/26
  • Fargate用プライベートサブネット(AZ-a)
    • 10.0.6.64/26
  • NATゲートウェイ用パブリックサブネット(AZ-c)
    • 10.0.7.0/26
  • Fargate用プライベートサブネット(AZ-c)
    • 10.0.7.64/26

冗長性を持たせるため、NAT ゲートウェイは Fargate コンテナのあるサブネット毎に1つ作成し (図の場合2つ) 、NAT ゲートウェイの持つIPアドレス(図の場合、合計2つ) を、外部API側で許可してもらうようにしました

NATゲートウェイのサポートする帯域幅

  • 以下を見る限り問題なさそうです

NAT ゲートウェイは 5 Gbps の帯域幅をサポートし、45 Gbps まで自動的に拡張します。これ以上必要な場合は、リソースを分割して複数のサブネットに配置し、サブネットごとに NAT ゲートウェイを作成することで、ワークロードを分散できます。

参考:NAT ゲートウェイ

注意点

  • 実際のユースケースに近い方法で負荷試験をしましょう
    • 外部API側で負荷試験を許可していない場合もあるので、事前に確認を取りましょう
      • 外部API側で負荷試験用のエンドポイントを用意してくださっていることもあります
    • 外部API側が過負荷になった際の挙動を把握し、事前に対処できるように実装しましょう

補足

  • Fargate、NATゲートウェイを構築するための情報は多くあるため、実際の構築手順等は割愛しました
  • 弊社内で確認してみたところ、同じ構成で運用している事例も、複数あるようで、問題なく運用しているとのことです

まとめ

Fargateコンテナの利用するPublic IPアドレスを固定する際に、NAT ゲートウェイは有効な解決策となりそうです

また新しい方法や知識を見つけたら共有します!
それでは皆様、良いFargateライフを〜♪

AWS運用自動化サービス「Cloud Automator」