gpt4 book ai didi

amazon-web-services - 在AWS lambda中运行 'git'

转载 作者:行者123 更新时间:2023-12-02 05:06:57 26 4
gpt4 key购买 nike

我正在尝试在 AWS lambda 中运行 git 以 checkout 存储库。

这是我的设置:

  • 我使用的是nodejs 4.3
  • 我没有使用nodegit因为我想使用“--depth=1”参数,而nodegit不支持该参数。
  • 我已从正确的 AWS AMI 复制了 git 和 ssh 可执行文件,然后将其放入我上传的 zip 中的“bin”文件夹中。
  • 我将它们添加到 PATH 中:

->

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.
  • “警告”是当然的,因为我没有安装 git,只是复制了二进制文件。这是行不通的原因吗?
  • 为什么 git 需要“setuid”?我读到,在某些 shell 中,出于安全原因,该功能被禁用。所以它在 lambda 中不起作用是有道理的。可以以某种方式指示 git 不“需要”这个命令吗?

最佳答案

是的,这绝对是可能的,我创建了一个 Lambda Layer就达到了这个目的。无需弄乱任何环境变量,应该开箱即用:

https://github.com/lambci/git-lambda-layer

如自述文件中所述,您所需要做的就是添加具有以下 ARN 的层:

arn:aws:lambda:<region>:553035198032:layer:git:<version>

(替换 <region><version> ,查看 README 以获取最新版本)

关于amazon-web-services - 在AWS lambda中运行 'git',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37280287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com