NAT GatawayからNAT インスタンスに乗り換えて約95%のコスト削減をしてみた

この記事は、ギークフィードアドベントカレンダー 2024の25日目の記事となります。

 

こんにちは、櫻井です。

 

さっそくですが、NAT Gatewayを1ヶ月間利用した際の大体の価格を存知でしょうか。

NAT Gatawayをプロビジョニングしただけでおよそ *a 6700円程度の支払いが必要になります。

 

また、処理データ1GBあたりにも$0.062加算されるので、仮に100GBの処理を行った場合

追加で *b 930円の支払いが必要になります。

 

合計すると、7630円もかかります。

 

本番環境で利用するならいざしらず、開発環境でNAT Gatewayを当たり前のようにプロビジョニングしていたら馬鹿にならない価格になってしまいますね。

もし8000円弱かかっていたコストを400円程度に抑えることができれば、だいぶお財布に優しくなると思います。

 

ということで今回は、開発環境用で利用するNATインスタンスを構築して、最大20分の1程度のコストカット出来る方法を紹介します。

※a 10.062(NatGatawayの1時間あたりの料金/$) * 24 (時間)*  30(日) * 150(為替相場)で計算

※b 0.062(NatGatawayのデータ処理1GBあたりの料金/$)  * 100(GB) * 150(為替相場)で計算

 

NATインスタンスの料金体系

NATインスタンスのコストは

・EC2インスタンスの使用料

・EBSの使用料

・パブリックIPの使用料

の3つからなります。

 

EC2インスタンスの価格

EC2の使用料はインスタンスタイプとインスタンスサイズによって変わります。ここでは低価格で利用できるインスタンスをピックアップしています。

インスタンス名 オンデマンドの時間単価
t4g.nano USD 0.0042
t4g.micro USD 0.0084
t4g.small USD 0.0168

EC2の価格について詳しく知りたい方は公式ドキュメントを参照してください。

 

EBSの価格

EBSの使用料もEBSの種類によって変わります。

汎用 SSD (gp3) – ストレージの場合、1ヶ月あたりUSD 0.096/GBが課金されます。

 

EBSの価格について詳しく知りたい方は公式ドキュメントを参照してください。

 

パブリックIPアドレスの価格

パブリック IPv4 アドレスは 1 時間あたり0.005 USDが課金されます。

 

パブリックIPv4アドレスの価格について詳しく知りたい方は公式ドキュメントを参照してください。

 

一番安く運用した場合のコスト

・EC2: t4g.nano

・EBS: 汎用 SSD (gp3) 8GB

・パブリックIPv4アドレス

を利用した際の24時間起動し続けた場合の価格と、業務時間中のみ起動した場合の価格について見ていきます。

 

24時間起動した場合の月あたりのコスト

EC2(t4g.nano):0.0042 USD × 24時間 × 30日 = 3.024 USD

EBS(汎用 SSD  gp3,  8GB):0.096 USD × 8GB = 0.768 USD

パブリックIPv4: 0.005 USD × 24時間 × 30日 = 3.6 USD

 

日本円に換算すると(為替相場150円で計算)

(3.024 + 0.768 + 3.6)* 150 = 1108円 かかることがわかりました。

 

業務時間中のみ起動した場合の月あたりのコスト

EC2は平日の9:00 – 19:00まで起動しているとすると

EC2(t4g.nano):0.0042 USD × 10時間 × 21日 = 0.882 USD

EBS(汎用 SSD  gp3,  8GB):0.096 USD × 8GB = 0.768 USD

パブリックIPv4: 0.005 USD × 10時間 × 21日 = 1.05 USD

 

日本円に換算すると(為替相場150円で計算)

(0.882 + 0.768 + 1.05)* 150 = 405円 かかることがわかりました。

 

NAT Gatawayを1ヶ月利用すると7630円かかり

NATインスタンスを営業時間中のみ1ヶ月間利用した場合は405円 なので、

最大 7630 – 405 = 7225円のコストカットが出来ることがわかります。

 

 

NAT GatewayとNAT インスタンスの違い

では、NAT Gateway とNATインスタンスではどのような違いがあるかを見比べていきます。

結論からいうと、今から比較を行った際に挙がるNATインスタンスのデメリットにより、

本番環境にNATインスタンスを利用することはあまりおすすめしません。

ただし、検証環境で利用する分には十分だと思います。

 

可用性・信頼性

NAT Gateway

・自動的にフェイルオーバーを行う

・複数AZで冗長化が行われている

・AWSによって管理されており、ユーザー側でメンテナンスが不要

 

NATインスタンス

・単一のEC2で動作する場合、単一障害点になる

・高可用性を実現したい場合は、複数のインスタンスの監視とフェイルオーバーの仕組みを構築する必要がある

 

パフォーマンス

NAT Gateway

・最大100 Gbps まで拡張できる

・トラフィックに応じて自動的に拡張する

 

NATインスタンス

・インスタンスタイプに依存する

・スケールアップを行いたい場合は手動でインスタンスタイプを変更する必要がある

 

コスト

NAT Gateway

・NAT Gatewayの稼働時間と、処理データ量に基づいて課金

