我使用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都在俄勒冈州吗?
答案 0 :(得分:0)
我遇到了完全相同的问题。就我而言,问题是我的lambda函数的执行角色。显然,它没有足够的权限。为了解决该问题,我首先从角色中删除了所有策略,并添加了以下三个内容:
我花了一些时间,重新运行了lambda函数,这一次它起作用了。这样,我确保问题是由于权限引起的。 但是,保留打开的权限不是一个好习惯。从这里开始,您可以根据自己的用例开始限制lambda函数的执行角色的权限,以找到对您有用的最少权限。