我有一个Java dockerized的独立应用程序。每次将对象放入S3存储器时,我都想运行此Docker。在途中是通过AWS批处理,我试图避免。是否有可能直接调用码库运行从AWS lambda
是否有直接和简单的方法来调用从lambda运行码头运行?
我有一个Java dockerized的独立应用程序。每次将对象放入S3存储器时,我都想运行此Docker。在途中是通过AWS批处理,我试图避免。是否有可能直接调用码库运行从AWS lambda
是否有直接和简单的方法来调用从lambda运行码头运行?
是的,没有。
你不能做的是执行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上运行大量不同的作业。
希望能指引您朝着正确的方向发展。
是的尝试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。和其他的东西。
是的。使用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。