C# AmazonS3Client不适用于AWS Lambda S3项目
我有一个简单的C#控制台项目,它正在处理S3 Bucket和S3对象。这是一个非常简单的项目,我可以找到一个对象并用AmazonS3Client阅读它。C# AmazonS3Client不适用于AWS Lambda S3项目,c#,amazon-web-services,amazon-s3,aws-lambda,C#,Amazon Web Services,Amazon S3,Aws Lambda,我有一个简单的C#控制台项目,它正在处理S3 Bucket和S3对象。这是一个非常简单的项目,我可以找到一个对象并用AmazonS3Client阅读它。 我将此参考用于工作: AWSSDK.核心 AWSSDK.S3 例如,此功能是我的项目的一部分: public static string GetSpecialObject(string FileName, string BucketName) { AmazonS3Client client = new AmazonS3Clie
我将此参考用于工作:
- AWSSDK.核心
- 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;
}
}
}
正如您看到的,它在bucket中查找一个文件,我可以返回file的值。
有什么问题?
我创建了一个AWS Lambda项目(AWS Lambda函数),并尝试在那里使用GetSpecialObject函数。(.Net核心2)
我在AWS上使用AWS工具包发布了我的新项目,但当我使用Invoke按钮运行它时,我看到以下错误:
“errorType”:“MissingMethodException”, “errorMessage:“未找到方法:'System.Collections.Generic.IList
1 Amazon.Runtime.SharedInterfaces.ICoreAmazonS3.GetAllObjectKeys(System.String、System.String、System.Collections.Generic.IDictionary
2)”,
“stackTrace”:[
“在App.AWSFileClass..ctor(字符串访问密钥、字符串机密、字符串存储桶)”中,
......"
]
}
似乎我们不能将这个类(AmazonS3Client)用于AWS Lambda服务。我在谷歌上搜索了很多关于它的信息。我发现我们可以在Nuget中添加一些AmazonS3库,它们的名称如下:
- Amazon.S3
- AWSSDK.核心
1-在AWS Lambda(.net core 2)中是否有使用AmazonS3Client类的方法?
或
2-有没有建议我使用S3Client类来读取s3object?AmazonS3Client在.NET Core 2.0中得到了明确的支持。看起来您使用的是SDK的.NET Framework版本,而不是.NET Core。我可以说,因为在您的代码中,您正在调用启用的同步GetObject调用在.NET Framework中不受支持。对于.NET Core,您应该只看到GetObjectAsync 我很好奇你是如何编译的。这段代码是在一个针对.NET框架而不是.NET标准的类库中考虑的吗
如果直接添加dll,则应改为添加NuGet包。添加AWSSDK.S3 NuGet包,并确保没有对AWSSDK.Core.dll和AWSSDK.S3.dll的任何dll引用。通过添加NuGet包,它将解析为正确的平台版本如何调用此方法?如果这是Lambda函数,则它不是定义良好(Lambda函数必须有入口点)。这是我项目的一部分。我可以从Lambda函数main方法调用它。感谢@norm johanson的回复。我有一个C#Console应用程序,它与S3 Bucke一起工作,工作正常,使用.Net framework。但之后我想在AWS Lambda模板上使用它。所以我希望这段代码可以工作。所以我迁移到了那里。但看起来主要问题是创建AWS客户端对象。所以我使用了这个dll,它似乎与.NetCore兼容。
IAwsCredential awsCredential=new awsCredential(“*”,“*”);s3Client=new s3Client(AwsRegion.EUWest1,awsCredential)
对于这一点,我们没有GetObjectResponse。你认为呢?还有@norm johanson,有没有任何简单的例子可以使用AWS Lambda来处理getobject、list和delete。我在我的简单控制台项目中这样做了,但在AWS Lambda中,主库不起作用,这是我的问题……很抱歉进行了大量的描述。如果您是直接添加dll您应该改为添加NuGet包。添加AWSSDK.S3 NuGet包,并确保您没有对AWSSDK.Core.dll和AWSSDK.S3.dll的任何dll引用。通过添加NuGet包,它将解析为正确的平台版本。非常感谢:-)我们没有将S3目录API移植到.NET Core,因为该API是专门设计的围绕IAmazonS3中的同步API。使用ListObjects操作和在请求对象上使用设置为“/”的分隔符属性,然后在响应对象上检查CommonPrefixes属性,仍然可以实现同样的效果。