・高価

 

NATインスタンス

・EC2インスタンスとEBSとパブリックIPの利用に基づいて課金

・小さいサイズのインスタンスを利用することで安価になる

 

管理の手間・セキュリティー

NAT Gateway

・AWSによって管理される

・パッチ適用やメンテナンスが不要

・セットアップが簡単

 

NATインスタンス

・OSのアップデートやセキュリティーパッチの適用が必要

・設定やトラブルシュートの知識が必要

・セキュリティーグループの管理が必要

 

以上のことからNATインスタンスを利用した場合、価格を抑えることが出来る反面、本番環境での運用に耐えうる構成を作ろうとすると考えなくてはいけない項目が多くなってしまいます。

よって、本番環境では利用せず、開発環境のみで利用することを推奨します。

 

NATインスタンスを構築するためのテンプレートを作成する

ここからはNATインスタンスを構築していきます。

今後AWS Service Catalogを利用して複数アカウントに展開できるようにCloud Formation(以下Cfn) テンプレートを作成しました。

 

以下が全体像です。

 

 

では、各セクションについて解説していきます。

 

パラメータセクション

こちらはCfnテンプレートからリソースを作成するタイミングで値を設定したい項目です。

作成する毎に異なる値を利用したい内容は、パラメータとして設定することで変数化することができます。

 

 

VpcId:NATインスタンスを配置するVPCを選択できるようにします。

PubicSubnetId:NATインスタンスを配置するサブネットを選択できるようにします。

PrivateRouteTableId:NAT経由でインターネットアクセスするサブネットのルートテーブルを入力できるようにします。

KeyPairName:SSH接続用のキーペアを選択できるようにします。

InstanceType:インスタンスタイプを選択できるようにします。

 

リソースセクション

ここでは、Cfnテンプレートから作成するリソースを定義します。

 

セキュリティーグループ

  • NATインスタンス用のセキュリティグループを作成
  • すべてのインバウンド/アウトバウンドトラフィックを許可

をおこなっています。

IAMロールとインスタンスプロファイル

  • EC2インスタンス用のIAMロールの作成
  • IAMロールに対して Systems Manager接続用のポリシーを付与(セッションマネージャー越しにEC2に接続する際に利用します)
  • IAMロールをEC2のインスタンスプロファイルとして設定

をおこなっています。

 

NATインスタンス

  • パブリックIPの自動割り当て
  • Source/Destination Checkの無効化(NAT機能に必要)
  • gp3タイプのEBSボリューム設定
  • UserData
    • インスタンス起動時に実行されるスクリプトで、NAT機能の設定を自動化

 

ルート設定

  • プライベートサブネットからのインターネット向けトラフィックをNATインスタンスにルーティング

 

次は作成したCfnテンプレートを使用して、実際にリソースを起動していきます。

 

Cfnテンプレートを利用してリソースを起動する

AWSコンソールにログインを行いCloudFormationのページに移動して、”スタックの作成” → “新しいリソースを使用(標準)”をクリックします。

 

 

テンプレートの指定で”テンプレートファイルのアップロード”を選択して、先ほど作成したCfnテンプレートをアップロードします。

 

スタック名:任意の名前

InstanceType:起動するEC2インスタンスのタイプを選択します

KeyPairName:EC2に設定するキーペアを選択します

PrivateRouteTableId:NAT経由でインターネットアクセスするサブネットのルートテーブルを入力します

PublicSubnetId:NATインスタンスを配置するサブネットを選択します

VpcId:NATインスタンスを配置するサブネットがあるVPCを選択します

 

上記の項目を入力したら”次へ”をクリックします。

 

 

“AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。”のチェックボックスにチェックを入れて “次へ”をクリックします。

 

 

入力した項目に間違いがないことを確認したら”送信”をクリックします。

 

NATインスタンスを利用してインターネットにアクセスする

では最後に起動したNATインスタンスを利用してインターネットにアクセスできるかを検証していきます。

 

先ほどPrivateRouteTableIdで指定したRouteTableに紐づいているプライベートサブネットにEC2インスタンスを起動します。

※EC2インスタンスの起動方法については省略します。

 

起動が完了したらEC2にログインを行い、疎通確認を行います。

 

疎通が確認できました。

 

まとめ

弊社では、各社員に対してSandbox環境のAWSアカウントを1つずつ配布しているので、Sandbox環境だけでも30個近くのアカウントを保有しています。

もし仮に各SandboxアカウントがすべてNAT Gatewayを使った場合、1ヶ月あたり

30アカウント * 7630円 = 228900円も課金されてしまいます。

こちらをすべてNATインスタンスに置き換えた場合、

228900 –  (30 * 400) = 216900円もの節約ができることがわかります。おおきいですね。

 

ということでありがとうございました!

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
櫻井
櫻井
2022年3月にギークフィードに入社。 エンジニア完全未経験からSAP・SAAを三週間で取得することが出来ました。そのためAWSに関することを中心に記事を作成する予定です。 自分が初心者だからこそわかる、エンジニア未経験の方や、エンジニアを始めたばかりの方の躓きポイントをうまく説明できるように頑張ります。

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