share facebook facebook twitter menu hatena pocket slack

2019.08.13 TUE

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

高橋 慎一

WRITTEN BY 高橋 慎一

どうも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:*でお手軽クラウド死

高橋 慎一

高橋 慎一

最強。敗北を知らない。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。