在 AWS 上配置基于云的 vscode ide

Configure cloud-based vscode ide on AWS

上下文: 我们有一个平台,用户可以在其中创建自己的项目——每个用户可以创建多个项目。我们需要为他们提供基于浏览器的 IDE 来编辑这些项目。 我们决定使用 coder-server。为此,我们需要在 AWS 上配置一个可自动扩展的集群。当用户单击“编辑项目”时,我们每次都会调出一个新容器。 https://hub.docker.com/r/codercom/code-server

问题: 如何将来自 url 查询 (my-site.com/edit?project=1234) 的参数传递到启动脚本中,以便在启动时在 docker 容器中预配置工作空间?

假设堆栈是 AWS + ECS + Fargate。如果有帮助,我们可以使用 kubernetes 代替 ECS。

我没有任何集群配置方面的经验。将不胜感激任何帮助或至少是进一步挖掘的方向。

以上在AWS ECS中可以通过多种方式实现。此类系统的基本要求是在运行中启动和终止容器,同时保留文件中的更改。 (我将专注于启动容器)

使用 AWS SDK:

可以使用 AWS 开发工具包,使用基本任务定义轻松实现该任务。 AWS SDK 允许启动任务并覆盖基本任务定义。

如果任务定义有 2GB 内存,则 SDK 可以在从任务定义启动任务时将内存覆盖为参数化值。

请参阅 boto3(适用于 Python 的 AWS SDK)文档。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ecs.html#ECS.Client.run_task

整体解决方案

现在我们知道如何使用 python SDK(按需)运行 自定义任务。您的应用程序的整体流程是您 API 调用 AWS lambda 函数和参数以启动并等待继续检查任务状态并在状态正常时更新和路由流量。

  1. API 使用参数调用 AWS lambda 函数
  2. 使用 AWS SDK 的 Lambda 函数创建一个新任务,并覆盖基本任务定义。 (假设基本任务定义已经存在)
  3. 在同一个函数调用中继续检查新任务的状态,并在数据库中设置一个标志,以便前端能够对其做出反应。
  4. 一旦状态正常,您可以使用 AWS SDK 在应用程序负载均衡器中添加规则,以将流量路由到 IP,而不会将 IP 地址暴露给最终客户端(AWS 应用程序负载均衡器可能会变得昂贵,我会建议在 ec2 上使用 Nginx 或 HAProxy 来管理动态路由)

注:

确保您的图像是轻量级的,并且启动时间少于 15 分钟,因为 lambda 无法执行超过该时间。如果是这种情况,请创建一个用于启动 ad-hoc 容器并将它们托管在 EC2

上的微服务

使用 Terraform:

如果您正在寻找基础设施配置,terraform 是您的不二之选。它有一个学习曲线,因此推荐它作为次要选项。

Terraform 在使用变量进行参数化方面很受欢迎,它可以作为 API 的后端轻松插入。您的应用程序的流程仍然与步骤 1 相同,但 AWS Lambda API 将调用您的 ad-hoc 容器微服务,后者又调用 terraform 脚本并将变量传递给它。

请参阅 AWS 的 Terrafrom 文档

https://registry.terraform.io/providers/hashicorp/aws/latest