DEVELOPER’s BLOG

技術ブログ

AWS通信コストが高い...原因はNAT ゲートウェイ?70%削減した実例で分かる見直しポイント

2023.09.25 Mieri ITO
AWS SRE 利用事例
AWS通信コストが高い...原因はNAT ゲートウェイ?70%削減した実例で分かる見直しポイント

目次

  • 1.AWS通信コストが増加する背景と、NAT ゲートウェイが高額になりやすい理由
  • 2.AWS通信コストを押し上げる"NAT ゲートウェイ経由通信"の特定方法
  • 3.NAT ゲートウェイコストを削減するための対策
  • 4.VPCエンドポイント化によってコストを削減した結果


1.AWS通信コストが増加する背景と、NAT ゲートウェイが高額になりやすい理由

 AUCでは、SRE活動の一環として、AWSコストの適正化を行っています。
(技術ブログ『SRE:コスト抑制のための異常値検知機構の実装』)
コスト適正化における課題は、大きく分けて下記の4つです。

①コストは月末にチェックしており、月中でコストが急激に上昇した場合発見が遅れてしまう。
② 不要なリソースが放置されていたり、新たなリリースによって生じたコストを確認していない。
③ AWSが提供するベストプラクティスによるコスト適正化が行われていない。
④ コストに対する意識が薄い。

今回のブログでは、『③ AWSが提供するベストプラクティスによるコスト適正化が行われていない。』により発生していたコスト増加について行った、原因調査〜コスト削減までを記録します。

 対象となるサービスはNAT ゲートウェイです。直近1年間のコスト推移調査の結果、NAT ゲートウェイのコストが1年で約64%増加していることを検知しました。
NAT ゲートウェイの料金は時間単位料金とデータ処理料金の2つあります。

  • 時間単位料金:NAT ゲートウェイの利用時間に対して0.062USD/時 ※
  • データ処理料金:NAT ゲートウェイで処理されたデータ量に対して0.062USD/GB ※
    ※東京リージョンの場合(Amazon VPCの料金より)

NAT ゲートウェイ作成後、時間単位料金は一定のため、データ処理料金が増加しているであろうことが予測できます。
NAT ゲートウェイの通信先を特定し、NAT ゲートウェイを通す必要がないデータを通してしまっていないか調査します。


2.AWS通信コストを押し上げる"NAT ゲートウェイ経由通信"の特定方法

 VPCフローログを使用し、取得したログをCloudWatch Logs Insightで分析することでNAT ゲートウェイの通信先を特定します。

2-1. IAMポリシーの作成

 VPCフローログを作成する前に、VPCフローログがCloudWatch LogsにアクセスできるようにIAMポリシーを作成します。 「IAM>ポリシー>ポリシーを作成」を選択し、JSONに下記コードを記載、任意のポリシー名を付けてポリシーを作成します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Resource": "*"
    }
  ]
}   


2-2. IAMロールの作成

 1で作成したIAMポリシーをVPCフローログにアタッチするためのロールを作成します。
「IAM>ロール>ロールを作成」を選択し、信頼されたエンティティタイプで『カスタム信頼ポリシー』を選択して下記コードを記載します。

スクリーンショット 2023-08-16 14.43.37.png

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "vpc-flow-logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
} 


許可ポリシーは1で作成したポリシーを選択し、任意のロール名を付けてロールを作成します。 スクリーンショット 2023-08-16 14.44.32.png

2-3. CloudWatch Logs ロググループの作成

 VPCフローログのログを入れるためのロググループを作成します。
「CloudWatch>ロググループ>ロググループを作成」を選択し、任意のロググループ名を付けてロググループを作成します。

2-4. VPCフローログの作成

 VPCフローログを作成するための準備が整いましたので、いよいよフローログを作成します。
VPCフローログ自体には料金は発生しませんが、CloudWatch Logs側でデータ取り込み料金が発生するため、今回のように一時的な利用の場合は通信先特定後にVPCフローログを削除することをおすすめします。

調査対象のNAT ゲートウェイのVPCにチェックを入れ、アクションで『フローログを作成』を選択します。 スクリーンショット 2023-08-16 14.29.46.png

任意のフローログ名を入力し、それぞれ下記を選択します。

  • 送信先:CloudWatch Logsに送信
  • 送信先ロググループ:3で作成したロググループ
  • IAMロール:2で作成したロール

スクリーンショット 2023-08-16 14.32.55.png スクリーンショット 2023-08-16 15.00.51.png



2-5. ログの分析

 取得したログを分析してNAT ゲートウェイの通信先を特定します。今回は1週間分のログを分析します。
「CloudWatch>ログのインサイト」で4で作成したロググループを選択し、それぞれ下記クエリを実行します。 スクリーンショット 2023-08-17 16.46.57.png

実行クエリ

①NAT ゲートウェイからインターネットへの通信

  • 送信元IP/CIDR
    • 'X.X.X.X':対象NAT ゲートウェイのプライマリプライベート IPv4 アドレスを指定
  • 除外する宛先IP/CIDR
    • 'Y.Y.Y.Y/YY':対象VPCのCIDRを除外。複数CIDRがある場合はand not isIpv4InSubnet〜を繋げる

filter (srcAddr like 'X.X.X.X') and not isIpv4InSubnet(dstAddr, 'Y.Y.Y.Y/YY')
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc


②インターネットからNAT ゲートウェイへの通信

  • 宛先IP/CIDR
    • 'X.X.X.X':対象NAT ゲートウェイのプライマリプライベート IPv4 アドレスを指定
  • 除外する送信元IP/CIDR
    • 'Y.Y.Y.Y/YY':対象VPCのCIDRを除外。複数CIDRがある場合はand not isIpv4InSubnet〜を繋げる

