Инструмент пробного тестирования Lambda .NET8.0 Native AOT

Я начал проект с использованием 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 и тестирование исполняемых сборок ссылка в инструменте. Я ожидаю, что будет достигнута точка останова или возникнет ошибка, но события, просто находящиеся в очереди, заставляют меня думать, что моя настройка неверна.

Вы все еще ищете решение?

Ankush Jain 23.04.2024 08:44

Да, мне до сих пор не удалось отладить проблему.

Adam 23.04.2024 17:52

Рекомендую вам посмотреть раздел «Шаг 7. Отладка и тестирование лямбда-функций в Visual Studio (исполняемые сборки)» в моем блоге coderjony.com/blogs/…. Это может помочь.

Ankush Jain 23.04.2024 20:35

К сожалению, это не сработало. Я пробовал как с моим текущим проектом, так и с новым шаблоном. Без указания дополнительной конфигурации, которая у меня есть в файле launchSettings.json, отладчик просто завершает работу с кодом 0. Когда я указываю дополнительную конфигурацию, отладчик сообщает, что ему не удалось привязаться к уже используемому адресу {localhost}:5050. Отмечу, что я также пытался это сделать, используя шаблон лямбда.NativeAOT, где эти шаги сработали. Похоже, это что-то специфическое для структуры serverless.NativeAOT.

Adam 23.04.2024 23:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
571
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось воспроизвести описанную вами проблему и найти решение. Вот шаги, которые я предпринял:

  1. Создал новый проект с тем же шаблоном (который вы использовали) из Visual Studio.

  2. После этого просто следуйте шагам, которые я упомянул в Шаг 7. Отладка и тестирование лямбда-функций в Visual Studio

  3. Обновлен файл launchSettings.json с новой переменной среды, как описано ниже.

Отладка исполняемых функций сборки .NET Lambda (платформа аннотаций)

Имя обработчика для функций 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

Adam 24.04.2024 18:13

Другие вопросы по теме