Загрузка байтов на SFTP-сервер из функции AWS Lambda в .NET Core 3.1

#c# #.net #asp.net-core #aws-lambda

#c# #.net #asp.net-core #aws-lambda

Вопрос:

Я продолжаю искать везде и не могу найти ответ, поэтому мое последнее средство — опубликовать здесь.

Мои требования заключаются в том, что мне нужно передать SFTP-файл из корзины S3, используя лямбду, написанную на C # (.NET Core 3.1). Не спрашивайте почему и не предлагайте альтернативы… Я не был тем, кто устанавливал требования. Итак, я написал код, который выполняет это с использованием SSH.NET библиотека, которая работает при запуске лямбда-кода с использованием инструмента Mock Lambda Test на моем локальном компьютере. Однако время ожидания того же кода, развернутого в AWS, истекает через 30 секунд. Лямбда находится в VPC, но EC2 в той же VPC и группе безопасности может получить доступ к SFTP-серверу, поэтому я не думаю, что это проблема, связанная с сетью.

Вот код, который я использую для загрузки:

 try
{

  using (var sftpClient = new SftpClient(server, port, username, password))
  {
    sftpClient.Connect();
    if (sftpClient.IsConnected)
    {
        sftpClient.WriteAllText(path, contents);
        LambdaLogger.Log($"Uploaded file to {server}");
    }
    else
    {
        LambdaLogger.Log($"Could not connect to the {server} SFTP server.");
    }
    sftpClient.Disconnect();
  }
}
catch (Exception e)
{
    LambdaLogger.Log($"An error has occurred while uploading to the {server} SFTP server. Error: {e.Message}");
}
 

Редактировать: ошибка, которую я вижу в журналах lambda, заключается в том, что время ожидания соединения истекает через 30 секунд. Это сообщение об исключении.

Комментарии:

1. Какую ошибку вы получаете?

2. Время ожидания соединения @ChetanRanpariya истекло через 30 секунд.

Ответ №1:

Проблема заключалась в VPC. При удалении конфигурации VPC и просто попытке загрузить некоторый базовый текст вместо доступа к базам данных в VPC он смог подключиться, а не по таймауту.

Вы МОЖЕТЕ использовать SSH.NET чтобы создать SFTP-соединение и загрузить файлы на сервер из лямбда-функции.