【发布时间】:2018-05-16 14:30:54
【问题描述】:
我构建了一个 .NET Core aws Lambda,它从 S3 读取一个 xml 文件并对其进行一些处理。当我在本地运行 lambda 时,它可以正常工作;但是,当我上传 Lambda 并尝试执行它时,它会停止尝试获取文件的内容,并且 cloudwatch 中没有显示错误。这是我的代码有问题:
public async Task<string> GetFileContentsFromS3(string bucket, string key)
{
try
{
Console.WriteLine("Getting File Contents for Bucket: " + bucket + " and Key: " + key);
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucket,
Key = key
};
Console.WriteLine("request: " + request.BucketName + " | " + request.Key);
using (GetObjectResponse responseObject = await S3Client.GetObjectAsync(request))
{
Console.WriteLine("In Response Object");
using (Stream responseStream = responseObject.ResponseStream)
{
Console.WriteLine("In Response Stream");
using (StreamReader reader = new StreamReader(responseStream))
{
Console.WriteLine("Successfully got File Contents");
return reader.ReadToEnd();
}
}
}
}
catch(Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
return string.Empty;
}
}
当我查看我的 cloudwatch 日志时,我可以看到以下输出:
Console.WriteLine("Getting File Contents for Bucket: " + bucket + " and Key: " + key); and this: Console.WriteLine("request: " + request.BucketName + " | " + request.Key);
在那之后我什么也没有得到,并且日志指出该函数在完成之前就结束了。它没有达到超时,因为它设置为 30 秒,我的内存分配应该足够了。此外,我已让我的 IAM 用户完全控制 S3,因此这不应该成为问题。我认为是这一行:
using (GetObjectResponse responseObject = await S3Client.GetObjectAsync(request))
这是导致问题的原因,但我不知道获取文件内容的另一种方法或可能是什么实际问题。
【问题讨论】:
标签: c# amazon-s3 lambda .net-core