Mil*_*lan 6 amazon-web-services aws-cdk
使用AWS SAM时,我曾经运行build命令,该命令将遍历我所有的Lambda函数包并安装它们的依赖项(npm install在它们上运行)。
如何使用AWS CDK实现相同的行为?它似乎不是自动执行的,还是我缺少了什么?
小智 12
您可以使用本地构建脚本轻松完成此操作,如下所示:
const websiteRedirectFunction = new lambda.Function(
this,
"RedirectFunction",
{
code: lambda.Code.fromAsset(path.resolve(__dirname, "../../redirect"), {
bundling: {
command: [
"bash",
"-c",
"npm install && npm run build && cp -rT /asset-input/dist/ /asset-output/",
],
image: lambda.Runtime.NODEJS_12_X.bundlingDockerImage,
user: "root",
},
}),
handler: "index.redirect",
tracing: lambda.Tracing.ACTIVE,
runtime: lambda.Runtime.NODEJS_12_X,
}
);
Run Code Online (Sandbox Code Playgroud)
假设您有一个要构建并上传 Lambda 的处理程序和 node_modules 的文件夹。
来自文档:
使用 lambda.Code.fromAsset(path) 时,可以通过在 Docker 容器中运行命令来捆绑代码。资产路径将安装在 /asset-input 处。Docker 容器负责将内容放入 /asset-output。/asset-output 处的内容将被压缩并用作 Lambda 代码。
这个功能确实缺失。您需要编写自己的包装。请记住,如果任何依赖项(例如 Numpy)使用具有本机 C 代码的共享库,则 lambda 依赖项必须构建在与 AWS (Linux) 中的目标系统具有相同架构的系统上。
有一个可用的 Docker 镜像,旨在提供一个尽可能接近 AWS 的环境:lambci/lambda:build-python3.7
因此,如果您在任何非 Linux 架构上进行构建,则可能需要它来实现一些更复杂的 lambda 函数。
编辑:我开源了用于 lambda 打包的 Python 代码:https://gitlab.com/josef.stach/aws-cdk-lambda-asset
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |