💴

fck-natでAWS利用費を節約してみた

2024/02/27に公開

はい、どーも!DIGITALJETの吉田です。

通常、AWSのプライベートサブネットからのインターネットアクセスにはNAT Gatewayを使います。ただ、NAT Gatewayは意外とコストがかかることも、よく知られていると思います。

本番環境では仕方ないとしても、開発環境や、ましてや個人開発の場合だと、このNAT Gatewayのコストは大きいです。

そこで fck-natというものを使ってコストを節約してみたいと思います。

https://fck-nat.dev/stable/

fck-natはARMアーキテクチャのCPUで動くNATインスタンスです。

NATインスタンスは、かつてまだAWSにNAT Gatewayがない時代に使われていたものです。今はマネージドサービスであるNAT Gatewayを使うことが一般的ですが、敢えてNATインスタンスを利用費の安いARMアーキテクチャのCPUで使うことで、低コストでNATインスタンスを動かすことができます。

fck-nat公式から引用すると・・・

Hourly rates:
Managed NAT Gateway hourly: $0.045
t4g.nano hourly: $0.0042

Per GB rates:
Managed NAT Gateway per GB: $0.045
fck-nat per GB: $0.00

このように、NAT Gatewayを使った場合の約10%程度のコストで、運用できることがわかります。

また、AMI形式でも提供されているので、AWS上で簡単に利用することができます。

fck-natでNATインスタンスを立ててみる

それでは早速fck-natを使って、NATインスタンスを立てて見たいと思います。

今回はCDKを使って、NATインスタンスを使ったVPCの構成を書いてみました。

https://github.com/zephiransas/fck-nat-cdk

おおまかな構成としては以下の通りです。

  • VPC
    • NAT Gatewayはつくらない
    • サブネットはパブリックサブネットとプライベートサブネットの2つ
    • ただし、プライベートサブネットはNAT GatewayへのRouteがないので、実質Isolatedなサブネット
    • プライベートサブネットのEC2にSession Managerで接続したいので必要なEndpointを作成
  • EC2
    • NATインスタンス
      • fck-nat のAMIを使い、ARMアーキテクチャのEC2(今回は t4g.nano)を使う
      • 送信先チェックはしない
    • テスト用インスタンス
      • プライベートサブネットに作成
      • Session Managerで接続できるようにする
        • インスタンスロールには AmazonSSMManagedInstanceCore をアタッチする
      • このインスタンスから、NATインスタンス経由でインターネットアクセスできているか確認する

cdk.json に対象のAWSアカウントとリージョンを指定して

$ cdk deploy

としてデプロイします。

NATインスタンス経由でインターネットアクセスできているか確認する

それでは、先のCDKで作ったテスト用インスタンスにSession Managerで接続してみましょう。

その後

$ curl checkip.amazonaws.com

などとアクセスして、自身のグローバルIPが返ってくれば、NATインスタンス経由でインターネットアクセスできています。
ちなみにこのグローバルIPは、NATインスタンスのパブリックIPと同じになっているはずですね。これはNAT Gatewayでの同様です。

GitHubで編集を提案

Discussion