如何解决AWS Event Bus 无法将日志写入来自 AWS Lambda 的自定义日志组上的 CloudWatch
我有一个 AWS lambda,它的工作是使用来自外部源的日志并将这些日志写入自定义 CloudWatch 日志组。请注意,此 lambda 已经将日志写入其自己的日志组,这不是我的问题。我想要的是将外部派生的日志写入另一个 CloudWatch 组。
按照 AWS 文档并使用 CloudFormation,我创建了一个事件总线和一个针对 CloudWatch 的规则:
redacted
为了清楚起见,我省略了大部分 CloudFormation 模板,只留下看起来相关的部分。
我发现 Lambda 接收日志(通过 Kinesis),处理它们并将它们发送到以下代码片段中的事件总线:
redacted
上面最后一行表示事件发送到事件总线:
redacted
然而,我相信事件总线接收到事件,并没有将事件发送到 CloudWatch。即使我手动创建日志组:${AWS::StackName}-form-log-batch-function
(我已将堆栈引用作为参数保留以保持匿名)。
我已检查 CloudFormation 创建并且所有资源都存在(由 Lambda 确认在尝试发送事件时未出现任何异常)。
有人明白我在这里遗漏了什么吗?
解决方法
您不能使用您的 WebLogsEventBusLoggingRole
角色写入到 CloudWatch Logs (CWL)。正如 AWS docs 解释的那样,您必须使用基于 CWL 资源的权限:
当 CloudWatch Logs 是规则的目标时,EventBridge 创建日志流,CloudWatch Logs 将来自触发事件的文本存储为日志条目。要允许 EventBridge 创建日志流并记录事件,CloudWatch Logs 必须包含基于资源的策略,以允许 EventBridge 写入 CloudWatch Logs。
遗憾的是,您无法从 vanila CloudFormation (CFN) 设置此类权限。这是不支持:
要从 CFN 执行此操作,您必须以 lambda 函数的形式创建 custom resource。该函数将使用 AWS SDK 设置 CWL 权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。