どうも170万円爆死男です。

170万円について詳しくはこちら

さて、また死にそうでした。
前回はボーナス査定の直前でしたが、今回は直後ということもあり気持ちも穏やかに死にそうになったのでシェアします。

手順

  1. s3:ObjectCreated:* なイベントでLambdaとS3をつなぐ
  2. Lambda内で s3.upload() する
  3. 無限ループ!

さて、冒頭で死にそうと表現したのは死ななかったからなんですが、いくつか繰り返すうちに止まりました。
Amazonたん素敵な配慮をサンキュ♡と思ったんですが、厳密には違う理由です。

今回は幸運にも元ファイル名のサフィックスをつける仕様でつくっていたため、何回か実行した後にKeyTooLongErrorを吐いて死んでました。

ソースはこんだけ

new S3().upload(
  Bucket: bucket,
  Key: `${org.Key}.lock`
).promise()

もうおわかりだと思いますが、

  1. originalFilenameをUpload
  2. originalFilename.lockがつくられ
  3. それが原因でoriginalFilename.lock.lockがつくられ
  4. それが原因でoriginalFilename.lock.lock……

ってことです。
もし同名ファイル作ってたら発覚も遅れるしログだけガリガリ増えて死ぬところでした。
そうなったら一応Lambda消せばとまりますが、マジで気をつけろよ!!!!!!!!!!!!

元記事はこちら

s3:ObjectCreated:*でお手軽クラウド死