S3 にアップロードされた画像を Webp に変換する Lambda 関数です。
direnv 等を利用して環境変数を設定します。
export AWS_PROFILE=利用するAWSプロファイル名を指定
export DEPLOY_STAGE=デプロイステージを設定 .e.g. dev, stg, prod
export TRIGGER_BUCKET_NAME=Lambda関数実行のトリガーとなるS3バケット名を指定
export DESTINATION_BUCKET_NAME=変換済のWebp画像がアップロードされるS3バケット名を指定
名前付きプロファイル を利用しています。
AWS_PROFILE
で指定した値を利用するようにして下さい。
以下の手順です。
docker-compose up --build -d
でコンテナを起動しますdocker-compose exec node bash
でコンテナに入るnpm ci
で依存パッケージをインストールnpm run deploy
を実行する
必ず Docker コンテナ内でこれらの作業を行って下さい。
Webp フォーマットへの変換は sharp を利用しているので、予めビルドされたネイティブモジュール(バイナリ)が Lambda の実行環境と異なると正常に動作しません。
詳しくは AWS Lambda(Node.js)に sharp(Native Module)をデプロイする方法 をご覧下さい。
GitHubActions を利用した自動デプロイでも上記の手順を用いて Docker 内でデプロイを行っています。
TRIGGER_BUCKET_NAME
で指定した S3 バケットにアップロードされたファイルを Webp に変換し DESTINATION_BUCKET_NAME
で指定した S3 バケットに移動します。
対応している画像フォーマットは .png
だけですが、簡単な拡張で他の画像フォーマットにも対応可能です。
ディレクトリ構成は以下の公式テンプレートを利用しています。
sls create -t aws-nodejs-typescript -p [任意のディレクトリ名]
でプロジェクトの初期構成を作成して、そこから微調整しています。