簡體   English   中英

調用 PutSubscriptionFilter 操作時發生錯誤(InvalidParameterException)

[英]An error occurred (InvalidParameterException) when calling the PutSubscriptionFilter operation

試圖將雲監視日志放入 kineses firehose。

遵循以下內容: https ://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#FirehoseExample

得到這個錯誤

調用 PutSubscriptionFilter 操作時發生錯誤 (InvalidParameterException):無法將測試消息傳送到指定的 Firehose 流。 檢查給定的 Firehose 流是否處於活動狀態。

aws logs put-subscription-filter --log-group-name "xxxx" --filter-name "xxx" --filter-pattern "{$.httpMethod = GET}" --destination-arn "arn:aws:firehose :us-east-1:12345567:deliverystream/xxxxx" --role-arn "arn:aws:iam::12344566:role/xxxxx"

您需要更新您的 IAM 角色的信任策略,以便它向logs.amazonaws.com服務委托人授予代入它的權限,否則 CloudWatch Logs 將無法代入您的角色以將事件發布到您的 Kinesis 流。 (顯然,您還需要仔細檢查角色的權限,以確保它有權讀取您的日志組並寫入您的 Kinesis Stream。)

如果他們將此添加到錯誤消息中以幫助將人們指向正確的方向,那就太好了......

導致此錯誤的最可能問題是權限問題。 即您傳遞給--role-arn的 IAM 角色的定義有問題。 您可能需要仔細檢查角色及其權限是否已按照文檔中的描述正確設置。

如果您的 Firehose 處於活動狀態並且您可以發送日志流,那么剩下的問題只是政策問題。

按照教程進行操作時,我遇到了類似的問題。 這里混淆的是Kinesis部分和Firehose部分,我們可能會混在一起。 您需要重新檢查您的:~/PermissionsForCWL.json,詳細信息部分:

....
"Action":["firehose:*"], *// You could confused with kinesis:* like me*
"Resource":["arn:aws:firehose:region:123456789012:*"]
....

當我完成您提到的教程時,它默認為不同的區域,因此我必須將--region與我的區域一起傳遞。 直到我用正確的區域完成了整個步驟,它才起作用。

對我來說,我認為這個問題的發生是因為在通過區域 IAM 端點為地理上遠離 us-east-1 的區域創建新角色后,IAM 數據平面需要時間來解決。

我有一個自定義 Lambda CF 資源,它通過訂閱過濾器將所有現有和未來的日志組自動訂閱到 Firehose。 IAM 角色為 CW 日志部署,然后 Lambda 函數很快嘗試訂閱日志組。 有時會發生此錯誤。

我在我的代碼中添加了一個 time.sleep(30) (此代碼僅運行一次堆棧創建,因此等待 30 秒不會造成任何傷害)。

訂閱 cloudwatch 日志組並發布到 Kinesis 流時,我遇到了類似的錯誤。 Cdk 沒有定義在允許在 Kinesis 中發布過濾事件的策略之后創建 SubscriptionFilter 所需的依賴項。 這是在這個 github cdk 問題中報告的:

https://github.com/aws/aws-cdk/issues/21827

我最終使用了 github 用戶 AlexStasko 實施的解決方法: https ://github.com/AlexStasko/aws-subscription-filter-issue/blob/main/lib/app-stack.ts

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM