繁体   English   中英

无法在 docker 图像中运行 lambda

[英]Unable to run lambda in docker image

我目前有一个 AWS Lambda,我一直在研究它,我想从 docker 图像构建和运行它。 我使用aws-lambda-node:16图像作为我的基本图像。 但我似乎无法获得 docker 图像以从我的 javascript 文件中正确选取处理程序来运行 lambda。

我已经使用lambda-local测试了 lambda 在 docker 图像之外的执行,并且 lambda 在我的本地环境中运行良好。 似乎 docker 容器出了问题。

我的 Dockerfile:

FROM amazon/aws-lambda-nodejs:16

COPY dist/blacklist-ips/app.js ${LAMBDA_TASK_ROOT}
COPY package.json pnpm-lock.yaml ${LAMBDA_TASK_ROOT}/

RUN npm i -g pnpm && pnpm install --production

CMD [ "app.handle" ]

我的 Webpack 配置:

import { resolve } from 'path';

import { default as webpack } from 'webpack';

import TerserPlugin from 'terser-webpack-plugin';

const config = (env: any, argv: any): webpack.Configuration => {
  return {
    mode: env.production ? 'production' : 'development',
    entry: {
      'blacklist-ips': resolve(__dirname, 'src', 'blacklist-ips', 'blacklist-ips.ts')
    },
    output: {
      path: resolve(__dirname, 'dist'),
      filename: '[name]/app.js',
      libraryTarget: 'commonjs2'
    },
    devtool: false,
    target: 'node',
    externals: [
      '@aws-sdk/client-cloudwatch-logs',
      '@aws-sdk/client-wafv2',
      'luxon',
      'tslib'
    ],
    resolve: {
      extensions: [ '.ts', '.js', '.json' ]
    },
    module: {
      rules: [
        {
          test: /.ts$/,
          loader: 'ts-loader'
        }
      ]
    },
    optimization: {
      minimize: env.production,
      minimizer: [
        new TerserPlugin({
          parallel: true,
          terserOptions: {
            mangle: false
          }
        })
      ]
    }
  }
}

export default config;

我的处理程序 function 正在 webpack 包中正确导出:

const handler = async () => {
  ...lambda logic
};
exports.handler = handler;

我很困惑为什么它不能与 Docker 容器一起正常工作......

你的CMDapp.handle而你的 function 名字是handler 您应该将CMD更改为app.handler

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM