実は月額30円の定額課金?SQS⇒lambdaの罠…

· ☕ 4

ずっーとよく分かっていなかったSQSの仕組み、請求額を見て、ようやく理解しました!

たいして使っていないはず(1日10メッセージ、月300メッセージ程度)のSQSの使用料が無料枠の100万回を超え、課金対象に…

請求

原因はSQSトリガーで動いているlambdaでした…。

原因

解説していきます。

SQSの料金設定

SQSの料金はこうなっています。

料金

100万リクエストあたり0.40USD

ただ、最初の100万リクエストは無料になっています。

私の↑の場合、125万リクエスト程度使っており、25万リクエスト分の料金がかかっています。

リクエストとは…?

SQSのリクエスト

SQSのリクエストというのは、SQSへのメッセージの送信、SQSからのメッセージの受信などです。

で、そもそもSQSとは何かという話をさせてください。

SNSもSQSもメッセージ配信サービスという意味では同じなのですが、SNSが「」なのに対して、SQSは「蓋付きの箱」です。

SNSは筒の前で待っていれば、勝手にメッセージが筒を通ってやって来るのですが、SQSは蓋付きの箱なので、蓋を開けてあげないと中身が見れません。

なので、蓋を開けて中身を確認するんですね。ポーリングと言います。

で、蓋を開けるたびに1リクエストが消費されていきます。

lambdaでSQSをトリガーにすると?

lambdaは1分に15回SQSにメッセージの確認をしています。

確認の度に1リクエストが消費されていきます…。

月で考えると、15回/1分×60分×24時間×30日⇒648000⇒64.8万リクエスト

簡単に言うと、lambdaにSQSのトリガーをセットすると、固定で月64.8万リクエストが消費されます

無料枠は月100万リクエストしかないので、2個上記の設定をすると、無料枠を超えることになります…

無料枠を考えないと64.8万リクエストは、0.40USD/100万×64.8万リクエスト⇒0.2592USD⇒30円程度

つまり、lambdaにSQSのトリガーをセットすると、固定で月30円程度請求されます

個人開発には痛い!

私なんか、SQSトリガー20個くらい使おうとしてたから、月600円…

早く気づいてよかった…

確認方法

ちなみに、SQSのキューのモニタリングから、どれだけのリクエストが来ているか確認ができます。

monitoring

monitoring

この中のNumberOfEnptyReceives(カウント)というのが、蓋を開けたけど、空だったリクエストの数です。

無駄金の数です…

NumberOfMessageSent(カウント)というのが、実際に来たメッセージの数。

これ、私のメール受信用のlambdaなんですが、もはや空振りリクエストしかないですねww

対策

まず、安易にSQSトリガー⇒lambdaを利用しないこと。

当然、仕事での開発で、30円くらい気にしないよ、どんどん使え!って場合は使って大丈夫ですww

では、SQSトリガー⇒lambdaを利用せずにどうすればいいか?

即時受け取りしたい場合

対策1

メッセージを即時受け取りしたい場合は、SNSサブスクリプション⇒lambdaにするといいと思います。

SNSはメッセージを溜めておくことはできません。

なので、常に受信可能な状態にしておく必要はありますが、だいたいの場合、SNSで代用ができるのではないかと思います。

というか、SQS⇒lambdaを使っていて、SNSにしたら困る事なんて、そうないですよね?

SNSはメッセージ数に対して課金されます。

そして、SQSと同じく、100万リクエスト=100万メッセージまで無料です。

なんらかのエラーでメッセージが受け取れなかった場合にメッセージが消えてしまうのが嫌

SNSにはメッセージが溜められません。

なので、受け取れなかったメッセージは消えていく…。

それが嫌なら、SNSサブスクリプションにデッドレターキューを設定しましょう。

対策1

送信に失敗した時は、そのデッドレターキューにメッセージが溜まっていき、ロストすることはなくなります。

即時受け取りにこだわらない場合

即時受け取りにこだわらない場合は、lambda⇒SQSや、ECS⇒SQSがいいかなと思います。

対策2

トリガーを使わず、自力でポーリングをしに行くって事です。

lambdaの時間実行で、1分起き、5分起きにメッセージを取りに行く

ECSのループで、1分起き、5分起きにメッセージを取りに行く

ってことですね。

1分起きなら、1処理で、月4.32万リクエスト⇒月2円

5分起きなら、1処理で、月8640リクエスト⇒月0.4円

まで節約できます。

手動ポーリングの仕方はこちらにまとめてます。

独り言

awsは毎日毎日新しい学びがありますね…

いつになったら私に任せろ!レベルになれるのやらww

資格の勉強も進めないとなぁ…


るな
るな
エンジニア