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

部署AWS Lambda Stack时遇Cannot Find Asset错误求助

AWS CDK部署Lambda函数时出现Cannot Find Asset错误的解决方案

问题背景

尝试部署包含Lambda函数的AWS CDK栈,Lambda运行代码位于source目录下的services文件夹中,但执行cdk synth时触发Cannot Find Asset错误,调整文件位置、添加.js后缀均未解决。

相关代码

CDK栈代码(TypeScript)

import { Stack, StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import {
  Code,
  Function as LambdaFunction,
  Runtime,
} from "aws-cdk-lib/aws-lambda";
import { join } from "path";

export class LambdaStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    new LambdaFunction(this, "getBooksLambda", {
      runtime: Runtime.NODEJS_18_X,
      handler: "getBooks.main",
      code: Code.fromAsset(join(__dirname, "..", "..", "services", "getBooks")),
    });
  }
}

Lambda函数代码(JavaScript)

exports.main = async function(event, context) {
    return {
        statusCode: 200,
        body: JSON.stringify({
            message: "Hello from Lambda"
        })
    }
}

报错信息

Error: Cannot find asset at C:\Users\User\Documents\Bookeroo\bookeroo-cdk\src\services\getBooks
    at new AssetStaging (C:\Users\User\Documents\Bookeroo\bookeroo-cdk\node_modules\aws-cdk-lib\core\lib\asset-staging.js:1:2119)
    at new Asset (C:\Users\User\Documents\Bookeroo\bookeroo-cdk\node_modules\aws-cdk-lib\aws-s3-assets\lib\asset.js:1:1141)
    at AssetCode.bind (C:\Users\User\Documents\Bookeroo\bookeroo-cdk\node_modules\aws-cdk-lib\aws-lambda\lib\code.js:5:3487)
    at new Function (C:\Users\User\Documents\Bookeroo\bookeroo-cdk\node_modules\aws-cdk-lib\aws-lambda\lib\function.js:1:10003)
    at new LambdaStack (C:\Users\User\Documents\Bookeroo\bookeroo-cdk\src\infra\stacks\LambdaStack.ts:13:32)
    at Object.<anonymous> (C:\Users\User\Documents\Bookeroo\bookeroo-cdk\src\infra\Launcher.ts:12:1)
    at Module._compile (node:internal/modules/cjs/loader:1241:14)
    at Module.m._compile (C:\Users\User\Documents\Bookeroo\bookeroo-cdk\node_modules\ts-node\src\index.ts:1618:23)
    at Module._extensions..js (node:internal/modules/cjs/loader:1295:10)
    at Object.require.extensions.<computed> [as .ts] (C:\Users\User\Documents\Bookeroo\bookeroo-cdk\node_modules\ts-node\src\index.ts:1621:12)

问题分析与解决步骤

从报错路径C:\Users\User\Documents\Bookeroo\bookeroo-cdk\src\services\getBooks可以看出,CDK尝试在src目录下查找services文件夹,但你明确说明代码位于source目录下——路径计算错误是核心问题。

1. 修正Asset路径

当前CDK代码中,__dirname指向的是CDK栈文件所在的src/infra/stacks目录,join(__dirname, "..", "..", "services", "getBooks")会定位到src/services/getBooks,但实际代码在项目根目录下的source/services/getBooks。

调整路径计算,从当前栈文件往上回溯到项目根目录,再指向source目录:

code: Code.fromAsset(join(__dirname, "../../../source/services/getBooks")),

2. 验证路径正确性

可以在代码中临时添加路径打印,确认计算后的路径是否匹配实际文件位置:

const lambdaCodePath = join(__dirname, "../../../source/services/getBooks");
console.log("Lambda代码路径:", lambdaCodePath); // 运行时查看输出是否正确

3. 确认文件/目录存在

  • 确保source/services/getBooks目录(或getBooks.js文件,如果是单个文件的话)确实存在于项目根目录,与src目录同级。
  • 如果getBooks是单个文件而非目录,路径需要指向具体的.js文件:
    code: Code.fromAsset(join(__dirname, "../../../source/services/getBooks.js")),
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:13:23