filter (dstAddr like 'X.X.X.X') and not isIpv4InSubnet(srdAddr, 'Y.Y.Y.Y/YY')
| stats sum(bytes) as bytesTransferred by dstAddr, srcAddr
| sort bytesTransferred desc


 上記クエリ実行により、データ通信量(bytesTransferred)の多い順で通信先IPアドレスの一覧が得られます。 IPアドレスの一覧をプレフィックスリストと照らし合わせたところ、①、②ともにNAT ゲートウェイの通信先のほとんどがS3であることが分かりました。

3.NAT ゲートウェイコストを削減するための対策

 先述の通り、NAT ゲートウェイを利用してEC2↔S3間のデータ通信を行う場合、NAT ゲートウェイの利用料金とデータ通信料金の2つのコストが発生します。 ブログ_VPCエンドポイント.drawio.png

しかし、VPCエンドポイント(Gatewayタイプ)を利用すると、EC2↔S3間のデータ通信コストは発生しません。
利用料金およびデータ通信料金が無料となるGatewayタイプのVPCエンドポイントが利用できるのはS3、DynamoDBのみですが、Interfaceタイプの場合も、利用料金が0.014USD/時間、データ通信料金が0.01USD/GB(※処理されるデータが1PB/月未満の場合)のため、NAT ゲートウェイを利用する場合と比べてかなりのコストが削減できます。 ブログ_VPCエンドポイント.drawio (1).png

S3のVPCエンドポイント(Gatewayタイプ)利用時の注意点

 VPCエンドポイント(Gatewayタイプ)を利用して、S3との通信を行う場合、注意点が2つあります。

VPCエンドポイント設定時の通信遮断

 NAT ゲートウェイ経由で接続しているS3をVPCエンドポイント(Gatewayタイプ)経由に変更する際、S3の通信は経路変更のため遮断されます。そのため、設定変更はユーザー影響が少ない時間帯に行う必要があります。

S3のバケットポリシーとVPCのエンドポイントポリシー

 S3のバケットポリシーをEIPで制御している場合は、VPC内部のPrivate IPでの制御に変更する必要があります。VPCエンドポイントを経由してS3にアクセスする場合、通信先はVPC内部のPrivate IPになるため、EIPで制御しているとVPCエンドポイントを設定しても、S3にアクセスすることができません。同様に、VPCのエンドポイントポリシーで特定のバケットへのアクセスのみを許可している場合、S3にアクセスできなくなるため、許可リストに対象のバケットを追加するなどの対応が必要になります。

4.VPCエンドポイント化によってコストを削減した結果

 EC2↔S3の通信をNAT ゲートウェイ経由ではなく、VPCエンドポイント経由としたことで、対象NAT ゲートウェイのコストを約70%削減することができました。

 今回はNAT ゲートウェイについて、コスト適正化事例をご紹介しました。
AUCでは、お客様の環境、状況に合わせたコスト適正化を進めていきます。

参考

関連記事

AWSのインフラコスト見積もりでの「この値なに?」をちょっと解説(AWS Fargate編)

目次 はじめに AWS Fargateの選択・入力項目 ・説明 ・ロケーションタイプを選択 ・リージョンを選択 ・オペレーティングシステム ・CPUアーキテクチャ ・タスクまたはポッドの数 ・平均期間 ・割り当てられたvCPU の量 ・割り当てたメモリ量 ・Amazon ECS に割り当てられたエフェメラルストレージの量 まとめ はじめに AWSのインフラコスト見積もりでおなじみのAWS Pricing Calculator、 リストから選択あるいは値を入

記事詳細
AWSのインフラコスト見積もりでの「この値なに?」をちょっと解説(AWS Fargate編)
AWS
分析は、会話でできる─AIエージェントで変わる顧客データの使い方

はじめに:顧客データ活用が進まない AIエージェントを利用した顧客データ活用環境(Amazon Bedrock) AIエージェントで顧客データを分析する まとめ:スモールスタートで始める顧客データ活用 1.はじめに:顧客データ活用が進まない 「顧客データをもっと活用したい」という声をよく耳にします。購買データ、会員データ、来店履歴、キャンペーンの反応率など、日々さまざまなデータが蓄積されていますが、それらを活用して顧客理解を深め、顧客体験

記事詳細
分析は、会話でできる─AIエージェントで変わる顧客データの使い方
AWS 生成AI
EC2・Fargateコスト最適化:Savings Plansとリザーブドインスタンスの使い分けガイド

はじめに Savings Plansとリザーブドインスタンスの基本 EC2とFargate(ECS/EKS)に対する割引プランの選び方 まとめ 1. はじめに EC2やFargate(ECS/EKS)を長期間運用する場合、Savings Plansやリザーブドインスタンスによる割引を適切に活用し、コストを抑えることが欠かせません。 本記事では、EC2・Fargate を対象に、Savings Plansとリザーブドインスタンスの基本を整理し、それぞれの特

記事詳細
EC2・Fargateコスト最適化:Savings Plansとリザーブドインスタンスの使い分けガイド
AWS
Fargate (ECS/EKS) × Savings Plansでコスト見積もりする方法

はじめに Fargate(ECS/EKS)のコスト最適化とSavings Plansの基本 Savings Plans適用後のFargate(ECS/EKS)の費用を計算する方法 まとめ 1. はじめに Fargate(ECS/EKS)のコストを最適化するには、長期運用を見据えてSavings Plansの割引を活用することが重要です。試算には多くの方が公式ツールのPricing Calculatorを利用していると思います。 しかし、Fargateにつ

記事詳細
Fargate (ECS/EKS) × Savings Plansでコスト見積もりする方法
AWS

お問い合わせはこちらから