C# AWS Lambda 函数 - 找不到文件名为“LambdaTest、Culture=neutral、PublicKeyToken=null”的指定处理程序程序集

Dev*_*per 4 c# amazon-web-services aws-lambda

我正在尝试创建一个“Hello, World”AWS Lambda 函数,但有一个小小的更改:我需要使用 .zip 文件来部署它。为了实现这一目标,我做了以下工作:

从终端窗口

  1. 使用初始化新的 AWS Lambda 函数dotnet new lambda.EmptyFunction --name myFirstFunction --profile default --region us-east-1

  2. cd进入myFirstFunction

  3. 跑步dotnet publish ./src/myFirstFunction/myFirstFunction.csproj

  4. 导航到./src/myFirstFunction/bin/Debug/net6.0/publish

  5. 将所有文件压缩到一个名为Archive.zip.

从浏览器中的 AWS 控制台

  1. 导航到myFirstFunctionLambda 函数。

  2. 单击“代码源”部分中的“上传自 -> .zip 文件”

  3. 选择Archive.zip

  4. 成功上传后导航至“测试”选项卡

  5. 单击“测试事件”部分中的“测试”按钮

此时,我收到一条错误消息:

{
  "errorType": "LambdaValidationException",
  "errorMessage": "Could not find the specified handler assembly with the file name 'LambdaTest, Culture=neutral, PublicKeyToken=null'. The assembly should be located in the root of your uploaded .zip file.",
  "stackTrace": [
    "at Amazon.Lambda.RuntimeSupport.Bootstrap.UserCodeLoader.Init(Action`1 customerLoggingAction) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/UserCodeLoader.cs:line 95",
    "at Amazon.Lambda.RuntimeSupport.Bootstrap.UserCodeInitializer.InitializeAsync() in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/UserCodeInitializer.cs:line 46",
    "at Amazon.Lambda.RuntimeSupport.LambdaBootstrap.InitializeAsync() in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/LambdaBootstrap.cs:line 155"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我不确定如何解决这个问题。我在任何配置文件中都没有看到“LambdaTest”。所以,我不知道该标识符来自哪里。我需要做什么才能让这个基于 Lambda 的函数通过 AWS 控制台中的“测试”选项卡运行?

Dud*_*_SJ 14

发生的情况是 AWS 无法识别您的函数处理程序所在的位置。

当您在 AWS 中创建 Lambda 时,默认情况下它会分配一个 LambdaTest 处理程序。

在部署 Lambda 代码期间,您需要确保为您的函数部署正确的处理程序。

如果我知道您的代码和解决方案结构,我会更有帮助,但让我们尝试一下。

在你的下面/src/myFirstFunction可能有一个名为aws-lambda-tools-defaults.json. 在该文件中,将有一个键"function-handler",该值应指向您的函数处理程序,格式为:<project_name>::<namespace>.<class>::<method_name>

想象一下你有:

namespace Farm
{
    public class Banana
    {
        public string Harvest(string season, ILambdaContext context)
        {
            ...
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

你的处理程序应该是myFirstFunction::Farm.Banana::Harvest

更多信息:https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/lambda-creating-project-in-visual-studio.html


如果您不使用 Visual Studio:

  • 访问AWS管理控制台;
  • 导航到您的 Lambda 函数myFirstFunction
  • 代码选项卡下,您将看到运行时设置。按编辑
  • 按照我上面提到的格式更改处理程序名称(<project_name>::<namespace>.<class>::<method_name>);
  • 保存并测试