0
0

【開発環境向け】NATインスタンスを利用して費用を削減する

Last updated at Posted at 2023-11-21

1.はじめに

以下記事に感化され、

開発環境のNAT GatewayをNAT InstanceにしてAWS利用費を削減した話

確かに、開発環境や学習用環境はNAT GatewayをNAT Instanceに代えたらAWS利用費を削減できそう!
と思い手順を検証してみました。

某C社様のブログにはいつもお世話になっております。

あと、公式ドキュメントの手順で簡単にできるだろうと思っていたら
案外、躓くポイントがありました。

NATインスタンスとは?

  • NATインスタンスの基本
    AWS公式ドキュメント:NAT インスタンス
    • NAT インスタンスにはインターネットアクセスが必要
    • パブリックサブネットに存在し、パブリック IP アドレスまたは Elastic IP アドレスを持っている必要がある。
    • NAT AMI を作成し、NAT インスタンスのセキュリティグループを作成してから起動する。

2. 事前準備

2.1. VPC を作成する

  1. VPC作成します。

  2. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。

  3. [VPC の作成] を選択し、「VPC など」 を選択します。

    • VPC 名を入力:Nat-test
    • アベイラビリティーゾーンの数:1
    • パブリックサブネットの数:1
    • プライベートサブネットの数:1
  4. [VPC の作成] を選択します。
    image.png

  5. 実行結果を確認します。
    image.png

    image.png

2.2. セキュリティグループを作成

  1. セキュリティグループ名:Nat-instance-sg

  2. インバウンドルール:

    タイプ ポート ソース
    ssh 22 マイIP
    http 80 プライベートサブネットのCIDR
    https 443 プライベートサブネットのCIDR
  3. アウトバウンドルール:0.0.0.0/0
    作成画面:
    a.jpg

2.3. NAT AMIを作成

警告
AWS公式ドキュメントの手順には、この後NAT AMIを作成すると書いてありますが、
インスタンスをAMIにして再作成しなくても、手順のコマンド実行すれば
NATインスタンスとして機能するため割愛します。

※イメージ化するとお金が余計にかかってしまうデメリットもあります。

3.NAT インスタンスの作成

  1. インスタンスを起動します。

    項目
    名前 Nat-instance-1
    AMI Amazon Linux 2023
    インスタンスタイプ T3.micro
    ネットワーキング設定 VPC、パブリックサブネットを選択
    パブリックIPの自動割当て 有効
    セキュリティグループ Nat-instance-sg
  2. ssh接続し、次のコマンドを実行して、iptables を有効にします。

    sudo yum install iptables-services -y
    sudo systemctl enable iptables
    sudo systemctl start iptables
    

    image.png

  3. viを使用し、設定ファイルを作成します。

    • viで開きます。
       vi /etc/sysctl.d/custom-ip-forwarding.conf
      
    • 次の行を追加します。
      net.ipv4.ip_forward=1
      
    • 設定ファイルを適用します。
      sudo sysctl -p /etc/sysctl.d/custom-ip-forwarding.conf`
      
      image.png
  4. 次のコマンドを実行します。

    netstat -i

    image.png

  5. プライマリENI名を控えておきます。
    プライマリENI:enX0

  6. 次のコマンドを実行して、NAT を設定します。

    sudo /sbin/iptables -t nat -A POSTROUTING -o enX0 -j MASQUERADE
    sudo /sbin/iptables -F FORWARD
    sudo service iptables save
    

    image.png

  7. プライベートルートテーブルのルートを追加します。

    送信先 ターゲット
    0.0.0.0/0 Nat-instance-1(i-098ecb6fcdedf6204)

    スクリーンショット 2023-11-21 151957.png

  8. 送信元/送信先チェックを無効にします。

  • アクション>ネットワーキング>ソース/宛先チェックの変更
  • 停止にチェックを入れ、「保存」ボタンをクリックする


4. NAT インスタンスをテストする

4.1. テスト準備

  1. プライベートサブネットにインスタンスを作成します。

    項目
    名前 test-private-ec2
    AMI Amazon Linux 2023
    インスタンスタイプ T3.micro
    ネットワーキング設定 VPC、プライベートサブネットを選択

    image.png

  2. test-private-ec2用のセキュリティグループを作成
    インバウンドルール

    タイプ ソース
    すべてのICMP ipv4 VPCのCIDR
  3. 「Nat-instance-sg」のインバウンドルールにICMPへの許可を追加します。
    インバウンドルール

    タイプ ソース
    すべてのICMP ipv4 VPCのCIDR

4.2. NATインスタンスでgoogle.comにpingを送信

  1. Nat-instance-1にssh接続します。
  2. google.com宛にpingを実行します。
    ping google.com
    
    NATインスタンスがインターネットに接続可能なことを確認しました。
    image.png

4.3. プライベートEC2からgoogle.comにpingを送信

  1. Natインスタンスに接続します。

    以下コマンド実行

    #.sshディレクトリへ移動します。
    cd .ssh
    
    #キーペアを配置
    #ローカルのキーペア「Nat-test.pem」の中身をコピーして保存します。
    vi Nat-test.pem
    
    #権限を修正して使用可能にします。
    chmod 400 Nat-test.pem
    
  2. プライベートサブネットのec2にssh接続します。

警告
AWS公式ドキュメントの手順には、NAT インスタンスから、プライベートサブネットのインスタンスに接続するコマンドとして以下が提供されています。
ssh ec2-user@private-server-private-ip-address
このコマンドでは下記エラーが発生してssh接続できない為、注意が必要です。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

ssh -i "Nat-test.pem" ec2-user@10.0.129.147

image.png

  1. NATインスタンス宛にpingを実行します。

    ping 10.0.1.217
    

    プライベートインスタンスからNATインスタンスにping送信可能
    image.png

  2. google.com宛にpingを実行します。

    ping google.com
    

    image.png


    NATインスタンス経由でインターネットに接続出来ました

    以上でNATインスタンスの作成およびテスト手順は終わりです。

5. 終わりに

公式ドキュメントの手順では、所々エラーが発生する箇所があって大変でした(汗
※特に、NATインスタンスからプライベートインスタンスへのssh接続のところ

何と言っても、NATインスタンスを使うメリットは費用が安いことです。
顧客に提供する環境で使えるかというと、保守等の人件費とか色々あると思うのでそこは要検討です。

この記事がお役に立てれば幸いです。
お読みいただきありがとうございました!

6.参考文献

【Developers IO】
開発環境のNAT GatewayをNAT InstanceにしてAWS利用費を削減した話

【AWS公式ドキュメント】
NAT インスタンス
NAT ゲートウェイと NAT インスタンスを比較する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0