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

ca9*_*3d9 5 c# amazon-s3 amazon-web-services 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

桶和 lambda 都在俄勒冈州?

Ham*_*med 3

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

  • AWSLambdaFullAccess
  • AmazonS3完全访问
  • CloudWatch完全访问

我给了它一些时间,重新运行我的 lambda 函数,这次它起作用了。这样,我确定问题是由于权限造成的。但让权限保持打开状态并不是一个好的做法。从这里,您可以根据您自己的用例开始限制 lambda 函数执行角色的权限,以找到适合您的工作的最少权限。