🐷
AWS Lambda 上でらく〜に canvas を動かす
はじめに
目標は canvas を AWS Lambda 上で動かすことです
この記事の内容は本質的には下の記事に全部書いてあります
canvas について
を実装したものはおそらく全部 canvas です。以下のような実装があります
- 各種ブラウザ上での実装
- node-canvas (npm package 名は canvas)
- @napi-rs/canvas (今回の推し)
node-canvas はしんどい時がある
下の記事のような方針もありますが、node-canvas にはネイティブなライブラリへの依存があるので、変わった環境に入れようとすると、ちょっと大変 (だと思います)
また、環境を移行したりするときなども大変そうです
そこで @napi-rs/canvas
ネイティブなライブラリへの依存がゼロなので、とてもらく〜です。AWS Lambda 上で動かすには
のようなものも提供されているようですが、使わなくてもいけそうなので、使わないで続行してみます
linux, x64 用のパッケージが欲しいです。docker などを立ち上げるのは面倒です。下のようにすると linux, x64 以外の環境でも linux, x64 用のパッケージを簡単にインストールできます
# canvas の名称で @napi-rs/canvas を入れる
npm install canvas@npm:@napi-rs/canvas
# node_modules/@napi-rs 配下を
# node_modules/@napi-rs/canvas-linux-x64-gnu に強制的に差し替える
rm -rf node_modules/@napi-rs
npm install --force @napi-rs/canvas-linux-x64-gnu
npm install
に --force がついているのは、「linux, x64 以外の環境でも linux, x64 用のパッケージを簡単にインストール」という非合法行為をしているからです。npm install --platform=linux --arch=x64
とかだとうまくいきませんでした
これを AWS Lambda Layers に上げれば完了です。
最後に Serevrlesss Framework での構築例を載せます
service: canvasService
plugins:
- serverless-layers
package:
# 適当な設定
provider:
runtime: nodejs18.x
# 適当な設定
functions:
funcUsingCanvas:
handler: # 適当に指定
custom:
serverless-layers:
# canvas 用のレイヤー
- canvas-layer:
functions:
- funcUsingCanvas
customInstallationCommand: |
npm install --production --only=prod
# node_modules/@napi-rs 配下を
# node_modules/@napi-rs/canvas-linux-x64-gnu に強制的に差し替える
rm -rf node_modules/@napi-rs
npm install --force @napi-rs/canvas-linux-x64-gnu # 実際には version 指定した方がよさそう
Discussion