从存储区xxx获取对象filename.xlsx时出错。确保它们存在并且您的存储桶与此功能位于同一区域?

时间:2018-07-17 22:12:23

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

我使用Visual Studio和aws工具包创建了一个新的AWS S3文件,并生成了以下代码。

public async Task<string> FunctionHandler(S3Event evnt, ILambdaContext context)
{
    var s3Event = evnt.Records?[0].S3;
    if(s3Event == null)
    {
        return null;
    }

    try
    {
        var response = await this.S3Client.GetObjectMetadataAsync(s3Event.Bucket.Name, s3Event.Object.Key);
        return response.Headers.ContentType;
    }
    catch(Exception e)
    {
        var msg = $"Error getting object {s3Event.Object.Key} from bucket {s3Event.Bucket.Name}. Make sure they exist and your bucket is in the same region as this function.";
        context.Logger.LogLine(msg);
        context.Logger.LogLine(e.Message);
        context.Logger.LogLine(e.StackTrace);
        Log.Error($"S3 notification error: {msg}\n{e.Message}\n{e.StackTrace}");
        throw;
    }
}

但是,当我将文件上传到S3存储桶时,它在CloudWatch中出现了以下错误,

  

从存储桶myBucket获取对象filename.xlsx时出错。确保它们存在,并且您的存储桶与此功能位于同一区域。

水桶和lambda都在俄勒冈州吗?

1 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题。就我而言,问题是我的lambda函数的执行角色。显然,它没有足够的权限。为了解决该问题,我首先从角色中删除了所有策略,并添加了以下三个内容:

  • AWSLambdaFullAccess
  • AmazonS3FullAccess
  • CloudWatchFullAccess

我花了一些时间,重新运行了lambda函数,这一次它起作用了。这样,我确保问题是由于权限引起的。 但是,保留打开的权限不是一个好习惯。从这里开始,您可以根据自己的用例开始限制lambda函数的执行角色的权限,以找到对您有用的最少权限。