AWS Lambda доступ к локальному ресурсу или хранилищу C # - PullRequest
0 голосов
/ 28 сентября 2018

Как я могу сохранить и получить доступ к файлу в Lambda, используя C # Я использовал папку tmp, доступную для лямбды, но я получаю сообщение об ошибке не могу загрузить файл или сборку.Как я могу решить ошибку?Я использовал ADP nuget.

        using (WebClient webClient = new WebClient())
        {
            webClient.DownloadFile(reportLine, Path.GetTempPath() + 
            "sample_auth.key");
        }

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

    string config = @"{
           ""sslCertPath"": ""/tmp/sample.pfx"",
           ""sslKeyPath"": ""/tmp/sample_auth.key"",
           }";

        ADPAccessToken token = null;

        if (String.IsNullOrEmpty(clientconfig))
        {
            Console.WriteLine("Settings file or default options not available.");
        }
        else
        {
              ClientCredentialConfiguration connectionCfg = JSONUtil.Deserialize<ClientCredentialConfiguration>(clientconfig);
              ClientCredentialConnection connection = (ClientCredentialConnection)ADPApiConnectionFactory.createConnection(connectionCfg);

            //context.Logger.Log(ADPApiConnection.certificatepath);
            //context.Logger.Log(clientconfig);
            try
            {
                connection.connect();
                if (connection.isConnectedIndicator())
                {
                token = connection.accessToken;

                    //    context.Logger.Log("Connected to API end point");
                    //    //Console.WriteLine("Token:  ");
                    //    //Console.WriteLine("         AccessToken: {0} ", token.AccessToken);
                    //    //Console.WriteLine("         TokenType: {0} ", token.TokenType);
                    //    //Console.WriteLine("         ExpiresIn: {0} ", token.ExpiresIn);
                    //    //Console.WriteLine("         Scope: {0} ", token.Scope);
                    //    //Console.WriteLine("         ExpiresOn: {0} ", token.ExpiresOn);
                    //    //Console.ReadLine();
                }
            }
            catch (ADPConnectionException e)
            {
                context.Logger.Log(e.Message);
            }
            //catch (Exception e)
            //{
            //    context.Logger.Log(e.Message);
            //}
            //Console.Read();
        }

        return "Ok";
    }

Я получаю сообщение об ошибке. Я думаю, что lambda проверяет папку / var / task

errorMessage": "One or more errors occurred. (Could not load file or 
assembly 'System.Net.Http.WebRequest, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file 
specified.\n)",
 "cause":   {
"errorType": "FileNotFoundException",
"errorMessage": "Could not load file or assembly 
'System.Net.Http.WebRequest, Version=4.0.0.0, Culture=neutral, 
  PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file 
 specified.\n",

Вот пример программы: https://github.com/adplabs/adp-connection-NET/blob/master/ADPClientDemo/Program.cs

Я могузапустить программу на консоли, но когда я пытаюсь сделать это в лямбде, я получаю сообщение об ошибке.Это из-за NuGet от AWS?

У меня есть следующий NuGet

Amazon Lambda Core
Amazon Lambda S3 Events 
Amazon lambda Serialization json
AWS SDK Core 
Microsoft Asp Net Web Api Client 
ADP library connection NET

1 Ответ

0 голосов
/ 01 октября 2018

Не удалось загрузить файл или сборку: System.Net.Http.WebRequest

Кажется, ошибка вызвана проблемой управления версиями, я думаю, вам нужно использовать ядро ​​.Netверсия System.Net.Http.WebRequest dll или более поздняя версия, чем .Net 4.0 для работы с .NET Core 2.0.

На самом деле, пожалуйста, посмотрите этот ответ, вам может не повезти: Библиотеки, которые вы используете для доставки таргетинга .NET Core : https://github.com/dotnet/corefx/issues/28267#issuecomment-396349873

См. Также https://stackoverflow.com/a/41683787/495455 и Не удалось загрузить файл или сборку "System.Net.Http.Webrequest" в .NET AWSSDK для моно для похожих проблем управления версиями.


Если это не такне можете это исправить, рассмотрите возможность использования API AWS.Вы можете поместить свой файл sample_auth.key в корзину S3 и прочитать его, например, https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html


Или в соответствии с примером, на который вы ссылались, они упаковывают файл json с помощью Lambda: https://github.com/adplabs/adp-connection-NET/tree/master/ADPClientDemo/Content/config

И они читают это, используя StreamReader, возможно, это будет работать с использованием System.IO dll вместо попытки найти System.Net.Http.WebRequest dll:

string configFileName = "default.json";
StreamReader sr = new StreamReader("..\\..\\Content\\config\\" + configFileName);
string clientconfig = sr.ReadToEnd();
...