[Amplify] ARM マシンでの開発で Amplify の Lambda Layer に x64 の sharp をインストールしたい
8 ヶ月ぶりの更新がこんなしょぼい内容であれですが、メモ代わりということで。
前提
課題
AWS Lambda で sharp を利用するには arch=x64 で npm install 必要。 sharp.pixelplumbing.com
従って
npm install --arch=x64 sharp
でデプロイしたいがamplify push
の際にはnpm install
でインストールされるようなのでオプション指定をどうする?
※ x64 のマシンで運用する分には問題ありませんが、ARM のマシン(例:M1 Mac)の際に端末のアーキテクチャでインストールされてしまいます。
対策
※ 最善策である保証はありません。
script の postinstall を利用して ARM でインストール後に x64 でのインストールで上書きするようにします。
{ "version": "1.0.0", "description": "", "main": "index.js", "dependencies": { "sharp": "^0.31.0" }, "scripts": { "postinstall": "SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm install --arch=x64 --platform=linux --libc=glibc sharp" } }
これによって npm install
した際に x64 で sharp がインストールされます。
めでたし。めでたし。
2022-09-13 追記
初回は問題ないのですが、複数回 push していると sharp/build ディレクトリが生成されない現象がありました。
npm install でそもそも端末アーキテクチャ依存の sharp をインストールしないように preinstall で消すことで対応できました。
{ "version": "1.0.0", "description": "", "main": "index.js", "dependencies": { "sharp": "^0.31.0" }, "scripts": { "preinstall": "npm uninstall sharp", "postinstall": "SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm install --arch=x64 --platform=linux --libc=glibc sharp" } }