fck-natでAWS利用費を節約してみた
はい、どーも!DIGITALJETの吉田です。
通常、AWSのプライベートサブネットからのインターネットアクセスにはNAT Gatewayを使います。ただ、NAT Gatewayは意外とコストがかかることも、よく知られていると思います。
本番環境では仕方ないとしても、開発環境や、ましてや個人開発の場合だと、このNAT Gatewayのコストは大きいです。
そこで fck-natというものを使ってコストを節約してみたいと思います。
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.0042Per 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の構成を書いてみました。
おおまかな構成としては以下の通りです。
- 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インスタンス経由でインターネットアクセスできているか確認する
- NATインスタンス
cdk.json
に対象のAWSアカウントとリージョンを指定して
$ cdk deploy
としてデプロイします。
NATインスタンス経由でインターネットアクセスできているか確認する
それでは、先のCDKで作ったテスト用インスタンスにSession Managerで接続してみましょう。
その後
$ curl checkip.amazonaws.com
などとアクセスして、自身のグローバルIPが返ってくれば、NATインスタンス経由でインターネットアクセスできています。
ちなみにこのグローバルIPは、NATインスタンスのパブリックIPと同じになっているはずですね。これはNAT Gatewayでの同様です。
Discussion