如何将 EC2 实例用作 API 服务器?当前正在使用C++ lambda
How do I use EC2 instance as an API server? Currently using a C++ lambda
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 函数。
或者尝试查看本地堆栈。
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- 使lambda不可复制/不可移动
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- AWS Lambda C++运行时权限被拒绝
- 捕获lambda中的std::数组
- 这 4 个 lambda 表达式之间有什么区别?
- 在实现文件中使用头文件的通用 lambda
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?