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

部署Go语言AWS Lambda函数遇bootstrap找不到错误的技术问询

解决AWS Lambda自定义运行时找不到bootstrap的问题

问题原因

使用Runtime_PROVIDED_AL2()自定义运行时的Lambda函数,默认会在/var/task(即打包后的代码根目录)下寻找名为bootstrap的可执行文件。你的情况是bootstrap存在于子目录stock-scheduler/intraday/1min/中,且Handler字段在自定义运行时中不生效(Lambda会忽略该字段),因此Lambda无法找到启动文件。

解决方案

方案1:将bootstrap输出到代码根目录

修改构建命令,把编译后的二进制文件直接输出到src目录根路径:

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o src/bootstrap src/stock-scheduler/intraday/1min/bootstrap.go

然后调整CDK配置,Handler字段可以设为任意值(自定义运行时会忽略它):

IntradaySchedulerLfn := awslambda.NewFunction(stack, &name, &awslambda.FunctionProps{
    FunctionName: jsii.String(name),
    Runtime:      awslambda.Runtime_PROVIDED_AL2(),
    Code:         awslambda.AssetCode_FromAsset(jsii.String("src"), nil),
    Handler:      jsii.String("ignored"), // 自定义运行时忽略该字段
    Timeout:      awscdk.Duration_Seconds(jsii.Number(300)),
    Vpc:          vpcDetails.VPC,
    SecurityGroups: &[]awsec2.ISecurityGroup{
        vpcDetails.DefaultVPCSG,
    },
    Environment: &map[string]*string{
        "ENVIRONMENT":          jsii.String("prod"),
        "ALPHAVANTAGE_API_KEY": jsii.String("89VZ0I4T4ZB424ED"),
    },
    MemorySize:    jsii.Number(256),
    LoggingFormat: awslambda.LoggingFormat_JSON,
    Tracing:       awslambda.Tracing_ACTIVE,
})

这样打包后bootstrap会位于/var/task/bootstrap,Lambda能直接找到并执行。

方案2:通过Command指定自定义bootstrap路径

如果不想改变二进制文件的输出位置,可以在CDK配置中添加Command属性,明确告诉Lambda执行子目录中的bootstrap:

IntradaySchedulerLfn := awslambda.NewFunction(stack, &name, &awslambda.FunctionProps{
    FunctionName: jsii.String(name),
    Runtime:      awslambda.Runtime_PROVIDED_AL2(),
    Code:         awslambda.AssetCode_FromAsset(jsii.String("src"), nil),
    Handler:      jsii.String("ignored"),
    Command:      &[]*string{jsii.String("./stock-scheduler/intraday/1min/bootstrap")}, // 指定启动命令
    Timeout:      awscdk.Duration_Seconds(jsii.Number(300)),
    Vpc:          vpcDetails.VPC,
    SecurityGroups: &[]awsec2.ISecurityGroup{
        vpcDetails.DefaultVPCSG,
    },
    Environment: &map[string]*string{
        "ENVIRONMENT":          jsii.String("prod"),
        "ALPHAVANTAGE_API_KEY": jsii.String("89VZ0I4T4ZB424ED"),
    },
    MemorySize:    jsii.Number(256),
    LoggingFormat: awslambda.LoggingFormat_JSON,
    Tracing:       awslambda.Tracing_ACTIVE,
})

此方法无需修改构建命令,Lambda会按照指定路径执行bootstrap,同时保留src/utils/下的共享代码。

补充说明

你之前修改Code路径到子目录能正常运行,是因为此时bootstrap位于打包后的根目录(/var/task/bootstrap),但这种方式会丢失src/utils/下的共享代码,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:51:18