在Lambda中运行任意Docker容器



上下文

我们有一个Cypress测试套件,我们希望将其作为管道的一部分运行。不幸的是,测试套件使用了太多的资源,无法直接在管道中运行。

我们得到的一个潜在解决方案是构建一个包含测试套件的Docker映像,然后将容器的实际运行委托给Lambda。

问题

我面临的问题是,对于Lambda,如果你想运行Docker容器,你必须在创建Lambda函数时预先选择图像。然而,由于每次运行管道时都要构建一个新的映像,因此映像ID不是静态的。

我们的用例/限制

  1. 轻松运行任意Docker镜像
  2. 同时支持同步和异步,因此我们可以选择阻止直到测试完成

注意:使用Lambda不是我们的限制之一。它似乎是我们可以使用的东西,因为您可以在需要的时候调用它,而且不需要担心资源调配。

我尝试过的

  • Docker中的Docker,尝试在另一个容器中运行我们的Cypress映像。这需要对容器的特权访问,而Lambda似乎不允许这样做
  • 使用自定义运行时尝试手动运行Docker容器。Docker没有包含在AWS Linux 2中,看起来我也不能安装它

运行lambda自定义运行时需要发布到ECR。

ECR图像总是有不同的散列。

但是,一次可以运行一个lambda版本。

如果您打算创建具有不同版本的lambda函数的多个实例,这是不可能的。

最好将一个特定的lambda映像用于较小的任务并运行它

然后,当CI完成时,您将能够构建每个lambda函数。之后,您可以根据自己的需求运行lambda函数。

最新更新