AmazonS3Client在AWS Lambda S3项目中不起作用

时间:2018-07-11 15:19:03

标签: c# amazon-web-services amazon-s3 aws-lambda

我有一个简单的C#控制台项目,它正在处理S3 Bucket和s3对象。这是一个非常简单的项目,我可以找到一个对象并使用AmazonS3Client读取它。
我使用此参考进行工作:

  • AWSSDK.Core
  • AWSSDK.S3


例如,此功能是我的项目的一部分:

public static string GetSpecialObject(string FileName, string BucketName)
{
    AmazonS3Client client = new AmazonS3Client(Amazon.RegionEndpoint.EUWest1);
    // Create a GetObject request
    GetObjectRequest request = new GetObjectRequest
    {
        BucketName = BucketName,
        Key = FileName
    };
    using (GetObjectResponse response = client.GetObject(request))
    {
        using (StreamReader reader = new StreamReader(response.ResponseStream))
        {
            string contents = reader.ReadToEnd();
            return contents;
        }
    }
}

如您所见,它正在存储桶中找到文件,我可以返回文件的值。 问题是什么 ?
我创建了一个AWS-Lambda项目(AWS-Lambda函数),并且尝试在其中使用GetSpecialObject函数。 (.Net Core 2)
我在AWS上使用AWS Toolkit发布了新项目,但是当我使用Invoke按钮运行它时,看到此错误:

  

“ errorType”:“ MissingMethodException”,     “ errorMessage”:“未找到方法:'System.Collections.Generic.IList 1<System.String> Amazon.Runtime.SharedInterfaces.ICoreAmazonS3.GetAllObjectKeys(System.String, System.String, System.Collections.Generic.IDictionary 2)'。”,     “堆栈跟踪”: [       “在App.AWSFileClass..ctor(String accessKey,String secret,String bucket)”,       ……”     ]   }

似乎我们不能将此类(AmazonS3Client)用于AWS-Lambda服务。我用谷歌搜索了很多。我发现有一些我们可以在Nuget中添加的Amazon S3库,名称为:

  • Amazon.S3
  • AWSSDK.Core

但是这些库非常弱。

1-无论如何,是否可以在AWS Lambda(.net core 2)中使用AmazonS3Client类?
OR
2-是否有给我建议使用S3Client类读取s3object?

1 个答案:

答案 0 :(得分:1)

.NET Core 2.0绝对支持AmazonS3Client。似乎您使用的是.NET Framework版本的SDK,而不是.NET Core。我可以告诉您,因为在您的代码中您正在调用同步GetObject调用,而.NET Framework仅支持该调用。对于.NET Core,您应该只看到GetObjectAsync

我很好奇您如何编译它。是在面向.NET Framework而不是.NET Standard的类库中分解了此代码的吗?

如果直接添加dll,则应添加NuGet软件包。添加AWSSDK.S3 NuGet包,并确保您没有对AWSSDK.Core.dll和AWSSDK.S3.dll的任何dll引用。通过添加NuGet软件包,它将解析为正确的平台版本