如何将 EC2 实例用作 API 服务器?当前正在使用C++ lambda

How do I use EC2 instance as an API server? Currently using a C++ lambda

本文关键字:lambda C++ 服务器 EC2 实例 API      更新时间:2023-10-16

AWS新手在这里。

目前我正在使用C++ Lambda 的自定义运行时(如本教程 https://aws.amazon.com/blogs/compute/introducing-the-c-lambda-runtime/所示(

我将其与 AWS API 网关集成,因此当调用 API 上的 GET/POST 时,会调用这样的 lambda 函数,

static invocation_response my_handler(invocation_request const& req)

"req.payload"将包含我发送的JSON请求。目前为止,一切都好。

出于与延迟/实验相关的原因(也是缺少内存缓存是一个问题(,我想使用 EC2 实例做同样的事情。 即,当使用 JSON 有效负载调用 REST API 时,它会将请求转发到我的 EC2 上运行的C++代码。换句话说,就好像我的 lambda 在 EC2 实例上运行一样。

我如何实现这一点?

是否可以使用 SQS 队列来解耦您的应用程序?Lambda 可以将消息推送到 SQS 队列,运行C++代码的 EC2 实例正在轮询该队列,一旦请求得到处理,EC2 就可以在输出队列中推送请求,供 lambda 使用,将结果发送回用户。

您正在寻找不同的 API 网关集成。

对于 Lambda,这通常是 Lambda 代理集成或 Lambda 非代理(自定义(集成。[1]

如果要访问 EC2 实例,请部署公开 HTTP 终端节点的任意C++应用程序,并使用 HTTP代理集成或 HTTP 自定义集成。[2]

如果要保护您的 EC2 实例并使其仅可从 API 网关访问,则可以使用私有集成。[3]

我建议不要尝试在 EC2 上安装类似 Lambda 的环境,而是在 EC2 实例上使用 docker 容器。这更容易部署和管理。您可以通过弹性容器服务 (ECS( 管理您的 C++ 实例,方法是将 EC2 实例指定为底层 ECS 容器实例。[4]

使用 ECS,您可以利用 EC2 的全部功能(作为底层 EC2 实例的大内存(和易于部署(作为易于使用的容器部署工具(。您可以使用内置的 ALB 集成,通过 HTTP 集成将 API 网关指向 ECS 的集群 ALB 终端节点。此外,您可以将C++代码作为 docker 镜像上传到 ECR,并在 ECS 任务集中引用它。

引用

[1] https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integrations.html
[2] https://docs.aws.amazon.com/apigateway/latest/developerguide/setup-http-integrations.html#api-gateway-set-up-http-proxy-integration-on-proxy-resource
[3] https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-private-integration.html
[4] https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html

"像AWS一样"运行它的最接近的方法是配置Firecracker Micro VM,因为这正是AWS运行LAmbdas/Fargate的方式。

但是,尝试运行它的最简单方法是使用 SAM 本地。通过这样做,它将在本地 Docker 容器上调用 Lambda 函数。

或者尝试查看本地堆栈。