【问题标题】:cloud watch event invocation failed to call sns topiccloudwatch事件调用调用sns主题失败
【发布时间】:2018-05-18 12:44:17
【问题描述】:

我是 AWS CloudWatch 的初学者。当我使用 AWS java SDK 创建 CloudWatch 事件规则并使用 sns 主题作为目标时,该事件没有被触发。

使用 Direct AWS 管理控制台创建时运行良好。

比较 java sdk 创建和管理控制台创建时,一切都保持不变。

唯一的区别是在aws管理控制台规则调用中,创建了两个指标(invocation,TriggeredRules),在java sdk规则调用中,创建了三个指标(invocation,TriggeredRules,FailedInvocation)。

【问题讨论】:

  • 欢迎来到 SO。我更正了你的拼写。您可以通过添加您使用的相关代码来进一步改进您的问题。另请参阅 How to Ask 以获取更多提示以改进您的问题。

标签: amazon-web-services aws-java-sdk


【解决方案1】:

如果您在 SNS 主题上使用自定义 KMS 密钥,您还需要将以下策略添加到您的 KMS 密钥策略中:

{
  "Sid": "CloudwatchEvents",
  "Effect": "Allow",
  "Principal": {
  "Service": "events.amazonaws.com"
},
  "Action": [
     "kms:Encrypt*",
     "kms:Decrypt*",
     "kms:ReEncrypt*",
     "kms:GenerateDataKey*",
     "kms:Describe*"
    ],
     "Resource": "*"
}

【讨论】:

    【解决方案2】:

    如果您发现它在通过控制台创建时可以工作,但如果您使用 API(或类似 Terraform 的东西)则不能,那么您可能没有更新 SNS 主题策略以便它允许发布事件来自 CloudWatch 事件。控制台以半神奇的方式为您执行此操作,但如果您使用 API,您还有更多工作要做。

    有一个答案here in the FAQ 包含详细信息,但总而言之,您需要在您的 SNS 主题政策中添加(而不是替换)类似的内容:

    {
      "Sid" : "CloudWatchEvents",
      "Effect" : "Allow",
      "Resource" : "${aws_sns_topic.events.arn}",
      "Action" : "sns:Publish",
      "Principal" : {
        "Service" : "events.amazonaws.com"
      }
    }
    

    【讨论】:

    • 谢谢!这解决了我的问题。我在控制台中创建了一个 SNS 主题,并使用常见问题解答中的 CLI 命令检索了策略 JSON。然后我将此策略复制到 CloudFormation 模板中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2020-03-20
    • 1970-01-01
    • 2018-03-28
    相关资源
    最近更新 更多