You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python CDK打包部署.NET 8代码到AWS Lambda?

问题:Python CDK部署.NET 8 Lambda时遇到二进制文件未正确安装错误

使用Python版AWS CDK构建、打包并部署.NET 8代码为AWS Lambda函数时,运行代码出现报错:

Error: .NET binaries for Lambda function are not correctly installed in the /var/task directory of the image when the image was built.

原Python CDK代码:

from constructs import Construct
from aws_cdk import (
    Duration,
    Stack,
    aws_iam as iam,
    aws_lambda as lambda_
)

csharp_lambda = lambda_.Function(
    self, "PythonCdkDotnetLambda",
    runtime=lambda_.Runtime.DOTNET_8,
    handler="helloworld::helloworld.Functions::ExecuteFunc",  
    code=lambda_.Code.from_asset("../path/to/src"),
)

在.NET版CDK中,可通过以下BundlingOptions配置完成代码构建与打包:

//C# Code
var buildOption = new BundlingOptions()
{
    Image = Runtime.DOTNET_8.BundlingImage,
    User = "root",
    OutputType = BundlingOutput.ARCHIVED,
    Command = new string[]{
        "/bin/sh",
        "-c",
        " dotnet tool install -g Amazon.Lambda.Tools"+
        " && dotnet build"+
        " && dotnet lambda package --project-location helloworld/ --output-package /asset-output/function.zip"
    }
};

请问如何在Python CDK中配置类似的打包选项以部署.NET 8 Lambda?或如何在部署前将.NET代码构建为所需的二进制文件?


解决方案

方式一:在Python CDK中配置BundlingOptions

直接在lambda_.Code.from_asset中指定bundling参数,复刻.NET版CDK的打包逻辑:

from constructs import Construct
from aws_cdk import (
    Duration,
    Stack,
    aws_lambda as lambda_,
    BundlingOutput,
)

class MyStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        csharp_lambda = lambda_.Function(
            self, "PythonCdkDotnetLambda",
            runtime=lambda_.Runtime.DOTNET_8,
            handler="helloworld::helloworld.Functions::ExecuteFunc",
            code=lambda_.Code.from_asset(
                "../path/to/src",
                bundling={
                    "image": lambda_.Runtime.DOTNET_8.bundling_image,
                    "user": "root",
                    "output_type": BundlingOutput.ARCHIVED,
                    "command": [
                        "/bin/sh",
                        "-c",
                        "dotnet tool install -g Amazon.Lambda.Tools && "
                        "export PATH=\"$PATH:/root/.dotnet/tools\" && "
                        "dotnet build && "
                        "dotnet lambda package --project-location helloworld/ --output-package /asset-output/function.zip"
                    ]
                }
            ),
        )

关键注意点:

  • 必须添加export PATH="$PATH:/root/.dotnet/tools",确保dotnet lambda命令能被系统找到
  • 根据你的实际项目结构,调整--project-location的路径

方式二:提前手动构建.NET代码

如果不想依赖CDK自动构建,可提前手动生成Lambda部署包:

  1. 安装Amazon.Lambda.Tools工具:
dotnet tool install -g Amazon.Lambda.Tools
  1. 进入.NET项目目录,执行打包命令:
dotnet lambda package --output-package ./function.zip
  1. 在Python CDK中直接引用打包好的zip文件:
csharp_lambda = lambda_.Function(
    self, "PythonCdkDotnetLambda",
    runtime=lambda_.Runtime.DOTNET_8,
    handler="helloworld::helloworld.Functions::ExecuteFunc",
    code=lambda_.Code.from_asset("../path/to/function.zip"),
)

内容的提问来源于stack exchange,提问作者user20358

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:33:12