我正在开发一个Cloudformation Hook。我可以成功地部署它,并执行自定义处理程序。但是,我看不到任何CloudWatch日志组,因此无法调试Hook逻辑。
aws configure
cfn generate
cfn submit --set-default
HOOK_TYPE_ARN="arn:aws:cloudformation:eu-central-1:563262xxxxx:type/hook/My-Dummy-Hook"
aws cloudformation set-type-configuration
--configuration file://type_config.json
--type-arn $HOOK_TYPE_ARN
--region eu-central-1
当我选择钩子时,点击编辑->编辑日志配置,我可以看到以下json:
{
"logGroupName": "my-dummy-hook-logs",
"logRoleArn": "arn:aws:iam::563262xxxxx:role/CloudFormationManagedUplo-LogAndMetricsDeliveryRol-KYUY5H9D4XQN"
}
此角色确实存在,它具有创建日志组等所需的所有策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents",
"cloudwatch:ListMetrics",
"cloudwatch:PutMetricData"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
但是我仍然看不到Cloudwatch中的任何日志,也没有创建日志组。一个有趣的观察是,我不能通过AWS控制台更改这个json,它总是抛出一个错误(尽管我指定了一个有效的角色或日志组):
Please use arn or specify a type
JSON
奇怪……
我的问题是我忘记在处理程序代码中指定日志级别:
import logging
# Use this logger to forward log messages to CloudWatch Logs.
LOG = logging.getLogger(__name__)
LOG.setLevel(logging.INFO) # <- this line was missing
换句话说,如果没有显式设置,将使用默认的记录器级别,即WARNING
。这意味着如果你在处理程序代码中调用LOG.debug("test")
或LOG.info("test")
,你将不会在Cloudwatch日志中看到任何日志流。