【问题标题】:Connecting Cassandra from AWS Lambda从 AWS Lambda 连接 Cassandra
【发布时间】:2018-09-22 12:34:23
【问题描述】:
我们正在检查将我们的一个应用程序迁移到 Amazon Web Services (AWS) 的可行性。我们决定使用 AWS API Gateway 公开服务并使用 AWS Lambda (java) 进行后端数据处理。 lambda 函数必须从我们的数据库中获取大量数据。
目前使用Cassandra进行数据存储,已经设置在EC2实例中,没有公网ip。
谁能建议一种使用私有 IP (10.0.x.x) 从 AWS Lambda 访问 Cassandra(EC2) 的方法?
将 AWS Lambda 用于大规模应用程序是否正确?
【问题讨论】:
标签:
amazon-web-services
cassandra
aws-lambda
serverless-framework
【解决方案1】:
由于您的 Cassandra 实例使用私有 IP,因此您需要配置 AWS lambda 网络以使用 VPC。它可能是您在其中运行 Cassandra 的 VPC,也可能是您为 lambdas 创建的 VPC,并且您的 VPC 与您的 cassandra VPC 对等。 documentation 的一些注意事项:
- 当您的 lambda 在 VPC 中运行时,它默认无法访问 Internet,您需要为此配置 NAT。
-
ENI 的配置会导致额外的延迟(您只需在冷启动时支付该惩罚)
- 您需要确保您的 lambda 具有管理 ENI 的正确权限,您应该使用此角色:AWSLambdaVPCAccessExecutionRole
您使用 API / AWS lambda 的计划至少有 3 个需要仔细考虑的潜在问题:
-
费用。 API 网关每个请求的成本高于 AWS lambda 每个请求的成本。确保您熟悉费用。
-
冷启动。当 AWS 启动一个底层容器来执行您的 lambda 时,您需要支付冷启动延迟(由于 ENI 的管理,在使用 VPC 时会变得更糟)。如果你同时执行你的 lambda,将会有多个底层容器。他们每个人都会第一次经历这种冷启动。 AWS 倾向于让底层容器准备好热启动几分钟(用户报告 5 到 40 分钟)。您可能会尝试通过 ping 您的 aws lambda 来保持容器温暖,显然如果您有多个并行容器,这会变得很棘手。
-
Cassandra 会话。您可能希望避免在每次调用 lambda 时创建和销毁 Cassandra 会话(代价高昂)。我还没有尝试过,但有报道称会话在温暖的容器中保持活动状态,您可能需要查看SO answer。
话虽如此,目前使用 AWS lambda 的最大限制是并发执行和冷启动延迟。对于数据处理,这通常很好。对于面向用户的使用,慢速冷启动的百分比可能会影响您的用户体验。