AWS Lambdaで画像のリサイズImageMagickで処理エラー!原因は画像ファイルのContent-Typeにあった

最近あったとても恐しい出来事をお話しさせて頂きます。

Tumisu / Pixabay

 

勤務先の会社ではAWSのクラウドを利用してサービスを提供しているのですが約半年ほど前に導入した画像リサイズが原因不明のエラーで処理が行えなくなるという事象が発生しました。

S3にアップした画像をLambdaでリサイズして別バケット(bucket)に保存するNode.jsのサンプルコード
とある案件でS3にアップされるオリジナル画像をリサイズで別バケットに保存したい要望があり先人の知恵と伝家の宝刀コピペを駆使して組んでみました。 処理の流れ →PUT→S3bucket→イベントキック→Lambda(リサイズbyNode.js...

「なぜ」? 半年以上前からなんの問題もなく実行されていたサーバレスのlambdaさん。どうして今日なの?そして突然になぜ?

原因を調べると驚きの事実が分かりました。

処理の流れを簡単に

画像(FTP)→PHPの取得PG→S3アップ→イベントトリガーでLambda(リサイズ)→S3別バケットに保存 が流れです。

実はエラーが発生し始めたタイミングで処理の流れは変えずに取得PGを変更していた しかしPGの処理に誤りはなく画像ファイルをS3へアップロード出来ていた。では なぜ?

エラー箇所はLambda内のImageMagickの処理時に発生していた。前日まで正常に動いていたが、取得PGを変更してからアップロードした画像は全てエラーになっているようだ。

原因をPG修正してくれた会社さんと共に調べる そして画像アップロードの方法を色々と試すと画像ファイルをローカルPCからAWSのコンソールでアップすると問題なくリサイズされる?なぜ? で数時間が経過してしまうが協力会社さんから連絡があり「Content-Typeでした」と

やられたーーーー

もしかしたら、常識なのかもしれませんがImageMagickではContent-Typeを判断して処理を実行しているようで取得PGはPHPからJavaに言語が変わりPHPの場合はContent-Typeありの画像ファイルとしてアップロードされていたのですがJavaは明示的にContent-Typeを指定しないと拡張子にjpgが付いただけのオブジェクトファイルをアップロードしていたことになります。ここに原因があったのです

タイトルとURLをコピーしました