如何使用 Docker 向 AWS Lambda 添加 FFmpeg 支持:分步指南

AWS Lambda 提供了一个强大的无服务器计算环境,让开发人员无需配置或管理服务器即可运行代码。在许多情况下,还有一个限制 – FFmpeg(处理多媒体的常用工具之一)不受原生支持。在 Lambda 环境中处理需要视频或音频处理的应用程序时,这可能会成为一个障碍。

如果在网上搜索解决方案,只能找到一些资源,而且这些指南可能已经过时。在本文中,我将向您介绍一种实用的解决方案,用于将 AWS Lambda 函数 Docker 化并支持 FFmpeg。按照本指南并使用下面的 Dockerfile,您将轻松克服这一障碍,并在短时间内让您的 Lambda 函数为 FFmpeg 做好准备。

如何使用 Docker 向 AWS Lambda 添加 FFmpeg 支持:分步指南

为什么 AWS Lambda 原生不支持 FFmpeg?

AWS Lambda 的执行环境非常优化和精简;它没有预装很多工具,FFmpeg 就是其中之一。这使得它很难完成任何涉及视频编码、转码或音频处理的工作。一般来说,AWS Lambda Layers 带来了一种很好的自定义方式,但在使用依赖于系统级二进制文件的库时(如 FFmpeg),它们并不能完全解决这个问题。

解决方案: 对 AWS Lambda 函数进行 Docker 化

使用自定义容器镜像也许是将 FFmpeg 添加到您的 Lambda 函数的最佳方法。Docker 可以帮助您将应用程序及其所有依赖项(包括 FFmpeg)捆绑到一个包中。在此,我将概述如何设置您的 Docker 环境,使 FFmpeg 与 AWS Lambda 无缝协作。

支持 FFmpeg 的 AWS Lambda Docker 化分步指南

步骤 1:创建 Dockerfile

下面的 Dockerfile 概述了创建支持 FFmpeg 的自定义 AWS Lambda 镜像所需的步骤。该映像基于与 AWS Lambda 兼容的 Amazon Linux 2023。它安装了必要的软件包、FFmpeg 和 AWS Lambda 运行时接口客户端。

# 使用 Amazon Linux 2023 基础镜像
FROM public.ecr.aws/lambda/provided:al2023

# 安装必要的系统包
RUN dnf update -y && \
    dnf install -y \
        python3 \
        python3-pip \
        gcc \
        git \
        unzip \
        xz \
        wget \
        tar \
    dnf clean all

# 安装 ffmpeg
RUN wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz && \
    tar -xf ffmpeg-release-amd64-static.tar.xz --strip-components=1 -C /usr/local/bin && \
    ln -sf /usr/local/bin/ffmpeg /usr/bin/ffmpeg && \
    rm -f ffmpeg-release-amd64-static.tar.xz

# 安装 AWS Lambda 运行时接口客户端 (RIC)
RUN pip3 install awslambdaric

# 设置工作目录
WORKDIR ${LAMBDA_TASK_ROOT}

# 将函数代码和需求文件复制到容器中
COPY . ${LAMBDA_TASK_ROOT}

# 安装 Python 依赖项
RUN pip3 install --trusted-host pypi.python.org -r requirements.txt

# 将入口点设置为 Lambda 运行时接口客户端
ENTRYPOINT ["python3", "-m", "awslambdaric"]

# 将 CMD 设置为 Lambda 函数处理程序
CMD ["lambda_function.lambda_handler"]

步骤 2:分解 Dockerfile

  1. 基础镜像:

我们使用亚马逊 Linux 2023 的基础镜像 FROM public.ecr.aws/lambda/provided:al2023,使其与 AWS Lambda 兼容。

  1. 系统软件包安装:

使用 dnf install 命令在系统中安装必要的软件包,包括 Python、GCC 和其他有用的实用程序。

  1. 安装 FFmpeg:

我们使用来自可信来源的 FFmpeg 静态构建,并将其解压缩到 /usr/local/bin 目录中。我们会创建一个符号链接,使 FFmpeg 在整个系统中可用。

  1. AWS Lambda 运行时接口客户端(RIC):

安装 awslambdaric 软件包是为了启用 AWS Lambda 的自定义运行时。

  1. 工作目录和文件复制:

Lambda 函数及其依赖项的代码会复制到容器的工作目录中。(lambda_task_root`)。

  1. Python 依赖项:

使用 pip 安装 requirements.txt 中列出的依赖项。

  1. 入口点和命令

ENTRYPOINT表示启动 Lambda 运行时接口客户端,而CMD则提供了运行 Lambda 函数处理程序(位于lambda_function.lambda_handler)的默认命令。

步骤 3:构建并推送 Docker 镜像

接下来,使用以下命令构建 Docker 镜像:

docker build -t my-lambda-image .

构建镜像后,您需要将其推送到 Amazon Elastic Container Registry (ECR) 或 AWS Lambda 支持的任何其他容器注册表:

# 标记镜像
docker tag my-lambda-image:latest <account-id>.dkr.ecr.<region>.amazonaws.com/my-lambda-image:latest

# 标记镜像
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com

# 推送镜像
docker push <account-id>.dkr.ecr.<region>.amazonaws.com/my-lambda-image:latest

步骤 4:使用自定义镜像创建 Lambda 函数

  1. 打开 AWS Lambda 控制台。
  2. 点击创建函数并选择容器镜像。
  3. 使用 ECR 中选定的镜像部署您的功能。

使用自定义 Docker 镜像的好处

  • 完全控制:您将完全控制环境;因此,您可以包含所有必需的库和二进制文件。
  • 可扩展性:通过 AWS Lambda 实现无服务器扩展,且不会造成功能损失。
  • 更好的调试:Docker 环境中的开发反映了生产设置,这使得调试变得更加容易。

FFmpeg 在 AWS Lambda 中的常见用例

  • 视频/音频编码:将视频/音频文件转码为不同的格式
  • 缩略图生成:用于 Web 应用程序的即时视频缩略图
  • 音频提取:从视频中提取音频流以供进一步处理或分析

将 FFmpeg 集成到 AWS Lambda 中为其在无服务器应用程序中的多媒体处理打开了一个全新的维度。对您的 Lambda 函数进行 Docker 化,可以非常容易地包含 FFmpeg 和其他复杂的依赖项,而这些依赖项在其他情况下是不支持的。这种方法还能解决兼容性问题,进一步增强您构建强大、可扩展的无服务器应用程序的能力。

作者:Gurpreet Singh
来源:gary-badwal.medium.com

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/52055.html

(0)

相关推荐

发表回复

登录后才能评论