2017-06-22 85 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

相關問題