首页 > 解决方案 > 从 .NET Core 3.1 中的 AWS Lambda 函数将字节上传到 SFTP 服务器

问题描述

我一直在到处搜索,但找不到答案,所以我最后的手段是在这里发帖。

我的要求是我需要使用用 C# (.NET Core 3.1) 编写的 Lambda 从 S3 存储桶中 SFTP 文件。不要问为什么或建议替代方案......我不是设定要求的人。因此,我使用 SSH.NET 库编写了执行此操作的代码,该库在使用本地机器上的 Mock Lambda 测试工具运行 lambda 代码时有效。但是,部署到 AWS 的相同代码会在 30 秒后超时。Lambda 位于 VPC 中,但同一 VPC 中的 EC2 和安全组能够访问 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 秒后连接超时。那是异常消息。

标签: c#.netasp.net-coreaws-lambda

解决方案


问题是 VPC。当删除 VPC 配置并尝试上传一些基本文本而不是访问 VPC 中的数据库时,它能够连接并且不会超时。

您可以使用 SSH.NET 创建 SFTP 连接并将文件从 Lambda 函数上传到服务器。


推荐阅读