Python lambda 函数因 Elasticache 连接失败而超时

问题描述 投票:0回答:2

所以我有一个像这样的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执行角色可以访问所有资源的所有action,包括vpc、elasticache等

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

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

python redis aws-lambda amazon-vpc amazon-elasticache
2个回答
0
投票

提供的信息较少。

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

我认为您还可以将 Redis 连接部分移至 lambda 处理程序中并将其传递。放置一个 try catch 并在 catch 中打印日志。 像这样的东西:

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

0
投票

可能会超时,因为您没有提供令牌,因此客户端正在处理,直到您提供令牌为止,或者可能是因为您正在尝试连接到 Redis 集群,但 TLS 存在问题。调试此问题的一种方法是为您的 redis 库启用调试日志记录并检查下面发生了什么。

import logging
import redis

# Configure logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('redis')
© www.soinside.com 2019 - 2024. All rights reserved.