[英]Running 'git' in AWS lambda
我正在嘗試在 AWS lambda 中運行 git 以檢查存儲庫。
這是我的設置:
->
process.env['PATH'] = process.env['LAMBDA_TASK_ROOT'] + "/bin:" + process.env['PATH'];
輸入變量設置如下:
"checkout_url": "git@...",
"branch":"master
現在我這樣做(為簡潔起見,我混合了一些偽代碼):
downloadDeploymentKeyFromS3Sync('/tmp/ssh_key');
fs.chmodSync("/tmp/ssh_key",0600);
process.env['GIT_SSH_COMMAND'] = 'ssh -o StrictHostKeyChecking=no -i /tmp/ssh_key';
execSync("git clone --depth=1 " + checkout_url + " --branch " + branch + " /tmp/checkout");
使用lambda-local在我的本地計算機上運行它一切正常! 但是當我在 lambda 中測試它時,我得到:
warning: templates not found /usr/share/git-core/templates
PRIV_END: seteuid: Operation not permitted\r
fatal: Could not read from remote repository.
是的,這絕對是可能的,我已經創建了一個Lambda 層來實現這一點。 不需要弄亂任何環境變量,應該開箱即用:
https://github.com/lambci/git-lambda-layer
如自述文件中所述,您需要做的就是添加一個具有以下 ARN 的層:
arn:aws:lambda:<region>:553035198032:layer:git:<version>
(替換<region>
和<version>
,查看最新版本的自述文件)
問題是你不能只復制 git 二進制文件。 你需要一個可移植的 git 版本,即使這樣你也會過得很糟糕,因為你不能保證運行 lambda 函數的操作系統與二進制文件兼容。
退后一步,我會完全放棄這種方法。 我會克隆並構建一個包,我會以與您下載部署密鑰從 S3Sync 的方式幾乎相同的方式下載該包。
您可能認為這是一個非答案,但我發現從 Lambda 運行任意二進制文件的最簡單方法是......不要。 如果我無法從獨立於平台的非二進制方法中完成工作,我會將 Docker 集成到工作流中,通過 Lambda 函數管理 Docker 容器。
在 AWS 上,一種方法是使用彈性容器服務 (ECS) 來生成運行 git 的任務。
如果您建立一個 Docker Swarm 實例或集成另一個與 Docker-API 兼容的服務,例如 Rackspace Carina 或 Joyent 的 Triton,那么您可以使用我個人專門用於將 AWS Lambda 與 Docker 集成的項目: “Dockaless” 。
祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.