我有一个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文档所解释的,您必须使用基于CWL资源的权限:
当CloudWatch Logs是规则的目标时,EventBridge将创建日志流,并且CloudWatch Logs将触发事件中的文本存储为日志条目。为了允许EventBridge创建日志流并记录事件,CloudWatch Logs必须包括基于资源的策略,该策略使EventBridge能够写入CloudWatch Logs。
遗憾的是,您无法从vanila CloudFormation(CFN)设置此类权限。这是不支持:
要从CFN执行此操作,您必须以lambda函数的形式创建自定义资源。该功能将使用AWS开发工具包设置CWL权限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句