👛

『極貧AWS』 1時間あたり0.05円安くする Elastic IP の 節約術

2022/01/30に公開

AWS の Elastic IP とは、停止→起動するたびに変わってしまうEC2のパブリックIPを固定するときに利用するものです。
公式説明[1]の一行目では以下のように説明されています。

Elastic IP アドレスは、動的なクラウドコンピューティングのために設計された静的 IPv4 アドレスです。

こちらのElastic IPですが、料金体系が少し特徴的で、簡単に説明すると「EC2インスタンスに1対1で紐づけられているときは課金されない」という特徴があります。
そして、EC2インスタンスに紐づけられていないときの料金は

0.005USD: 実行中のインスタンスに関連付けられていない Eastic IP アドレスあたり/1 時間 (比例計算)

と説明されています[2]

そこで、ひらめきました。

ElasticIPの考察
「使ってないElastic IPが単独で居るよりも、お金の掛からないインスタンスに紐づけた方が安上がりなのでは!?」

ということで、安くするための仮説を立てたのち、実際に動かして検証してみようと思います。

実現するための構成案1: 簡単に作れるEC2インスタンス + 最安値のEBS

構成案1としているのは、最初はこの構成でいけると思っていたからです。
結果から言うと無理だったので案2を考えました。

まず、何にも紐づいていないElastic IP は 0.005USD: 実行中のインスタンスに関連付けられていない Eastic IP アドレスあたり/1 時間 (比例計算) なので、少なくとも1時間あたり0.005USD以下で使えるEC2インスタンスがあるか探します。
そしてEC2インスタンスは、インスタンスストアを使えないものにはEBSボリュームを付けなくてはいけないので、こちらの値段の合計値が0.005USDを下回れば良いということになります。

今回導き出したいのは、以下のようになる構成です。

EC2の最安値 EBSの最安値 合計
? ? 0.005USD以下

EC2インスタンス

EC2の料金体系[3]から、東京リージョンで探すと最安値のインスタンスが t4g.nano 0.0054 USD でした。既に0.0004USD上回っているので、東京リージョンでは節約が実現できそうにありません。ですが、ギリギリ上回っているだけなので、海外のリージョンなら実現できそうですね。

オハイオリージョンの最安EC2を見てみると t4g.nano 0.0042 USD でした。
マイナス0.0008USD、Elastic IPより安いです。
わずかな希望が見えています。

EC2の最安値 EBSの最安値 合計
0.0042USD 0.0008USD以下 0.005USD以下

ここにEBSの値段を足しても果たして節約になるのでしょうか。
※ ちなみに、EBSを使わずにインスタンスストアを利用できるインスタンスタイプの最安値はc6gd.medium 0.0384 USD となっているのでEBSを使わないという選択肢は無理です。

EBS

EC2インスタンスを以下のイメージで作成すると、EBSの最小サイズが8GiBとなります。
Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type - ami-001089eb624938d9f (64-bit x86) / ami-0a2306ef347189603 (64-bit Arm)

詳しいことは分からないのですが、イメージによって最小サイズが決められているそうです[4]
詳しいことは分からない(2回目)ので、EBSのサイズは8GiBのままで考えます。

EBSの最安値は、おそらく以下になるかと思います[5]

VolumeType: gp3
Size: 8GiB
料金: 0.08USD/GB 月

ちなみに、HDDストレージであるsc1とst1の方が安いのですが、ルートボリュームには使えないそうです[6]
また、EBSは月ごとの料金が書いてありますが、実際は秒単位で課金されます。公式[5:1]に以下のように書いてあります。

gp3 ボリュームのプロビジョンドストレージ、プロビジョンド IOPS、およびプロビジョンドスループットは、1 秒ごとに課金されます (最小課金時間は 60 秒)

というわけで、日数が30日の月で8GiBのEBSに1時間あたりかかるボリュームコストは以下のようになります。

月毎の課金料金 / (1ヶ月の時間数) * (ボリュームサイズ) =
0.08USD / (24h * 30days) * 8.6GB = 約0.00096USD/h

EC2の最安値 EBSの最安値 合計
0.0042USD 0.00096USD 0.00516USD

あれ...?
0.005USDを超えている...
だめじゃん...

落ち込む人

諦めるのは早い。
まだ節約できるところがありそうです。以下を検討してみましょう。

  • AMIを変えてEBSのボリュームサイズを下げる
  • スポットインスタンスを使う

実現するための構成案2: 少し工夫したEC2インスタンス + 最安値のEBS

