Я начал проект с использованием dotnet new serverless.NativeAOT, поэтому мой проект использует структуру аннотаций, а также компилируется в Native AOT. Я могу развернуть свою функцию в лямбде aws, но она выдает исключение нулевой ссылки. Я пытался настроить инструмент ложного лямбда-тестирования, чтобы установить некоторые точки останова и диагностировать это, но все мои попытки не увенчались успехом. Я использую Visual Studio 2022 и могу запустить инструмент макетного тестирования, но события, поставленные в очередь на вкладке «Исполняемая сборка», просто висят там и не достигают точек останова, которые я установил в Startup.cs или Functions.cs.
запускSettings.json
{
"profiles": {
"Lambda Runtime API": {
"commandName": "Executable",
"commandLineArgs": "--port 5050",
"executablePath": "/Users/xxx/.dotnet/tools/dotnet-lambda-test-tool-8.0.exe",
"workingDirectory": "/Users/xxx/source/repos/SendTunesServerless/SendTunesServerless/src/SendTunesServerless/bin/Debug/net8.0",
"environmentVariables": {
"AWS_LAMBDA_RUNTIME_API": "localhost:5050",
"AWS_PROFILE": "default",
"AWS_REGION": "us-east-1"
}
}
}
}
Стартап.cs
[LambdaStartup]
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ISpotifyAccessTokenService, SpotifyAccessTokenService>();
services.AddHttpClient<ISpotifyService, SpotifyService>(client =>
{
client.BaseAddress = new Uri("https://api.spotify.com/v1/");
});
}
}
Кто-нибудь смог успешно протестировать собственный AOT .NET8.0 с помощью инструмента макетного тестирования лямбда?
Я прошел https://github.com/aws/aws-lambda-dotnet/tree/master/Tools/LambdaTestTool?ref=rahulpnath.com#configure-for-visual-studio и тестирование исполняемых сборок ссылка в инструменте. Я ожидаю, что будет достигнута точка останова или возникнет ошибка, но события, просто находящиеся в очереди, заставляют меня думать, что моя настройка неверна.
Да, мне до сих пор не удалось отладить проблему.
Рекомендую вам посмотреть раздел «Шаг 7. Отладка и тестирование лямбда-функций в Visual Studio (исполняемые сборки)» в моем блоге coderjony.com/blogs/…. Это может помочь.
К сожалению, это не сработало. Я пробовал как с моим текущим проектом, так и с новым шаблоном. Без указания дополнительной конфигурации, которая у меня есть в файле launchSettings.json, отладчик просто завершает работу с кодом 0. Когда я указываю дополнительную конфигурацию, отладчик сообщает, что ему не удалось привязаться к уже используемому адресу {localhost}:5050. Отмечу, что я также пытался это сделать, используя шаблон лямбда.NativeAOT, где эти шаги сработали. Похоже, это что-то специфическое для структуры serverless.NativeAOT.
Мне удалось воспроизвести описанную вами проблему и найти решение. Вот шаги, которые я предпринял:
Создал новый проект с тем же шаблоном (который вы использовали) из Visual Studio.
После этого просто следуйте шагам, которые я упомянул в Шаг 7. Отладка и тестирование лямбда-функций в Visual Studio
Обновлен файл launchSettings.json
с новой переменной среды, как описано ниже.
Имя обработчика для функций Lambda, основанных на библиотеках классов, соответствует синтаксису ASSEMBLY::TYPE::METHOD
. Здесь указывается сборка, класс и метод, которые будут выполняться.
Для функций Lambda, основанных на исполняемых сборках, имя обработчика — это просто имя сборки.
В случае исполняемых сборок имя метода необходимо указать в переменной среды. Эта переменная среды затем используется для передачи соответствующего метода делегата автоматически созданному методу Main
.
В качестве решения вам нужно добавить еще одну переменную среды ANNOTATIONS_HANDLER
в файл launchSettings.json
.
{
"profiles": {
"AWSServerlessNativeAOT.Example": {
"commandName": "Project",
"environmentVariables": {
"AWS_LAMBDA_RUNTIME_API": "localhost:5050",
"ANNOTATIONS_HANDLER": "GetFunctionHandler"
}
}
}
}
Потому что, если вы увидите автоматически сгенерированный файл Program.cs
, вы обнаружите, что он ожидает, что эта переменная среды определит, какую функцию выполнять.
Это сработало! Спасибо, что помогли справиться с этим. Я создал простой пример, который, я думаю, будет знаком разработчикам .NET. github.com/agkenvin/ServerlessNativeAOTExample
Вы все еще ищете решение?