Не удалось найти метод - AWS. NET Core 3.1 Mock Lambda Test Tool - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь использовать / настроить AWS. NET Core 3.1 Mock Lambda Test Tool.

В настоящее время я собираюсь запустить приложение с помощью инструмента, однако, когда я пытаюсь отправить запрос, я получаю сообщение об ошибке «Не удалось найти метод Init».

Внутри aws-lambda-tools-defaults.json Я установил для function-handler следующее:

"function-handler": "Some.Example.Assembly::Some.Example.Namespace.LambdaProgram::Init"

Файл LambdaProgram.cs выглядит следующим образом:

using Amazon.Lambda.AspNetCoreServer;
using Microsoft.AspNetCore.Hosting;

namespace Some.Example.Namespace
{
    public class LambdaProgram : APIGatewayHttpApiV2ProxyFunction
    {
        protected override void Init(IWebHostBuilder builder)
        {
            builder.UseStartup<Startup>();
        }
    }
}

Формат мне кажется правильным, если я не читаю документацию ?

Внутри каталога bin/ dll и exe имеют совпадающие имена, т.е. «Some.Example.Assembly.exe» и «Some.Example.Assembly.dll».

Если Я изменяю путь function-handler, затем могу заставить его выдать ошибку для типа. Но я не понимаю, почему не может найти функцию Init? Приложение компилируется, и LambdaProgram реализует интерфейс AWS по мере необходимости.

Любая помощь была бы удивительной, я действительно хочу иметь возможность локально тестировать / отлаживать перед развертыванием (Это существующее приложение в производство - это всего лишь случай ламабда-миграции)

1 Ответ

1 голос
/ 27 апреля 2020

Будучи крайне запутанным в течение нескольких часов, я нашел решение. Это может быть в документации, и я не смог ее увидеть, но function-handler НЕ является функцией внутри класса LambdaProgram (или как вы его называете).

Скорее вы должны использовать FunctionHandlerAsync, который, я думаю, наследуется.

Я нашел это, клонировав официальный репозиторий и просмотрев их образцы, там есть комментарий, детализирующий это!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using System.IO;

namespace BlueprintBaseName._1
{
    /// <summary>
    /// This class extends from APIGatewayProxyFunction which contains the method FunctionHandlerAsync which is the 
    /// actual Lambda function entry point. The Lambda handler field should be set to
    /// 
    /// BlueprintBaseName.1::BlueprintBaseName.1.LambdaEntryPoint::FunctionHandlerAsync
    /// </summary>
    public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction

        protected override void Init(IWebHostBuilder builder)
        {
            builder
                .UseStartup<Startup>();
        }
    }
}
...