【问题标题】:Python lambda function times out on failed elasticache connectionPython lambda函数在失败的elasticache连接上超时
【发布时间】:2018-07-07 15:08:52
【问题描述】:

所以我有一个这样的 python 处理程序:

redisClinet = redis.StrictRedis(host = environ['REDIS_ENDPOINT'], port=6379, db=0)    

def handler(event, context):
    // some logic

    lastEvent = redisClinet.get('lastEvent')

    // rest of the logic

我有:

  • lambda vpc 正确设置为与 Elasticache 集群在同一个 vpc 上,安全组允许每次入站/出站
  • lambda 执行角色可以访问所有资源的所有操作,包括 vpc、elasticache 等。

当我在自己的机器上本地运行该函数时,它会很快正确退出,因为 Elasticache 显然拒绝了我机器的 ip 地址,但问题是我在 lambda 上运行它时甚至看不到错误消息来查看发生了什么事。

实际问题:所以除了我的 lambda 无法连接到 redis 的原因之外,如何让 lambda 正确记录错误并退出错误而不是等待 60 秒并超时?

【问题讨论】:

  • 需要更多信息。 Lambda 函数使用的内存是多少?请确认 redis 实例是在该 VPC 上创建的,并且在 Elasticache 子网组中选择的安全组是允许所有入站/出站的安全组。还要确认 Lambda 位于相同的 VPC 和子网中。然后将内存和超时设置为 300 秒,然后重试。也可以在 Lambda 控制台中启用“x-ray”和/或使用 Cloud9(尚未使用此功能)对 Lambda 中发生的事情进行不同的处理。
  • @Aliweb,你弄清楚为什么 lambda / redis 连接超时了吗?
  • @Jun 很遗憾没有
  • @Aliweb 可能是因为 ElasticCache 的访问权限。查看这个 aws 教程:docs.aws.amazon.com/lambda/latest/dg/vpc-ec.html 我刚刚找到了这个。

标签: python redis aws-lambda amazon-vpc amazon-elasticache


【解决方案1】:

提供的信息较少。

Lambda 可能由于 redis 连接而超时。您可以增加 lambda timeout(必须大于 redis 客户端设置的超时时间)或者在 redis-py 中设置自己的连接超时值。

我认为您也可以将 Redis 连接部分移动到 lambda 处理程序中并传递它。尝试捕获并打印捕获中的日志。 像这样的:

def handler(event, context):
    try:
       redisClinet = redis.StrictRedis(host = environ['REDIS_ENDPOINT'], port=6379, db=0)
    except Exception as e:
        print e
    // some logic
    lastEvent = redisClinet.get('lastEvent')
    // rest of the logic

【讨论】:

    猜你喜欢
    • 2017-05-23
    • 2018-07-16
    • 1970-01-01
    • 2016-09-15
    • 2021-07-23
    • 2016-08-06
    • 2016-10-18
    • 2020-11-01
    • 2021-11-08
    相关资源
    最近更新 更多