1.記事概要

先日、はじめてのクラウド破産体験をしました。タイトルの通り、LambdaのトリガーにS3のPUTを設定していたのですが、設定の仕方が悪かったため、処理がループしてしまい、1分間に数千回ものLambdaが実行され、気づいたときには数万円の利用料に………。数万円で済んでよかった。。。。。。

なので、今後このようなことが起きないよう自分にリマインドしておくため、LambdaのトリガーにS3のPUTを設定するときに気を付けることをまとめておこうと思います。

2.どのようにLambdaループが発生したか

単純な話すぎて申し訳ないのですが…まとめるとこういうことが起こりました。

s3_lambda_s3

そりゃループするわ!って感じですね。恥ずかしい。

自分的にはInputのPUTに対してトリガーを設定したつもりだったのですが、いろいろ足りてませんでした…。

3.LambdaのトリガーにS3を設定するときに気を付けること!!

3-1.請求アラートの設定

その月の、AWSサービス使用料金が〇〇円を超えたら、メールでアラート通知してくれる設定をしておきましょう。今回私はアラート設定など特にしていなかったので、ループしたまま丸2日くらい経っていました…。意図せず状況が発生している、ということを気づけるようにするために、設定は必須です。

請求アラートの設定方法

  1. コンソール画面の上枠にある自分のアカウント名をクリックして、”請求ダッシュボード”をクリックする。
  2. ダッシュボードメニューから”設定”をクリックする。
  3. “請求アラートを受け取る”にチェックを入れ、一番下にある”設定の保存”をクリックする。
  4. “請求アラートを管理する”をクリックする。CloudWatchに飛ばされます。 seikyu
  5. アラームの”請求”をクリックする。
  6. アラームの作成メニューが開くので、アラートを出す料金を設定し、アラームを作成する。 alart_setting

これで、設定した金額を超えたときに、メールでアラートが届くようになります。意図せずループが起こっているときも、これで一旦状況に気づくことができますね。

3-2.InputバケットとOutputバケットを分ける

S3をトリガーを設定する場合は、このようにバケット名、イベントタイプ、プレフィックス、サフィックスを設定することができます。

20180324_lambda_triggar

なので、InputバケットとOutputバケットを分けておけば、ループはまず発生しません。

同じバケットで、プレフィックスやサフィックスを設定するのもありかもしれませんが、バケットを分けておくのが確実ですね。

4.まとめ

LambdaのトリガーにS3のPUTを設定するときは、請求アラートを設定して、InputバケットとOutputバケットは分けましょう。私の素人あたまではこの程度のことしかまとめられなかったのですが、他にも何かいい対策方法があれば、ぜひご教示ください…。。