在本地测试 Elasticache 和无服务器 AWS Lambda
Testing Elasticache and Serverless AWS Lambda locally
我正在使用无服务器通过 nodejs 模板创建一个 lambda 函数。
- 为了连接到我的 Elasticache Redis,我设置了一个 VPC 并添加了安全组和子网 ID,以及我的 lambda
serverless.yml
的区域。
- 我部署了它并确认我可以设置并从 Redis 获取密钥。
当我尝试serverless invoke local -f functionName
时,它总是超时,所以我必须部署它来测试它。
是否可以使用 serverless
在本地进行测试?
默认情况下,无法从外部 AWS 环境直接访问 Elasticache。根据他们的 documentation,该服务被设计为只能从 AWS 内部访问。在您的情况下,serverless invoke local
超时是因为无法建立连接本身并且 lambda 函数超时。因此,您不能 运行 在本地调用以按照您尝试的方式测试此连接。
要从本地计算机连接到 Elasticache redis,您可以在 public 子网中使用 NAT 实例并设置安全组以打开正确的端口并启用 IP 转发以允许连接到您的 redis缓存集群。步骤给出here。
但是,当 运行在 lambda 上连接时,我会在本地安装 redis 并使用环境变量更改连接字符串以连接到本地机器上的本地 redis 和实际的 Elasticache 集群。
我正在使用无服务器通过 nodejs 模板创建一个 lambda 函数。
- 为了连接到我的 Elasticache Redis,我设置了一个 VPC 并添加了安全组和子网 ID,以及我的 lambda
serverless.yml
的区域。 - 我部署了它并确认我可以设置并从 Redis 获取密钥。
当我尝试serverless invoke local -f functionName
时,它总是超时,所以我必须部署它来测试它。
是否可以使用 serverless
在本地进行测试?
默认情况下,无法从外部 AWS 环境直接访问 Elasticache。根据他们的 documentation,该服务被设计为只能从 AWS 内部访问。在您的情况下,serverless invoke local
超时是因为无法建立连接本身并且 lambda 函数超时。因此,您不能 运行 在本地调用以按照您尝试的方式测试此连接。
要从本地计算机连接到 Elasticache redis,您可以在 public 子网中使用 NAT 实例并设置安全组以打开正确的端口并启用 IP 转发以允许连接到您的 redis缓存集群。步骤给出here。
但是,当 运行在 lambda 上连接时,我会在本地安装 redis 并使用环境变量更改连接字符串以连接到本地机器上的本地 redis 和实际的 Elasticache 集群。