繁体   English   中英

如何使用 AWS Lambda 安装 Git?

[英]How do I install Git using AWS Lambda?

我在代码提交存储库中有代码,我正在编写一个 lambda function 来为代码提交存储库的每次签入(事件)构建代码。

我无法安装 git,因此没有克隆存储库。

我怎么go一下呢。

正如其他人提到的那样,在 lambda 上安装 git 要么真的很难,要么完全不可能。 我在 reinvent 上做了一个关于 lambda 和 step 函数的会议,并花了一些时间试图让它工作。 我放弃。 我最近发现的另一种方法是将其中一个 git 库用于 node 或 python 或您正在使用的任何语言。 但这仍然是一个坏主意,并且在您需要维护功能时会引起痛苦。

事实证明,这里有另一种选择,但看起来很乱: 在 AWS lambda 中运行 'git'

使用 CodeBuild 是一个更好的主意。 它是 AWS 上的一个构建系统,可以做任何你想做的事情。 使用 Docker,您可以提供自己的 docker 映像。 我做了一个多阶段构建来创建尽可能小的 GatsbyJS 图像。 现在的缺点是配置需要 30 秒(如果没有自定义映像,则需要将近 2 分钟)。 此外,CodeBuild 每月有 100 分钟的免费时间,永远每月一次。 如果这是个人场景,则可以完全覆盖您。

如果您不介意混合云,还可以查看 Google 的 Cloud Container Builder。 它说它用于构建 docker 映像,但您可以将它用于您需要的任何东西。 每天前 120 分钟免费。 所以绝对是一项很酷的服务。 没有什么能阻止您混合来自不同云的服务。

我在 reInvent 的会议使用了 codebuild、lambda 和许多其他服务,使用来自树莓派的图像和一项识别正在显示哪张幻灯片的服务来实时博客会议。 它工作得很好。 对 SRV335 进行谷歌搜索,如果您有兴趣查看使用 lambda 的代码构建,您应该会找到它

扩展@ephialtis47 的答案:AWS Lambda 的支持容器,特别是 Amazon Linux 2 映像。

Node.js 示例之后,Dockerfile 如下所示:

FROM public.ecr.aws/lambda/nodejs:14

# Assumes your function is named "app.js", and there is a package.json file in the app directory 
COPY app.js package.json  ${LAMBDA_TASK_ROOT}/

# Install git
RUN yum -y install git

# Test git:  Get CPython's 5 most recent tags
RUN git ls-remote --tags https://github.com/python/cpython | tail -n 5 

# Install NPM dependencies for function
RUN npm install

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.handler" ] 

该示例的其余部分详细说明了将容器部署到 AWS ECR,然后从容器创建 Lambda。

选择

isomorphic-git是用纯 JS 编写的 git 实现。 这个包可以部署到标准的 Lambda。 示例index.js

const path = require("path");
const git = require("isomorphic-git");
const http = require("isomorphic-git/http/node");
const fs = require("fs");

const clone = async () => {
    const dir = "/tmp/test-clone";
    const url = "YOUR REPOSITORY URL (MUST BE HTTP URL, SSH NOT SUPPORTED)"
    let results = await git.clone({
        fs,
        http,
        dir,
        url: url,
    });
}
exports.handler = async function (event, context) {
     await clone();
     return context.logStreamName;
};

一个简单的工作解决方案是向您的 lambda 添加一个名为git-lambda-layer 的层。这会将此层添加到默认容器中,并且当您的 lambda 运行时,git 将可用。

单击层并选择“添加层”和“提供层版本 ARN”并输入以下 ARN(将 us-east-1 替换为您的 Lambda 区域):

arn:aws:lambda:us-east-1:553035198032:layer:git-lambda2:8

通过最近添加的从“容器映像”构建 Lambda 函数,您现在可以构建一个运行时实例,该实例还包括 Git 以适应您正在尝试执行的操作。 我这样做是为了构建需要来自私有存储库的依赖项的 Lambda 层。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM