最近、AWSをフル活用して社内システムを作ったので、そのノウハウのご紹介を行っています。
今回はAWS Lambdaの料金解説です。
手始め
クラウド環境を使う人が真っ先に気にするのは、やはり料金ではないでしょうか?
クラウド環境が活用される理由の第一はやっぱりコストで、コストパフォーマンス良くランニングしたい人の為のサービスですから。
しかしながら、クラウド環境のコストは千差万別。
普通のレンタルサーバの場合は月々いくらの定額制が多いですが、クラウド環境は従量課金制であることが多く、「従量課金ってのは、具体的にどういう計算になるの?」という所が非常に難しいです。
特にAWSは数あるクラウド環境の中でも課金体系が複雑な方だと言われており、これはAWSの欠点の一つだと言えるでしょう。
ともかく今回はLambda部分の課金についてご説明です。
GB-秒課金
こちらがLambdaの料金の公式ページです。
Lambda では 1 か月に 1,000,000 件の無料リクエストおよび 400,000 GB-秒のコンピューティング時間が無料利用枠となっています。
400,000 GB-秒のコンピューティング時間って何ぞや???
普段は余り耳にしない独特の単語が出てきました。
- GB-秒
- コンピューティング時間
これを分かり易い言葉に置き換えると、こういうことなんです。
- インスタンスのメモリ×実行時間
つまり「AWS内のメモリを累計でどれだけ消費したか?」で課金されるという意味になります。
以下の青色の面積が課金対象です。
インスタンスのメモリ
「インスタンスのメモリって何のこっちゃ?」という方もいらっしゃるかもしれないので、Lambdaの画面の一部を切り抜いてお見せしましょう。
以下のように、Lambdaコンソールの「基本設定」蘭にメモリを指定する項目があります。これがインスタンスの設定メモリです。
一番小さい設定で128MB、一番大きい設定で3008MBになります。
(何故3008MBなどという中途半端な値なのかは不明)
課金基準は「インスタンスのメモリ×実行時間」なので、このメモリのサイズに正比例して料金が上がっていくことになりますね。
ここでお分かりになると思いますが、Lambdaはメモリが小さいほど正義なインフラという意味になります。
通常のサーバの場合、「メモリが8GBなら8GBをフルに使わないと勿体ない」という発想で、積んであるメモリをキッチリ使い切ることが芸術です。
そこがLambdaは全然違って、メモリの正比例でお金がかかっていきますから、可能か限りメモリを少なく済ませることが財布に直結するという、プログラマーの腕の見せ所なインフラなのです。
従って、採用する言語もメモリを余り使わない言語の方が優れているということになり、メモリを大量消費する言語であるJavaはLambdaとの相性が最悪です。
私のエンジニアとしての経歴はJavaを起点にしていますが、来るべきクラウド時代を考えるとJavaのみしか使えないエンジニアは活躍の場所が限られると考えています。
「Javaエンジニアは、主力言語はJavaのままでも良いが、補助としてもう一つ言語を覚えるべき」
という私の持論はここに起因しているわけです。
インスタンスの実行時間
インスタンスの実行時間はそのまま、処理が開始されてから終了されるまでの時間です。
- 1秒で処理が完了したら、1秒を課金。
- 3秒で処理が完了したら、3秒を課金。
プログラムの速さが料金に直結してくるという、やはりプログラマーの腕の見せ所なインフラなのです。
課金は秒単位で行われます。
どういう意味かと言いますと、昔は
- 課金は時間課金。
- インスタンスを30分使っても課金は1時間。
- 1秒使っても1時間分の金を払いやがれ!!
というカツアゲみたいな課金体系でしたが、クラウド黎明期はこれでも凄いことだと言われていたそうです。
今は1秒単位なので、随分効率が良くなりましたね。
しかし、プログラマーとしては結構キツいなぁ。
「この処理、今は3秒かかっているけど、工夫すれば2秒になるんじゃない?」
とか言われちゃうってことでしょ?
キッツ~。
あと、当たり前ですが、アクセスが殺到してインスタンスが複数立ち上がったら、その正比例でコンピューティング時間に追加されていきます。
無料範囲
こう考えると「400,000 GB-秒のコンピューティング時間が無料利用枠」という意味も分かってきますね。
メモリが128MBの場合、
- 400,000(GB・秒) ÷ 128(MB) = 3,125,000(秒) = 868時間 = 36 日
という計算になりますね。
だから、立ち上がるインスタンスが1コならずっとタダで使えるってことになります。
しかし、処理の都合でメモリは最低でも1280MBは欲しいとなってくると、この場合だと3.6日ということになります。
短いような気もしますが、ここで忘れてはいけないのは、あくまで「処理時間」ということです。
アクセスが来ていない時間帯は処理していませんので料金は発生しません。
Lambdaは、
- アクセスが来ていない時は寝ている。
- アクセスが来たら起きて処理して終わったらまた寝る。
という挙動ですからね。
サービスとしては24時間立ち上がっていても、サーバとして処理している時間が短いシステムであれば、3.6日というのはまあまあの無料枠を貰えていると考えて良いのではないでしょうか?
なかなかお得なインフラです。
手始め
引き続きLambdaの連載を継続します。