因此,使用 lambda 编译到 zip 或 s3 中的代码的 docker 镜像在技术上没有区别。至于日志,根据 AWS 文档(这是直接来自文档的描述):
AWS Lambda 会代表您自动监控 Lambda 函数,并通过 Amazon CloudWatch 报告指标。为了帮助您解决函数中的故障,Lambda 会记录您的函数处理的所有请求,并通过 Amazon CloudWatch Logs 自动存储您的代码生成的日志。
您可以将日志记录语句插入到您的代码中,以帮助您验证您的代码是否按预期工作。 Lambda 自动与 CloudWatch Logs 集成,并将所有日志从您的代码推送到与名为 /aws/lambda/ 的 Lambda 函数关联的 CloudWatch Logs 组。
因此,最基本的代码会在您的 lambda 中包含某种日志记录。在这种情况下,我对疑难解答的建议:
1 - 如下图所示,转到您的 lambda 函数并尝试直接从控制台访问 cloudwatch 日志。请务必确认部署函数的默认区域。
2 - 如果日志存在(lambda 函数的组存在),请检查您的代码是否有任何引发异常。
3 - 如果有任何错误表明 cloudwatch 的组日志不存在或函数的组日志不存在,则直接在控制台中检查 lambda 的配置,或者,如果您使用的是像 serverless 或 cloudwatch 这样的框架,代码结构。
4 - 最后,如果一切正常,这可能只与一件简单的事情有关。来自您帐户的用户权限或来自您的 lambda 函数的角色权限(这些情况大多是这种情况)。
您应该检查的一件事是从您的 lambda 生成的基本角色,它确保您可以创建新的日志组
一个策略示例应该是这样的(你也可以手动添加CloudWatch Logs策略,效果应该差不多):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:us-east-1:XXXXXXXXXX:*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:us-east-1:XXXXXXXXXX:log-group:/aws/lambda/<YOUR-LAMBDA-FUNCTION>r:*"
]
}
]
}
可以在此处找到与此问题相关的更多信息:
https://aws.amazon.com/pt/premiumsupport/knowledge-center/lambda-cloudwatch-log-streams-error/
我这么说是因为我经常使用 docker 来实现与 lambda 的代码依赖关系,这是基于引入此功能时的第一个教程。
https://aws.amazon.com/pt/blogs/aws/new-for-aws-lambda-container-image-support/
希望这会有所帮助!
请随意留下更多的 cmets。