Skip to content

S3にアップロードされた画像をWebpに変換するLambda関数

License

Notifications You must be signed in to change notification settings

nekochans/convert-to-webp

Repository files navigation

convert-to-webp

ci cd-staging cd-production

S3 にアップロードされた画像を Webp に変換する Lambda 関数です。

Getting Started

環境変数の設定

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 クレデンシャルの設定

名前付きプロファイル を利用しています。

AWS_PROFILE で指定した値を利用するようにして下さい。

デプロイ

以下の手順です。

  1. docker-compose up --build -d でコンテナを起動します
  2. docker-compose exec node bash でコンテナに入る
  3. npm ci で依存パッケージをインストール
  4. npm run deploy を実行する

必ず Docker コンテナ内でこれらの作業を行って下さい。

Webp フォーマットへの変換は sharp を利用しているので、予めビルドされたネイティブモジュール(バイナリ)が Lambda の実行環境と異なると正常に動作しません。

詳しくは AWS Lambda(Node.js)に sharp(Native Module)をデプロイする方法 をご覧下さい。

GitHubActions を利用した自動デプロイでも上記の手順を用いて Docker 内でデプロイを行っています。

Lambda 関数の仕様

TRIGGER_BUCKET_NAME で指定した S3 バケットにアップロードされたファイルを Webp に変換し DESTINATION_BUCKET_NAME で指定した S3 バケットに移動します。

対応している画像フォーマットは .png だけですが、簡単な拡張で他の画像フォーマットにも対応可能です。

その他

ディレクトリ構成は以下の公式テンプレートを利用しています。

sls create -t aws-nodejs-typescript -p [任意のディレクトリ名] でプロジェクトの初期構成を作成して、そこから微調整しています。

https://github.com/serverless/serverless/tree/master/lib/plugins/create/templates/aws-nodejs-typescript