我有一個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。