【问题标题】:Failed to put record in kinesis by lambda无法通过 lambda 将记录放入 kinesis
【发布时间】:2018-06-18 07:57:01
【问题描述】:

由于我是 lambda 和 kinesis 的新手,所以提前道歉。

我有一个订阅 SNS 的 SQS。 lambda 从 SQS 轮询消息,并在 XYZ 处理后将其发布到 kinesis。

我想知道通过 lambda 将记录放入 kinesis 是否失败,它的重试机制是什么?

假设它重试乘以代码重试策略并再次失败。由于 lambda 在多次重试后无法将其放入 kinesis,我们是否有任何机制可以收到有关将记录放入 kinesis 失败的通知?会不会被认为是 lambda 无法处理记录,放到 SQS DLQ 中?

失败的频率如何(例如,将记录推送到订阅了 SNS 的 SQS 的失败几乎可以忽略不计)?

【问题讨论】:

  • 您能否详细说明为什么 lambda 无法将记录放入运动流中?一种非常基本的方法是将其包装在 try:...except:... 中,然后重试或将其放入 SQS DLQ。
  • 这可能是 lambda 无法在 kinesis 中记录的任何内部错误。令人担忧的是,我们希望收到一些关键记录尚未被放入 kinesis 进行进一步处理的通知。看看记录就知道了,怎么通知?
  • 您希望如何获得通知?电子邮件、短信?
  • 比如说我想通过电子邮件收到通知。那怎么实现呢?
  • 为上述场景添加答案。

标签: amazon-web-services aws-lambda amazon-kinesis amazon-kinesis-kpl


【解决方案1】:

假设:一个 aws lambda 函数正在尝试在 aws kinesis 流中添加一条记录。

import boto3


kinesis_client = boto3.resource
attempt = 0

while attempt < 5:
  attempt += 1
  try:
    # trying to add a record in a kniesis stream
    response = kinesis_client.put_record(
        StreamName='some_stream_1',
        Data=data,
        PartitionKey='sone_key_123',
    )
  except Exception as err:
    if attempt < 5:
      pass
    else:
      # TODO send an email notification using aws SES
      ses_client.send_email()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多