GithubHelp home page GithubHelp logo

tokium / thumbnail-generator-lambda Goto Github PK

View Code? Open in Web Editor NEW
3.0 7.0 0.0 404 KB

Generate PDF previews and image thmbnails on AWS Lambda

License: GNU Affero General Public License v3.0

JavaScript 9.66% TypeScript 90.34%
aws-lambda-node serverless ghostscript imagemagick poppler

thumbnail-generator-lambda's Introduction

Thumbnail Generator Lambda

PDFのプレビュー生成、および画像のサムネイル生成処理を行うLambda Function

Requirements

実行、リリースにはServerless frameworkを使用するため、Credentialsなど必要な設定をしておく必要がある.

また、以下のソフトウェアを使用するため、それぞれ実行環境にインストールしておくこと.

  • Ghostscript
  • ImageMagick
  • poppler

Lambda上では、以下のLayerを使用するため、これらも予めリリースしておく必要がある.

Specification

S3の特定のprefixに関して、S3 Objectが作成・更新された時に、SNSのトピックにイベントが通知される.
このイベントをトリガーとして、以下のFunctionが実行される.

PDFのプレビュー生成

PDFのプレビューをGhostscriptを使って生成する.

  1. アップロードされたファイルをダウンロード
  • 画像ファイルの場合は処理を終了
  1. 1のファイルを gs コマンドを使ってJPEGに変換する
  2. 2で作成されたファイルをアップロードする
  • 同じprefixでアップロードされることにより、次の画像のサムネイル生成処理が実行される

画像のサムネイル生成

画像のサムネイルをImageMagickを使って生成する.

  1. アップロードされたファイルをダウンロード
  • PDFファイルの場合は処理を終了
  1. 1のファイルから、EXIF等のメタデータを除去した画像ファイルを作成する
  • JPEG, PNGの場合はJPEG、GIFの場合はGIFを、縮尺を維持したまま作成する
  • 長辺は最大で3840px以下にする
  1. 2で作成されたファイルをアップロードする
  2. 2で作成されたファイルを元に、サムネイル画像を作成する(画像のサイズは、長辺が128pxのもの、短辺が512pxのものの2種類)
  • JPEG, PNG: 5MBに収まるように変換
  • GIF: 背景色を白にして、容量を最適化したGIFを生成
  1. 4で生成されたファイルを順次アップロードする

Usage

Command

# ローカル実行
yarn start

# リモート実行
env S3_BUCKET=test S3_OBJECT_KEY=key.jpg yarn start:remote -f generate-thumbnails

# serverlessコマンドのオプションを使用可能
# 詳細はドキュメントを参照(https://www.serverless.com/framework/docs/)
env S3_BUCKET=test S3_OBJECT_KEY=key.jpg yarn start:remote -f generate-thumbnails --stage prod --region us-east-1

# テスト
yarn run test

# E2Eテスト(ただし、特定のkeyでファイルがアップロードされている必要がある. 詳細は `test/data/index.json` を参照)
S3_BUCKET=your-bucket S3_OBJECT_PREFIX=prefix yarn test:e2e:staging

Release

# サービス全体のリリース
# デフォルトで ap-northeast-1 にリリースされる
yarn release

# Lambda Functionのコード修正のみのリリース
yarn release -f generate-pdf-preview

# serverlessコマンドのオプションを使用可能
# 詳細はドキュメントを参照(https://www.serverless.com/framework/docs/)
yarn release --stage prod --region us-east-1

Configuration

  1. ダウンロード元(=アップロード先)となるS3バケット

    SNSのトピックの設定の他に、Lambda Functionの権限設定のためにオプションで指定する必要がある.

    # 環境変数で指定する
    S3_BUCKET_LIST=test yarn release
    
    # 複数のバケットを使う場合
    S3_BUCKET_LIST=test1,test2 yarn release
  2. サムネイルのアップロード先

    生成されたサムネイルは、元のファイルと同じバケットにアップロードされるが、prefixを変更することは可能.

    # 環境変数で指定する
    env THUMBNAIL_DESTINATION_PREFIX=dest yarn release
  3. サービス名称 serverless.ymlのserviceで指定する名称を変更できる.

    # 環境変数で指定する
    SLS_SERVICE=your-service-name yarn release

LICENSE

AGPL 3.0

なお、内部でGhostscript, ImageMagick, Popplerを使用している.

thumbnail-generator-lambda's People

Contributors

dependabot[bot] avatar homuler avatar motoshi-nishihira avatar staka121 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.