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
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.