调用 PutSubscriptionFilter 操作时发生错误(InvalidParameterException)
An error occurred (InvalidParameterException) when calling the PutSubscriptionFilter operation
正在尝试将 Cloud watch 日志放入 kineses firehose。
关注如下:
https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#FirehoseExample
收到此错误
调用 PutSubscriptionFilter 操作时发生错误 (InvalidParameterException):无法将测试消息传送到指定的 Firehose 流。检查是否
e 给定的 Firehose 流处于活动状态。
aws logs put-subscription-filter --log-group-name "xxxx" --filter-name "xxx" --filter-pattern "{$.httpMethod = GET}" --目的地-arn "arn:aws:firehose:us-east-1:12345567:deliverystream/xxxxx" --role-arn "arn:aws:iam::12344566:role/xxxxx"
导致此错误的最可能问题是权限问题。即您传递给 --role-arn
的 IAM 角色定义有问题。您可能需要仔细检查角色及其权限是否已按照文档中的描述正确设置。
如果您的 Firehose 处于活动状态并且您可以发送日志流,那么剩下的问题只是政策问题。
我在按照教程操作时遇到了类似的问题。这里混淆的是Kinesis部分和Firehose部分,我们可能会混在一起。您需要重新检查您的:~/PermissionsForCWL.json,详细信息部分:
....
"Action":["firehose:*"], *// You could confused with kinesis:* like me*
"Resource":["arn:aws:firehose:region:123456789012:*"]
....
您需要更新您的 IAM 角色的信任策略,以便它向 logs.amazonaws.com
服务主体授予代入它的权限,否则 CloudWatch Logs 将无法代入您的角色以将事件发布到您的 Kinesis 流。 (显然,您还需要仔细检查角色的权限,以确保它有权读取您的日志组并写入您的 Kinesis Stream。)
如果他们将此添加到错误消息中以帮助指出正确的方向,那就太好了...
当我完成您提到的教程时,它默认为不同的区域,因此我不得不将 --region
与我的区域一起传递。直到我用正确的区域完成整个步骤后它才起作用。
对我来说,我认为这个问题的发生是因为在通过区域 IAM 端点为地理上远离 us-east-1 的区域创建新角色后,IAM 数据平面需要时间来解决.
我有一个自定义 Lambda CF 资源,它 auto-subscribes 通过订阅过滤器将所有现有和未来的日志组发送到 Firehose。 IAM 角色为 CW 日志部署,然后 Lambda 函数很快尝试订阅日志组。有时会发生此错误。
我在我的代码中添加了一个 time.sleep(30)(此代码仅在创建堆栈时运行一次,因此等待 30 秒不会造成任何伤害)。
正在尝试将 Cloud watch 日志放入 kineses firehose。
关注如下: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#FirehoseExample
收到此错误
调用 PutSubscriptionFilter 操作时发生错误 (InvalidParameterException):无法将测试消息传送到指定的 Firehose 流。检查是否 e 给定的 Firehose 流处于活动状态。
aws logs put-subscription-filter --log-group-name "xxxx" --filter-name "xxx" --filter-pattern "{$.httpMethod = GET}" --目的地-arn "arn:aws:firehose:us-east-1:12345567:deliverystream/xxxxx" --role-arn "arn:aws:iam::12344566:role/xxxxx"
导致此错误的最可能问题是权限问题。即您传递给 --role-arn
的 IAM 角色定义有问题。您可能需要仔细检查角色及其权限是否已按照文档中的描述正确设置。
如果您的 Firehose 处于活动状态并且您可以发送日志流,那么剩下的问题只是政策问题。
我在按照教程操作时遇到了类似的问题。这里混淆的是Kinesis部分和Firehose部分,我们可能会混在一起。您需要重新检查您的:~/PermissionsForCWL.json,详细信息部分:
....
"Action":["firehose:*"], *// You could confused with kinesis:* like me*
"Resource":["arn:aws:firehose:region:123456789012:*"]
....
您需要更新您的 IAM 角色的信任策略,以便它向 logs.amazonaws.com
服务主体授予代入它的权限,否则 CloudWatch Logs 将无法代入您的角色以将事件发布到您的 Kinesis 流。 (显然,您还需要仔细检查角色的权限,以确保它有权读取您的日志组并写入您的 Kinesis Stream。)
如果他们将此添加到错误消息中以帮助指出正确的方向,那就太好了...
当我完成您提到的教程时,它默认为不同的区域,因此我不得不将 --region
与我的区域一起传递。直到我用正确的区域完成整个步骤后它才起作用。
对我来说,我认为这个问题的发生是因为在通过区域 IAM 端点为地理上远离 us-east-1 的区域创建新角色后,IAM 数据平面需要时间来解决.
我有一个自定义 Lambda CF 资源,它 auto-subscribes 通过订阅过滤器将所有现有和未来的日志组发送到 Firehose。 IAM 角色为 CW 日志部署,然后 Lambda 函数很快尝试订阅日志组。有时会发生此错误。
我在我的代码中添加了一个 time.sleep(30)(此代码仅在创建堆栈时运行一次,因此等待 30 秒不会造成任何伤害)。