Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@asahi0301

DeepRacer で NAT Gateway の課金を防いで楽しく遊ぶ方法

DeepRacerとは

AWS DeepRacer は、文字どおり機械学習を自由自在に操る最速の手段です。強化学習により駆動する 1/18 スケールの完全自走型レーシングカー、3D レーシングシミュレーター、そしてレースの世界大会をご用意しています。
(公式HPよりコピペ)

DeepRacerで遊ぶには

2019/06/13時点では、実機はまだ発売されておらず、シミュレーターを使う必要があります。

シミュレーターはどこにあるの?

AWSのマネジメントコンソールから「DeepRacer」を選ぶと、DeepRacerのコンソールに飛びます

具体的な遊び方はどこに書いてあるの?

Youtubeを見る

こちらです

公式workshopを見る

こちらです
ちなみに、workshopの参加レポートがこちらに記載されています

さて本題にもどります

上記を見れば、問題なくDeepRacerは遊べるはずです。
が、遊びすぎてしまうと、ちょっと問題が発生してしまいます。それは料金です。

DeepRacerに関する料金についてあらためて

image.png
こちらがDeepRacer(次からDRと呼ぶことにします)のアーキテクチャ要素です。

DeepRacerとしての実体はなく、SageMaker、RoboMaker、Kinesis Video Streams etcを組み合わせているだけなのがなんとなく分かるかと思います。
そしてDRのコンソールやgithubにも書いてあるかと思いますが、SageMaker、RoboMaker、Kinesis Video Streamsといったリソースは、モデル作成時のみ利用されますので、それ以外の何もしていない時間(つまり、AWSに全く触れずに放置している時間)は料金は発生しません。

が、

よく見てください。NAT Gatewayがありますよね。これ課金されちゃいます。ええ、放置してても。さらに、RoboMaker が Kinesis Video Streams に動画を送るのですが、その経路でNATさせるためにNAT Gatewayを利用するので、NAT Gatewayのデータ処理料も結構発生してしまいます。

必要以上の課金を防いで、DRを楽しく遊ぶには

ここでの「必要以上の課金を防いで」という意味は「NAT Gatewayの課金をなくす or 極力減らす」という意味です

方法1

DeepRacerで遊ばない時は、「Reset resource」でDeepRacer用のVPC自体を削除。
遊ぶ時に、「Create resourcess」で再度VPCリソースを作成する。これらを繰り返す。

この部分ですね。
image.png

ただこれを行ったとしても、防げる課金は「何もしていないときでも発生するNAT Gateway自体の料金」であり、DRで遊んでいる時の NAT Gatewayのデータ処理料を避けることはできません。

方法2

NAT Gatewayを削除し、その代わりにNAT インスタンスをEC2で立てる。
NAT Gatewayがリリースされてから、もう一生使われることのないと思っていた NAT インスタンスがもしかすると使えるかもしれません。やってみます。

(1) NAT インスタンスの作成

こちらが参考になります。
簡単に言えば、amzn-ami-vpc-nat という名前がついたAWSが提供しているAMIでEC2を立てるだけですね。
EC2を立てるサブネットは、NAT Gatewayが存在しているサブネットを指定します。
インスタンスタイプは
無料枠が残っているなら、t2.micro
残っていないから、t3.nano
でいいかと思います。(どちらもT2/T3 無制限は無効にしておく)
あと、自動割り当てパブリック IP を「有効」に。
キャパシティーの予約を「なし」にしています。

セキュリティグループは、VPC CIDR(10.0.0.0/16)からすべてのトラフィックを受け付けるようにしています

image.png

image.png

image.png

(2) 作成したインスタンスの送信元/送信先チェックを無効にする

こちらに書いてあるとおりです。

EC2はデフォルトでは、自分宛てのトラフィックしか受け付けないようになっていますが、
NAT インスタンスは、自分宛て以外のトラフィックも受けてNATする必要があるので、その設定を無効化する必要があります。

image.png

(3) ルートテーブルの変更

DR用に作成されたVPC内のプライベートサブネットのルートテーブルを変える必要があります。
というのは、プライベートサブネットは、デフォルトルート(0.0.0.0/0)がNAT Gatewayを向いているので、さきほど作成したNAT インスタンスに変える必要があります。

DR用のVPCのルートテーブルは、現時点では3つあるようです。
6個のサブネットが関連つけれているルートテーブルが、プライベートサブネット用のルートテーブルですので、デフォルトルートがNAT Gatewayに向いていることを確認し、NAT インスタンスに変更しましょう。

image.png

たしかに、デフォルトルートはNAT Gateway(NAT-xxxx)に向いていますね。
それをNAT インスタンスに変更しましょう
image.png

「ルートの編集」から下図のような感じで、ターゲットをNAT インスタンスに設定します。
image.png

こんな感じで、デフォルトルートが、NAT インスタンス(のENI)になっていることを確認します。
image.png

(4) NAT Gatewayの削除

DR用VPCのNAT Gatewayを削除しましょう。
特段の手順というものはなく、VPCのコンソールからNAT Gatewayを選択して削除するだけです

(5) Elastic IP Address の解放

NAT Gatewayには必ずElastic IP Address(固定IP)が紐付いています。NAT Gatewayを削除しても、紐付いていたElastic IPは解放されませんので、同様に解放しましょう。
これも、VPCのコンソールから Elastic IPを選択して、該当のElastic IPを解放するだけです。

さあ! DeepRacerを動かしましょう!!

私の環境では、NAT インスタンスでも問題なく、動いているようです。
ただ、t3.nao(t2.micro)のNAT性能は検証していないので、その部分でパフォーマンスが足りないとNAT インスタンスのスケールアップが必要かもしれません
image.png

さらにコストを削減するには。

私はt3.nanoをNAT インスタンスを利用しました。ただそれでも、常時起動だと月数100円かかってしまいます。
それすら嫌な場合は、使っていない時はEC2を停止するなどの工夫が必要かとしれません。
が、DeepRacerを頻繁に遊ぶような方でしたら、それ自体(SageMaker, RoboMaker etc)にある程度お金がかかると思いますので、t3.nano の費用は無視できるレベルかも知れませんね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?