😇

Amazon Personalize で 2 万円溶かしそうになったお話し

2022/09/08に公開

はじめまして!

はじめましての方ははじめまして、そうでない方はこんにちは!どうも菊池宣明(@kikulabo)です!

今日は以前 Tweet した Amazon Personalize でやらかしたお話を書いていこうかなと思います🎉

これから Amazon Personalize を始めて触るよって方は是非読んで頂けますと幸いです🙏

まず結論

クラウドサービスを扱う上ではあるあるの話だとは思うのですが、大きな原因としては作成した Amazon Personalize の消し忘れによって請求が発生しました💸

なので検証したらちゃんと消すというすっっっごく基本的なことをちゃんと実践している人であれば今回のようなことは起きないと思います。

ここから先は何故こんなことが発生したのか、具体的にどの項目で課金が発生したのかを中心に書いていこうと思います。

事の発端

僕は「ハッカー飯」という WEB サービスを友人と一緒に開発しており、このサービスはハッカー同士が気軽にマッチしお話しができるものとなっております🍕

https://hackermeshi.com/

一緒に開発している西田(@sotaronishida)からハッカー飯のマッチング率向上のために Amazon Personalize の導入が出来ないかといった相談を受けました。

僕自身これまで Amazon Personalize を触ったことがなかったので、まずは自分の個人アカウントでチュートリアルを軽くこなしてみようかなというが最初のきっかけでした。

Amazon Personalize とは?

Amazon Personalize は AWS のサービスのうちの1つで、機械学習の専門的な知識を持たずともリコメンデーション機能を提供できるものです。

https://aws.amazon.com/jp/personalize/

ドキュメントにも記載されていますが、このリコメンデーション機能は Amazon.com で使用されているものと同じテクノロジーが使用されているとのこと。すごい…!

Amazon Personalize の概要やハンズオンに関しては下記の AWS 公式ページにまとまっているので是非こちらもご確認してください!

https://pages.awscloud.com/event_JAPAN_Hands-on-Amazon-Personalize-Forecast-2019.html?trk=aws_introduction_page

何故高額な課金が発生したの?

さて、本題に入ります。

Amazon Personalize を使用する際にはキャンペーンと呼ばれるものを作成する必要があります。

キャンペーンとはデータセットを Amazon Personalize にインポートし機械学習モデルをトレーニングしたものに対して、アプリケーションが実際にレコメンデーションの結果を取得できるようにするためのものです。

このキャンペーンを作成する際に Minimum provisioned transaction per second というのを設定する必要があります。

transaction per second(TPS)は 1 秒間に何回レコメンドを取得出来るかを定義するものです。つまりこの値を大きく設定すればするほど、リアルタイムに 1 秒間で処理できる回数が増えるといった仕組みになっています。

Minimum provisioned transaction per second は 1 秒間に処理できる最低スループットを定義したものであり、この値を超えるトラフィックが発生した場合 Amazon Personalize は自動スケーリングが行われ、トラフィックが減少すると Minimum provisioned transaction per second の値に戻ります。

つまり、 Minimum provisioned transaction per second で設定した値が 1 時間あたりのリアルタイムレコメンデーションの最低料金となります。

リアルタイムレコメンデーションの料金は「対象リージョンごとに最初の 20,000 TPS-時間/月」までは現状「0.20 USD/TPS-時間」の課金が発生します。

https://aws.amazon.com/jp/personalize/pricing/

そのため Minimum provisioned transaction per second の最低値である 1 を設定していたとしても、1 時間あたり 0.2 USD 発生するので 1 ヶ月で 720 × 0.2 USD = 144 USD が発生する計算になります。

このようにリクエストが発生していなくともリアルタイム課金が発生することを理解できておらず、チュートリアルが終わった後に作成したキャンペーンを 1 ヶ月ほど放置してしまったため、今回のような課金が発生していまいました。

反省

何で消さなかったのか

サーバーレスだからきっとリクエストを発生させなければ課金は発生しないだろうし、何かあっても無料利用枠に収まるっしょ!、と安易に考えていたからです。

Amazon Personalize の料金ページは読んでいましたがトランザクションに関する内容が良く分からず、まぁ多分大丈夫だろうと気にしなかったのも原因です。

ちなみに課金が発生することはチュートリアルにも記載されているので見落としていた僕が完全に悪いです。

Billing 系のアラート設定はしてなかったのか

とはいえ AWS Budget 等で予算設定をしておけば高額請求になる前に通知を受け取ることが出来ます。

が、アカウントを作成したのが随分昔で最近触っていなかったのもあり(言い訳)、調べたらところ設定が途中までしか行われていないことに後日気づきました。

こいつ・・・今更こんなミスしてんのかよって話ですよね。言い訳のしようもありません。

請求金額に関して

ダメ元で AWS サポートに問い合わせを行いこれまでの経緯を説明したところ、今回のみ限り返金対応してくださりました。

自分に非があるにも関わらず対応してくださった AWS の方には本当に申し訳ないと思う反面、感謝の気持ちでいっぱいです。

AWS Budget の設定を行ったので今後同じようなミスは再発しない想定ではありますが、今後も新しいサービスを触る際は気をつけていこうと思います。

もっとお話しを聞きたい方は

他にもいくつかやらかしエピソードを持っているので、気になる方はハッカー飯に是非遊びにきてください!

https://hackermeshi.com/talk-themes/65

最後まで読んで頂きありがとうございました!👏

Discussion