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

使用.NET6 Lambda构建CloudFormation自定义资源时无法访问NuGet包

解决.NET6 AWS Lambda自定义资源依赖缺失问题

针对你遇到的CloudFormation自定义资源Lambda无法访问NuGet包的问题,按以下步骤排查修复:

1. 修正项目文件(.csproj)配置

确保你的MyLambda.csproj包含以下关键配置,强制依赖文件被复制到输出目录:

<PropertyGroup>
  <TargetFramework>net6.0</TargetFramework>
  <AWSProjectType>Lambda</AWSProjectType>
  <!-- 强制复制所有锁文件中的依赖到输出目录 -->
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  <!-- 禁用ReadyToRun编译,避免ARM64架构下的依赖打包异常 -->
  <PublishReadyToRun>false</PublishReadyToRun>
  <!-- 指定ARM64目标架构 -->
  <PlatformTarget>Arm64</PlatformTarget>
  <!-- 匹配Lambda的Linux ARM64运行时 -->
  <RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
</PropertyGroup>

2. 改用更可控的打包方式

放弃dotnet lambda package,直接用dotnet publish生成输出后手动打包,避免Lambda Tools的潜在打包异常:

# 发布项目到本地目录
dotnet publish ../../MyLambdaProject -c Release -f net6.0 -r linux-arm64 --self-contained false -o ./publish
# 打包发布目录内容(注意不要包含publish父目录)
zip -r ../myLambdaProject.zip ./publish/*

3. 调整Serverless Framework配置

在serverless.yml中明确指定打包文件,禁用Serverless自动打包逻辑,防止依赖被意外过滤:

service: your-service-name

provider:
  name: aws
  runtime: dotnet6
  architecture: arm64
  # 其他配置...

functions:
  CustomResourceLambda:
    handler: MyLambdaProject::MyLambdaProject.Function::FunctionHandler
    package:
      artifact: ../myLambdaProject.zip
      individually: true
    # 自定义资源相关配置...

4. 验证打包内容

解压生成的myLambdaProject.zip,检查publish目录下是否包含所有依赖的NuGet包DLL文件(如AWSSDK.Core.dll、AWSSDK.CloudFormation.dll等)。如果缺失,确认项目依赖引用正确,重新执行发布命令。

5. 自定义资源额外检查

  • 确认CloudFormation自定义资源的Lambda执行角色具备基本Lambda执行权限(依赖缺失通常与权限无关,但需排除权限导致的间接问题)。
  • 测试时可暂时简化自定义资源逻辑,仅输出已加载的依赖列表,快速定位是否为特定依赖的加载异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:47:07