Ausgabe
Ich habe derzeit ein AWS Lambda, an dem ich gearbeitet habe und das ich gerne über ein Docker-Image erstellen und ausführen möchte. Ich verwende das aws-lambda-node:16
Bild als mein Basisbild. Aber ich kann das Docker-Image anscheinend nicht dazu bringen, den Handler aus meiner Javascript-Datei richtig aufzunehmen, um das Lambda auszuführen.
Ich habe die Ausführung von Lambda außerhalb des Docker-Image mit Lambda-Local getestet und das Lambda läuft in meiner lokalen Umgebung einwandfrei. Es scheint nur, dass etwas mit dem Docker-Container nicht stimmt.
Mein 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" ]
Meine Webpack-Konfiguration:
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;
Meine Handler-Funktion wird ordnungsgemäß in das Webpack-Bundle exportiert:
const handler = async () => {
...lambda logic
};
exports.handler = handler;
Ich bin ratlos, warum es mit dem Docker-Container nicht richtig funktioniert …
Lösung
Ihr CMD
ist, app.handle
während Ihr Funktionsname ist handler
. Sie sollten das CMD
in sein ändern app.handler
.
Beantwortet von – Mark B
Antwort geprüft von – David Marino (FixError Volunteer)