プライベートサブネットのアプリケーションが外部と通信するために NAT Gateway を置くと、時間課金とデータ処理料金が発生します。トラフィックが少ない環境では、通信量よりも稼働時間の固定費のほうが大きくなりがちです。
fck-nat という選択肢
fck-nat は、Graviton の小さな EC2 インスタンスで動かせる NAT インスタンス用の AMI です。小規模な環境であれば、NAT Gateway に比べて固定費を大きく下げられます。
送信元 IP を固定したまま運用する
取引先の API が IP アドレスで接続元を制限している場合、NAT を置き換えても送信元 IP は変えられません。Elastic IP を割り当てたネットワークインターフェースを固定し、インスタンスが入れ替わっても同じインターフェースを付け直す構成にします。
module "fck_nat" {
source = "RaJiska/fck-nat/aws"
name = "app-nat"
vpc_id = aws_vpc.main.id
subnet_id = aws_subnet.public_a.id
instance_type = "t4g.nano"
ha_mode = true # auto scaling group で自動復旧
eip_allocation_ids = [aws_eip.nat.allocation_id]
update_route_tables = true
route_tables_ids = { private = aws_route_table.private.id }
}導入前に確認すること
- 単一インスタンスのため、障害時は自動復旧までの数分間、外部通信が止まる
- 大量のデータを扱う環境では、インスタンスのネットワーク帯域が上限にならないか確認する
- OS とパッケージの更新は自分たちで計画的に行う必要がある
本番の重要な通信は NAT Gateway のまま、開発・検証環境から置き換えるなど、環境ごとに使い分けるのも有効です。