[AWS] Lambdaを使ってS3の既存画像を全部リサイズする


今更感漂う記事ですが、これっていう記事が見つかんなかったので一応まとめておきます。

1. Lambdaの準備

Lambdaでの画像リサイズなんて膨大な記事が出て来るわけですが、なんかAWSのサンプルコードベースのやつだと一部の画像で変換処理がうまくかからなかったです。
原因はどうもnodeのGraphicsMagickだとダメで、ImageMagickだとうまくいくタイプの画像があるらしいこと。
node初心者なのでコード切り貼りして、下記のような形で完成。
縦横長い方が一辺1000pix以上だったら、1000pixになるように縮小するというもの。
ifの辺りでゴリゴリしてるのは多分書き方がアレですが…

参考サイト:
AWS Lambdaを使ってS3にアップロードされた画像をリサイズする
Amazon S3 にある大量の既存画像を AWS Lambda で一気に変換する

↑のLambdaを作成し、下記でパッケージをダウンロード

したら、node_modulesとindex.jsをzipしてアップロードすればLambdaは準備完了。

2. ひたすらinvokeする

↑のLambdaは本来、S3に画像ファイルが置かれたときに発火するものです。このままだと手動で動かせません。
しかし、testで使うような、Lambdaが受け取るはずのjsonを手動で投げてやれば手動で動かせます。
それがaws-cliから使えるinvokeという機能。(今更感がスゴイ…)

ここで用意するpayload.txtはこんなもの(参考サイトより)

あとはこの画像ファイルへのパスを書き換えて、invokeし続けるだけ。
例えば1MB以上の画像だけリストアップするのならば、

などで画像ファイル名一覧が取得できます。

最後に、次のようなresize.shを用意し、

引数にファイル名の入った画像パス一覧を渡せばokです。

まとめ

極めて場当たり的な対応ですが、これでも一応用は足りるので、同様の事例でお困りの方がいればと思って書きました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする