英文:
WinSCP.exe missing in .NET Core AWS Lambda Function
问题
I have developed a .NET Core 6.0 using WinSCP 6.1.0 NuGet package. Locally, from my own PC, I can access a SFTP server, obtaining connection and being able to PUT files.
When I deploy my app as an AWS Lambda function I get the following error on Session.Open()
:
> WinSCP.SessionLocalException: The winscp.exe executable was not found at the location of the assembly WinSCPnet (/var/task), nor the entry assembly Amazon.Lambda.RuntimeSupport (/var/runtime), nor in an installation path. You may use Session.ExecutablePath property to explicitly set the path to winscp.exe.
I am aware that for an Azure Function I can set ExecutablePath
like this, and it works:
[FunctionName(FunctionName)]
public static void Run([TimerTrigger("%XXXSendSchedule%")] TimerInfo myTimer, ILogger log, ExecutionContext executionContext)
using (Session winscpSession = new Session())
{
// See https://winscp.net/eng/docs/guide_microsoft_azure_function_sftp
winscpSession.ExecutablePath = Path.Combine(executionContext.FunctionAppDirectory, "winscp.exe");
}
However, in a Lambda function, the ILambdaContext
does not seem to have anything like Azure's FunctionAppDirectory
:
public void MyFunctionHandler(ILambdaContext context)
Where can I find the path where the Lambda function keeps WinSCP.exe
so that I can set Session.ExecutablePath
?
Henrik
英文:
I have developed a .NET Core 6.0 using WinSCP 6.1.0 NuGet package. Locally, from my own PC, I can access a SFTP server, obtaining connection and being able to PUT files.
When I deploy my app as a AWS Lambda function I get the following error on Session.Open()
:
> WinSCP.SessionLocalException: The winscp.exe executable was not found at location of the assembly WinSCPnet (/var/task), nor the entry assembly Amazon.Lambda.RuntimeSupport (/var/runtime), nor in an installation path. You may use Session.ExecutablePath property to explicitly set path to winscp.exe.
I am aware that for a Azure Function I can set ExecutablePath
like this, and it works:
[FunctionName(FunctionName)]
public static void Run([TimerTrigger("%XXXSendSchedule%")] TimerInfo myTimer, ILogger log, ExecutionContext executionContext)
using (Session winscpSession = new Session())
{
// See https://winscp.net/eng/docs/guide_microsoft_azure_function_sftp
winscpSession.ExecutablePath = Path.Combine(executionContext.FunctionAppDirectory, "winscp.exe");
However, in a Lambda function the ILambdaContext
does not seem to have anything like Azure's FunctionAppDirectory
:
public void MyFunctionHandler(ILambdaContext context)
Where can I find the path where the Lambda function keeps WinSCP.exe
so that I can set Session.ExecutablePath
?
Henrik
答案1
得分: 0
我不知道Amazon Lambda是否提供存储空间,用于存储winscp.exe
,就像Azure Functions一样。
但这可能并不重要,因为WinSCP是Windows二进制文件,而Amazon Lambda(与Azure Functions相反)仅提供Linux系统:
https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
所以恐怕您不能在Amazon Lambda中使用WinSCP。
英文:
I do not know if Amazon Lambda offers storage where you could store the winscp.exe
, the way Azure Functions do.
But it probably does not matter, as WinSCP is Windows binary and Amazon Lambda (contrary to Azure Functions) offers only Linux systems:
https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
So I'm afraid that you cannot use WinSCP in Amazon Lambda.
答案2
得分: 0
感谢Martin的回答,这将使我免于在Lambda中努力让WinSCP工作时撞墙。我还找到了与您的答案相关的备份:
Lambda执行环境基于特定的Amazon Linux AMI和内核版本。在Lambda部署包中使用的任何本机二进制文件必须在此环境中编译,仅支持64位二进制文件。
来自:https://itnext.io/running-arbitrary-executables-in-aws-lambda-encrypting-a-pdf-afea47e3c345
我可能会尝试使用NuGet包SSH.NET,因为它似乎是一个.NET 6库,因此(我希望是的 :-))受Amazon Linux支持。
Henrik
英文:
Thanks Martin for your answer, it will save me from banging my head against the wall trying to get WinSCP to work in Lambda. I found also backup for your answer:
> The Lambda execution environment is based on a specific Amazon Linux
> AMI and kernel version. Any native binaries that are used in a Lambda
> deployment package must be compiled in this environment, and only
> 64-bit binaries are supported.
>
> From
> <https://itnext.io/running-arbitrary-executables-in-aws-lambda-encrypting-a-pdf-afea47e3c345>
I will probably try the NuGet package SSH.NET next, as it seems to be a .NET 6 library, hence (I hope :-)) supported by the Amazon Linux.
Henrik
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论