是否有可能直接从AWS lambda中调用docker run

我有一个我已经dockerized Java独立的应用程序。 每次将一个对象放到S3存储中,我都想运行这个docker。 在途中是通过AWS批处理,我试图避免。

有一个直接和简单的方法来调用从lambda运行docker运行?

是和不是。

你不能做的是执行docker run来在Lambda调用的上下文中运行一个容器。 但是您可以触发ECS上的任务执行。 为此,您需要在ECS上设置群集,这意味着您至less需要为一个EC2实例付款。 因此,不使用Docker可能会更好,但是我对你的应用程序知之甚less。

那里有很多文章如何连接S3,Lambda和ECS。 以下是您可能感兴趣的亚马逊相当深入的文章:

https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/

如果您正在查找代码,则此存储库将实现上述文章中讨论的内容:

https://github.com/awslabs/lambda-ecs-worker-pattern

以下是我们在Lambda函数(Python)中用来从Lambda运行Docker容器的代码片段:

 result = boto3.client('ecs').run_task( cluster=cluster, taskDefinition=task_definition, overrides=overrides, count=1, startedBy='lambda' ) 

我们传入要运行容器的cluster名称,以及定义要运行哪个容器的任务定义,需要的资源等等。 overrides是一个你想在任务定义中重写的设置的字典/映射,我们用它来指定我们要运行的命令(即docker run的参数)。 这使我们能够使用相同的Lambda函数在ECS上运行大量不同的作业。

希望你指出正确的方向。

是的尝试Udocker

Udocker是一个用Python编写的简单工具,它具有最小的依赖关系,因此可以在各种Linux系统中执行。

udocker不使用docker,也不需要安装。

udocker通过在提取的容器上简单地提供类似chroot的环境来“执行”容器。 当前的实现使用PRoot来模仿chroot而不需要特权。

例子

从docker中心拉,并列出拉图像。

 udocker pull fedora 

从拉出的图像创build容器并运行它。

 udocker create --name=myfed fedora udocker run myfed cat /etc/redhat-release 

而且它也很好的检查Hackernoon

因为:在Lambda中,唯一允许写入的地方是/ tmp。 但udocker默认会尝试写入homedir。 和其他的东西。

是。 使用SCAR可以在AWS Lambda中的Docker Hub中运行容器。

例如,您可以创build一个Lambda函数来执行Docker Hub中的ubuntu:16.04映像,如下所示:

 scar init ubuntu:16.04 

然后可以在每次调用函数时在该容器中运行一个命令或一个shell脚本:

 scar run scar-ubuntu-16-04 whoami SCAR: Request Id: ed5e9f09-ce0c-11e7-8375-6fc6859242f0 Log group name: /aws/lambda/scar-ubuntu-16-04 Log stream name: 2017/11/20/[$LATEST]7e53ed01e54a451494832e21ea933fca --------------------------------------------------------------------------- sbx_user1059 

您可以使用Docker Hub中存储的自己的Docker镜像。 有些限制适用,但可以有效地用于在AWS Lambda上运行通用应用程序。 它还具有文件处理事件驱动应用程序的编程模型。 它在引擎盖下使用uDocker 。