【发布时间】:2021-05-29 00:49:18
【问题描述】:
我正在使用 Lambda 函数对上传的文件进行一些处理(图像大小调整、视频转换等)但是我正在努力让 lambda 函数从 S3 中获取任何内容。
目前在 S3 上传触发器上运行 Lambda 函数,它所要做的不是将文件从一个存储桶复制到另一个存储桶,但它似乎只是冻结了。
我在 CloudWatch 中收到一条日志,说明它已启动,我收到 File Uploaded... 消息,然后什么都没有,直到函数超时,无论我给它多少内存或超时,都会发生这种情况。
起初我认为这可能是权限,但我的 lambda 用户在 S3 和 Lambda 上拥有 FullPermission,我什至公开了我的存储桶。
我使用的函数代码是:
public async Task<string> FunctionHandler(S3Event evnt, ILambdaContext context)
{
var s3Event = evnt.Records?[0].S3;
if(s3Event == null) return null;
try
{
context.Logger.LogLine("File Uploaded, Starting Copy");
await S3Client.CopyObjectAsync(s3Event.Bucket.Name, s3Event.Object.Key, destinationBucket, s3Event.Object.Key);
context.Logger.LogLine("Copy Completed.");
return "Finished";
}
catch(Exception e)
{
context.Logger.LogLine($"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(e.Message);
context.Logger.LogLine(e.StackTrace);
throw;
}
}
【问题讨论】:
-
您的函数是否在 VPC 中运行?
-
是的,我仔细检查了 VPC 权限,有趣的是我刚刚运行了与控制台应用程序相同的代码,它运行良好。
-
补充
jellycsc的问题:您的VPC 是否有允许Lambda 访问S3 的NAT?另外,你的超时时间是多少?
标签: c# amazon-web-services amazon-s3 aws-lambda