5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LambdaのNode.js 12.xでimageMagickを使用する

Last updated at Posted at 2020-01-30

初めに

Webアプリケーションから画像をアップロードする際にS3にファイルをputし、Lambdaでサムネイルを生成して公開用のバケットに保存する処理を構築していました。(前任者が・・・)
新たに同じようなシステムを構築するのに参考にしようとLambdaの関数のコンソールにアクセスすると以下のメッセージが表示されていました。
FireShot Capture 494 - createRecipeThumbnail - Lambda_ - https___ap-northeast-1.console.aws.png
Node.js 8.10を使っているので変更しないといけないよう。(把握しとけよ)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html

対応内容

まずは新しい関数を作り、ランタイムをNode.js 12.xにしてindex.jsに保存。
index.jsの内容はAWSのサンプルを参考にしています。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example-deployment-pkg.html

いざ実行

特に内容を変えずに実行すると以下のエラーが発生しました。


Error: write EPIPE   2020-01-29T11:33:50.941Z a84631dc-38d7-4b16-958c-8c88a85535c0  
INFO  In transform::: Error: write EPIPE
    at afterWriteDispatched (internal/stream_base_commons.js:150:25)
    at writeGeneric (internal/stream_base_commons.js:141:3)
    at Socket._writeGeneric (net.js:770:11)
    at Socket._write (net.js:782:8)
    at doWrite (_stream_writable.js:431:12)
    at writeOrBuffer (_stream_writable.js:415:5)
    at Socket.Writable.write (_stream_writable.js:305:11)
    at gm._spawn (/var/task/node_modules/gm/lib/command.js:253:18)
    at gm._exec (/var/task/node_modules/gm/lib/command.js:190:17)
    at gm.proto. [as size] (/var/task/node_modules/gm/lib/getters.js:68:12) {
  errno: 'EPIPE',
  code: 'EPIPE',
  syscall: 'write'
}

AWSのフォーラムに同じような投稿があり、内容をみると、どうやらNode 12.xではimage Magickがそのままでは使えないみたいです。
https://forums.aws.amazon.com/thread.jspa?threadID=314320
write EPIPEでググってもヒットしなかったのですがat afterWriteDispatched~でググると全部英語の記事の中、上記のフォーラムがヒットしました。

なかなかややこしそうな内容が書いてあるのでNode.jsをあきらめてJAVAかPythonで書き直そうかと思ったのですがぺちぱーの僕には時間がかかりそうだったのでどうにかこのまま使える方法を探し続けた結果、以下の記事を発見。
AWS lambda(Python 3.8)でimagemagickを使う

無事解決

上記の記事のあるようにimage-magick-lambda-layerをdeployしてLambdaのLayersに設定することでコードを何も変えずに実行できた。

LambdaのLayersってのを初めて使ったんでこれきかっけにもうちょっと勉強しないと

参考

ここに行き着くまでに色々紆余曲折しました。
http://aws-mobile-development.hatenablog.com/entry/2016/11/25/152052

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?