elasticache redis - python - 连接超时

时间:2018-02-06 15:51:53

标签: python redis serverless-framework amazon-elasticache

我有一个相当简单的测试应用程序:

#
# For full config options, check the docs:
#    docs.serverless.com
#

service: XXX

plugins:
  - serverless-aws-documentation
  - serverless-python-requirements
custom:
  pythonRequirements:
    dockerizePip: true



provider:
  name: aws
  stage: dev
  region: eu-central-1
  runtime: python3.6
  environment:
    # our cache
    REDIS: xx-xx-redis-001.xxx.euc1.cache.amazonaws.com



functions:
  hello:
    handler: hello/hello_world.say_hello
    events:
      - http:
          path: hello
          method: get
          # private: true # <--  Requires clients to add API keys values in the `x-api-key` header of their request
          # authorizer:   # <--  An AWS API Gateway custom authorizer function

  testRedis:
    handler: test_redis/test_redis.test_redis
    events:
      - http:
          path: test-redis
          method: get

我已将其部署为无服务器

的HTTP端点
System.out.println(driver.findElements(By.cssSelector("[class*='insignia']")).get(1).getAttribute("src"));

当我通过API网关触发端点时,lambda在大约7秒后就会超时。 正确读取环境变量,不显示错误消息。 我想连接redis有问题,但教程非常明确 - 不确定问题是什么。

The problem might need the need to set up a NAT,不确定如何使用无服务器

完成此任务

2 个答案:

答案 0 :(得分:1)

我也遇到了这个问题。对我来说,有一些必须解决的问题

  • lambda需要VPC permissions
  • ElastiCache安全组需要Lambda安全组的入站规则,该规则允许Redis端口上的通信。我以为他们可以在同一个安全组中。
  • 真正的踢腿者:我已经启用了传输中的加密功能。这意味着我需要通过redis.RedisClient(... ssl=True)redis-py页中提到需要将ssl_cert_reqs设置为None才能与ElastiCache一起使用,但是在我看来,这并不正确。但是,我确实需要通过ssl=True

有必要设置ssl=True,但连接只是超时,所以我不停地尝试找出权限/ VPC / SG设置的问题所在。

答案 1 :(得分:0)

尝试将lambda与弹性群集放在同一VPC和安全组中