AMIを変えてボリュームサイズを下げる方を検討してみます。
とある記事[7]を参考にすると、AMIにはインスタンスだったころのEBSボリュームの情報がふくまれているようです。
dockerでいうところのAlpineのような要領で軽量のAMIがあれば、8GiBを下回るボリュームサイズになりそうです。

EC2起動のコンソールから軽量のイメージが無いか探してみると、コミュニティAMIにamzn2-ami-minimal-hvm-2.0.20181114.1-arm64-ebs - ami-001321a85978afa12 というイメージがありました。minimalと名付けられているので、いかにも軽量そうです。
EBSボリュームサイズを下げられるか見てみると、2GiBまで下げることが出来ました。
ボリューム

先ほどの計算を8GiB -> 2GiBでやり直してみます。
2GiB = 2.14748GB ≒ 2.2GB
月毎の課金料金 / (1ヶ月の時間数) * (ボリュームサイズ) =
0.08USD / (24h * 30days) * 2.2GB = 約0.00024USD/h

EC2インスタンスを含めた結果がこちらになります。

EC2の最安値 EBSの最安値 合計
0.0042USD 0.00024USD 0.00444USD

よろこび

ElasticIP 単独で1時間にかかる料金 0.005USDを0.00056USD下回りました!
(4が並んでいて不吉ですが...)

円換算すると、0.056円 → 5.6銭 お得ということになります。
ここまで行って満足し、スポットインスタンスのことを考えるのは辞めました。

さて、実際に検証をした環境を私用アカウントにて動かしてみて、コストがどうなるか見てみます。

実際の検証

以下の構成で料金がいくら掛かるか、Billing Mangagement Consoleの請求書で見てみました。
最初はタグ付けしてCost Explorerで見ていこうと思ってたのですが、意外と細かい金額を見ることができませんでした。

<構成>
Region: バージニア北部
EC2タイプ: t4g.nano
EBS: gp3, 2GiB

仮説で書いたオハイオリージョンではありませんが、料金設定は同じです。

料金は以下のように出ました。
※料金表が0.01USD以下を出していないので、完全に正確には計算できていません。

実際の料金

EBSとEC2は同じ時間に立ち上げているので、1時間あたりの料金に換算すると、以下のようになります。
EC2: 0.15USD / 35h = 0.00428... ≒ 0.0043
EBS: 0.01USD / 35h = 0.00028... ≒ 0.0003

EC2の最安値 EBSの最安値 合計
0.0043USD 0.0003USD 0.0046USD

実際に節約になってますね!!

ちなみに、EC2インスタンスにアタッチされていないElasticIPの料金は実際以下のようにでました。
EIPの値段

0.29 / 57.2 = 0.0050...
なので、アタッチされていないEIPの実際にかかってる料金も公式の記載通り1時間0.005USDですね!
また、最初の1時間は料金がかからないということも請求書から初めて知りました。

注意点

  • 今回の節約は東京リージョンより安価なリージョンでしか実現できない。
  • ElasticIPの値下げが起こると、この記事の価値が無くなる。
  • ElasticIPは1月100リマップを超えると付け替えで課金が発生するので、頻繁にリマップする場合は注意が必要。

今回得られたこと

  • 切り詰めた節約方法
  • トリビア的AWS知識
  • EC2まわりのざっくりコスト感覚
  • AWSでは意外と使用したコストを細かく出してくれない
  • AMIはボリュームのスナップショットを利用する
  • ○○g のインスタンスタイプはGravitonプロセッサを利用しており、安価になっている。Gravitonのgだった。
  • タグ付けしてコストを出せないものもある
  • 胆力

失ったもの

  • 時間
  • 検証に使った100円くらい

感想

今までコストを厳密に考えたことがなかったので、コストの出し方や値段の相場感が掴めました。
細かいところを考え、調べつくして本当に分からないことが無い状態にするのは楽しい。
業務後に1週間ずっと今回の記事を書いて検証していた気がしますが、教科書やドキュメントだけでは得られない知識が染みついた感じがします。
また気になった細かいことを検証していきます!

脚注
  1. https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html ↩︎

  2. https://aws.amazon.com/jp/ec2/pricing/on-demand/#Elastic_IP_Addresses ↩︎

  3. https://aws.amazon.com/jp/ec2/pricing/ ↩︎

  4. https://dzone.com/articles/how-to-get-around-the-8gb-limit-on-root-volumes-in ↩︎

  5. https://aws.amazon.com/jp/ebs/pricing/ ↩︎ ↩︎

  6. https://blog.serverworks.co.jp/tech/2016/05/06/point-of-amazon-ebs-update-new-cold-storage-and-throughput-options/ ↩︎

  7. https://aws.typepad.com/sajp/2014/04/trainingfaqbest10.html ↩︎

Discussion