2

いくつかの AWS lambda@edge でシャープを使用しようとしています。アイデアは、要求されたときに画像のサイズを変更してキャッシュすることです(これを参照)。

また、ラムダをデプロイするために serverless -webpackでサーバーレスを使用しています。

ラムダをデプロイでき、AWS コンソールでテストするとすべてうまくいきます。

ただし、これらは lamda@edge であり、cloudwatch リクエスト/レスポンス トリガーとして使用されます。したがって、ラムダの最大サイズは 1Mb です。

私の問題は、そのサイズに近づくことさえできないように見えることです.達成できる最高のものは11.6Mbでした. そして、その最初のリンクに見られるように、それは可能であるようです.

これは、34.7Mb ラムダになるサーバーレス構成です。

custom:
  webpack:
    includeModules:
      forceExclude:
        - aws-sdk
    packagerOptions:
      scripts:
        - rm -rf node_modules/sharp && docker run -v "$PWD":/var/task lambci/lambda:build-nodejs10.x npm install sharp

package: 
  exclude:
    - .env
    - .git/**
    - .gitlab-ci.yml
    - tests*
  excludeDevDependencies: true
  individually: true

そして、これで11.6Mbになりました:

custom:
  webpack:
    includeModules:
      forceExclude:
        - aws-sdk
    packagerOptions:
      scripts:
        - npm rebuild sharp --target=10.15.0 --target_arch=x64 --target_platform=linux

package: 
  exclude:
    - .env
    - .git/**
    - .gitlab-ci.yml
    - tests*
  excludeDevDependencies: true
  individually: true

package.exclude も試してみましたが、うまくいきませんでした:

- node_modules/**
- '!node_modules/sharp/**'

これは私のwebpack構成です:

const path = require('path');
const slsw = require('serverless-webpack');
const nodeExternals = require('webpack-node-externals');

const entries = {};

Object.keys(slsw.lib.entries).forEach(key => (entries[key] = ['./source-map-install.js', slsw.lib.entries[key]]));

module.exports = {
  mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
  entry: slsw.lib.entries,
  devtool: 'source-map',
  resolve: {
    extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'],
  },
  //   externals: ['sharp'], #tried that too
  externals: [nodeExternals()],
  output: {
    libraryTarget: 'commonjs',
    path: path.join(__dirname, '.webpack'),
    filename: '[name].js',
  },
  target: 'node',
  module: {
    rules: [
      // all files with a `.ts` or `.tsx` extension will be handled by `ts-loader`
      { test: /\.ts?$/, loader: 'ts-loader', options: { happyPackMode: true } },
    ],
  },
};

ローカルで実行すると、パッケージ化されていることがわかります... node_modules フォルダーにはシャープとその依存関係があるようです。でも最大のフォルダーはシャープです。

必要のないものをシャープ フォルダー内にパッケージ化していると思われますが、何を理解できないようです。

何か助けはありますか?

ありがとう

更新: より注意深く読むと、シャープな (起点応答) サイズ制限が必要な関数は 5Mb のようです。その機能のためだけにシャープをパッケージ化する方法を見つける必要があります。他の機能(ビューアーリクエスト)では必要ありませんが、Webpackは両方に配置しているようです。これについて何か助けはありますか?

4

1 に答える 1