2017-06-22 64 views

回答

4

是的,没有。

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

在那里有很多文章如何连接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泊坞窗容器:

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

我们通过我们想要运行容器的cluster的名称,以及定义要运行哪个容器的任务定义,它需要的资源等等。 overrides是一个字典/地图,其中包含要在任务定义中覆盖的设置,我们用它来指定要运行的命令(即参数为docker run)。这使我们能够使用相同的Lambda函数在ECS上运行大量不同的作业。

希望能指引您朝着正确的方向发展。

0

是的尝试Udocker

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

udocker不使用码头工具,也不需要安装。

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

示例

从码头集线器拉出并列出拉出的图像。

udocker pull fedora 

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

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

而且它也很好检查Hackernoon

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

0

是的。使用SCAR可以在AWS Lambda中的Docker Hub中运行容器。在泊坞枢纽16.04图片如下:

例如,你可以创建一个lambda函数执行一个容器出来的ubuntu

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

相关问题