Как запустить локально функции AWS Lambda на основе C # для разработки?

Я хочу написать функцию AWS Lambda на C #. Моя конечная цель будет заключаться в том, чтобы развить навык Alexa, но похоже, что ASK CLI еще не поддерживает C #.

Моя среда разработки состоит из:

  • Ubuntu 18.10 x64
  • JetBrains Rider с установленным плагином AWS Toolkit
  • Аккаунт AWS в США, где все работает в us-east-1
  • AWS CLI установлен и настроен
  • dotnet-sdk-2.1 и dotnet-runtime-2.1 установлены

Кажется, я не могу найти никакой полезной документации о том, как написать лямбда-функцию на C # и запустить ее прямо на моем компьютере для тестирования. Я делал это раньше с Node.js, используя lambda-local, который просто наследует мои Учетные данные AWS из интерфейса командной строки AWS, но код работает на моем собственном компьютере.

Я пробовал использовать плагин AWS Toolkit в Rider, но когда я пытаюсь создать конфигурацию запуска для AWS Lambda Local, список времени выполнения пуст:

введите здесь описание изображения

Итак, как я могу настроить среду разработки, которая позволяет мне запускать функции C # Lambda локально для тестирования с точками останова и еще много чего, используя те же учетные данные, предположительно, что и CLI AWS, а также в конечном итоге создавать и развертывать на AWS?

Я открыт для использования другой IDE, такой как VSCode, если это упростит задачу, но я действительно хочу избежать запуска Windows для разработки своего кода, что означает отказ от Visual Studio как такового.


person user3466413    schedule 24.12.2018    source источник


Ответы (1)


Вы можете создать консольное приложение, ссылаться на лямбда-проект и запускать в нем лямбда-выражения.

Если у вас есть какие-либо переменные среды, вы должны использовать Класс среды. Чтобы лучше управлять конфигурациями в вашем приложении, было бы хорошо написать оболочку (что-то вроде ApplicationConfig) для переменных, зависящих от среды.

Чтобы настроить переменные env в Console runner, используйте

Environment.SetEnvironmentVariable("Environment", "local");

И получить:

Environment.GetEnvironmentVariable("Environment");

ApplicationConfig.cs

public class ApplicationConfig
{
     public string Environment => GetValue("Environment");
     public string GetValue(string key) => Environment.GetEnvironmentVariable(key);
} 

Также вы можете установить значение по умолчанию для свойств ApplicationConfig, если в конфигурации ничего нет.

person svoychik    schedule 25.12.2018
comment
Спасибо, сработало. Для справки в будущем: я сделал второй проект в том же решении (консольное приложение с .NET Core), добавил ссылку на первый (Lambda) и вызвал функцию, создав экземпляр ее класса и вызвав его напрямую. Я провел тестовое соединение с использованием v3 AWS S3 SDK от Nuget, и он волшебным образом унаследовал мои учетные данные из ~ / .aws и работал нормально. - person user3466413; 27.12.2018