亚马逊Kinesis:在同步Kinesis分片和租赁时捕获异常

11

我正在尝试在AWS上使Snowplow工作。当我试图在实例上运行stream-enrich服务时,我遇到了这个异常:

[main] INFO com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker - Syncing Kinesis shard info
[main] ERROR com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShardSyncTask - Caught exception while sync'ing Kinesis shards and leases
[cw-metrics-publisher] WARN com.amazonaws.services.kinesis.metrics.impl.CWPublisherRunnable - Could not publish 4 datums to CloudWatch

我认为错误不是由Cloud Watch引起的:

同步Kinesis分片和租赁时捕获异常


1
我遇到了同样的问题。我在其他论坛帖子中发现,需要确保服务器的IAM角色可以访问Kinesis、Dynamo和Cloudwatch,但这并没有解决我的问题。你找到解决方案了吗? - one stevy boi
我遇到了同样的问题,而且我有完全的访问权限。 你找到解决方法了吗? - Raju Guduri
实际上,问题确实出在无法创建/访问 DynamoDB 表上,它保存了当前处理成功的 Kinesis 数据包索引的信息。因此,请确保您的 IAM 角色可以在 DynamoDB 中创建该表。参考文献:https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-ddb.html - Prakhar Mishra
3个回答

1
如上面的评论所提到的,当您缺少 Kinesis Client Library (KCL) 所需的 AWS 资源权限时,就会出现此错误。这可能是 DynamoDB、CloudWatch 或 Kinesis。对于 Snowplow 的 Stream Enrich 组件,您需要以下权限:
  • 输入 kinesis 流(collector good)的读取权限
  • 输出 kinesis 流(enrich good 和 enrich bad)的写入权限
  • kinesis 流的列表权限
  • DynamoDB 状态表的读/写/创建权限(表名是流丰富的 application.conf 中“appName”的值)
  • 向 Cloudwatch 发送 PutMetricData
符合这些需求的 IAM 策略的模板版本如下:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kinesis:DescribeStream",
        "kinesis:GetShardIterator",
        "kinesis:GetRecords",
        "kinesis:ListShards"
      ],
      "Resource": [
        "${collector_stream_out_good}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
          "kinesis:ListStreams"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "kinesis:DescribeStream",
        "kinesis:PutRecord",
        "kinesis:PutRecords"
      ],
      "Resource": [
        "${enricher_stream_out_good}",
        "${enricher_stream_out_bad}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:CreateTable",
        "dynamodb:DescribeTable",
        "dynamodb:Scan",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:UpdateItem",
        "dynamodb:DeleteItem"
      ],
      "Resource": [
        "${enricher_state_table}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Resource": "*"
    }
  ]
}

我已经撰写了一篇博客文章,涵盖了Stream Enrich和其他Snowplow组件所需的IAM权限,因为在Snowplow文档中,对于确切所需权限的解释很少或者根本不存在。
希望这可以帮到你!

0
今天我遇到了这个问题。对我来说,问题是我改变了kinesis的流名称,但没有在增强配置中更改appName
一旦我将appName更改为新名称并部署更新到snowplow enrich,我就能够摆脱错误。

0

我在设置Snowplow时遇到了问题。我使用terraform自动化基础架构,在销毁和重新应用后出现了错误。以下是我的解决方法。

您需要为enricher DynamoDB授予权限,以便它可以创建表。如果在enricher创建表之前已经创建了该表(但在我的情况下没有被terraform销毁),则无法使用相同名称创建表。它似乎也无法链接到现有的表。

我的解决方案是通过AWS控制台删除现有的DynamoDB表,终止我的enricher,并启动一个新的enricher。错误不再出现,我的enricher按预期工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接