在AWS Lambda上部署标准FFmpeg工具——Docker方案

大纲

  • 1 确定Lambda运行时环境
    • 1.1 Lambda系统、镜像、内核版本
    • 1.2 运行时
      • 1.2.1 Python
      • 1.2.2 Java
  • 2 启动EC2
  • 3 编写调用FFmpeg的代码
  • 4 生成docker镜像
    • 4.1 安装和启动Docker服务
    • 4.2 编写Dockerfile脚本
    • 4.3 生成镜像
  • 5 推送镜像
    • 5.1 创建存储库
    • 5.2 给EC2赋予角色
      • 5.2.1 创建策略
      • 5.2.2 创建角色
      • 5.2.3 给EC2绑定角色
    • 5.3 修改docker用户
    • 5.4 推送镜像
  • 6 部署Lambda
  • 参考文献

FFmpeg被广泛应用于音/视频流处理领域。对于简单的需求,我们可以直接运行FFmpeg二进制程序命令就可以完成。但是对于定制性的功能,则需要熟悉系统的代码设计框架,进行二次开发。文本讨论的是在AWS无服务架构的Lambda上,如何通过Docker部署FFmpeg二进制程序。

1 确定Lambda运行时环境

Lambda运行时决定了其运行的CPU架构、操作系统和辅助软件。不同语言的运行时环境不同,相同语言的不同版本的运行时不同,所以这步的确认非常重要,否则会造成FFmpeg与Lambda不兼容的问题。下面是从AWS官方摘录了运行时信息,仅供参考。

1.1 Lambda系统、镜像、内核版本

系统镜像Linux 内核
Amazon Linux镜像 – amzn-ami-hvm-2018.03.0.20181129-x86_64-gp24.14
Amazon Linux 2自定义4.14

1.2 运行时

1.2.1 Python

Python 运行时标识符AWS Python的软件工具包操作系统架构
Python 3.9python3.9boto3-1.20.32 botocore-1.23.32Amazon Linux 2x86_64,arm64
Python 3.8python3.8boto3-1.20.32 botocore-1.23.32Amazon Linux 2x86_64,arm64
Python 3.7python3.7boto3-1.20.32 botocore-1.23.32Amazon Linuxx86_64
Python 3.6python3.6boto3-1.20.32 botocore-1.23.32Amazon Linuxx86_64

1.2.2 Java

Java 运行时标识符JDK作系统架构
Java 11java11amazon-corretto-11Amazon Linux 2x86_64,arm64
Java 8java8.al2amazon-corretto-11Amazon Linux 2x86_64,arm64
Java 8java8amazon-corretto-11Amazon Linuxx86_64

本例使用Python3.9版本,其操作系统是Amazon Linux 2,Linux内核是“4.14”,架构是“x86_64,arm64”。在这两种CPU架构中,我们选择适用面更广的x86_64。如果选择arm64,后续FFmpeg选择,以及Lambda函数运行时也要做出相应调整。

2 启动EC2

在EC2的控制面板中启动最低配置(t2.micro)的实例,同时AMI选择和Lambda一致的Linux内核版本。CPU架构,我们选择常见的X86_64。这些配置也决定了后续我们下载使用的FFmpeg的版本。
在这里插入图片描述
可以创建一对新的密钥对,也可以使用老的密钥对。因为我们使用浏览器连接EC2,所以这个环节不重要。
由于Docker需要一定磁盘,我们需要给该虚拟机20G的磁盘空间。
在这里插入图片描述
待实例处于running状态,可以使用浏览器连接它。
在这里插入图片描述

3 编写调用FFmpeg的代码

由于通过Docker部署的Lambda在Web端看不到代码,也不能在Web端提交代码,于是只能在Docker中提前把代码部署好。
在/home/ec2-user下使用vim新建一个文件lambda_handle.py,并填充内容

import subprocess
import shlexdef lambda_handler(event, context):if not event:return {'statusCode': 400,'body': json.dumps('event error')}ffmpeg_cmd = "/usr/bin/ffmpeg -version"command = shlex.split(ffmpeg_cmd)p = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)return {'statusCode': 200,'body': str(p.stdout, encoding='utf-8')}

这儿我们约定FFmpeg的路径是/usr/bin/ffmpeg,这将在Docker文件中确保该路径正确。

4 生成docker镜像

4.1 安装和启动Docker服务

sudo yum install -y docker
sudo service docker start

4.2 编写Dockerfile脚本

在/home/ec2-user目录下使用vim新建Dockerfile脚本文件,并填入以下内容。其中倒数第三步,是将FFmpeg放到之前约定的/usr/bin目录下;倒数第二步,是将上步编写的Python脚本放到指定目录;最后一步是设置Lambda函数入口。

FROM public.ecr.aws/lambda/python:3.9
RUN export ENVIRONMENT=$ENVIRONMENT:online
RUN /var/lang/bin/python3.9 -m pip install --upgrade pip
RUN yum -y install gcc libjpeg-devel zlib-devel gcc-c++ python3-wheel epel-release wget tar gzip xz
RUN wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
RUN wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz.md5
RUN md5sum -c ffmpeg-release-amd64-static.tar.xz.md5
RUN tar -xvf ffmpeg-release-amd64-static.tar.xz
RUN mv ffmpeg-5.0.1-amd64-static/ffmpeg /usr/bin
COPY ./lambda_handle.py ./
CMD ["lambda_handle.lambda_handler"]

4.3 生成镜像

sudo docker build -t lambda_ffmpeg:latest -f Dockerfile .

5 推送镜像

5.1 创建存储库

在AWS Elastic Container Registry中创建一个名为lambda_ffmpeg的存储库。
在这里插入图片描述

5.2 给EC2赋予角色

5.2.1 创建策略

选择Elastic Container Registry服务,并限制资源为上述创建的ECR库。为了方便测试,暂时先赋予全部权限。(生产环境中要严格遵从最小权限原则。)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后创建了名为“ElasticContainerRegistryLmbdaFfmpegFullAccess”的策略。

5.2.2 创建角色

在IAM中创建一个名为ffmpeg_ecr_builder的角色。
在这里插入图片描述
给这个角色暂时赋予上步创建的策略。
在这里插入图片描述

5.2.3 给EC2绑定角色

在这里插入图片描述在这里插入图片描述

5.3 修改docker用户

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

5.4 推送镜像

在这里插入图片描述
执行1、3和4指令。我们就可以在ECR中看到相应镜像。
在这里插入图片描述

在这里插入图片描述

6 部署Lambda

创建一个名为ffmpeg_from_ecr,从容器映像中选择映像的Lambda。
在这里插入图片描述
运行一次测试,可以看到部署成功了。
在这里插入图片描述

参考文献

  • https://blog.csdn.net/wujiesunlirong/article/details/126492908

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【带头学C++】----- 九、类和对象 ---- 9.10 C++设计模式之单例模式设计

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️麻烦您点个关注,不迷路❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目 录 9.10 C设计模式之单例模式设计 举例说明: 9.10 C设计模式之单例模式设计 看过我之前的文章的,简单讲解过C/Q…

遥测终端机RTU:实现远程监测和控制的重要工具

遥测终端机RTU对设备进行远程监测和控制,支持采集和传输数据,以实现对工业过程、公用事业、水文和环境的监测和管理。 遥测终端机RTU工作原理 计讯物联遥测终端机RTU通过网口、串口进行传感器/设备等现场数据采集,将其转换为数字信号&#xf…

【LeetCode】202. 快乐数

202. 快乐数 难度:简单 题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变…

高校网站建设的效果如何

高校有较高的信息承载需求、招生宣传、学校内容呈现、内部消息触达等需求,对高校来说,如今互联网深入生活各个场景,无论学校发展、外部拓展还是内部师生互动、通知触达等都需要完善。 除了传统传单及第三方平台展示外,学校构建属…

C#-数组池减少GC工作

数组池减少GC工作 通过ArrayPool类(名称空间System.Buffers)使用数组池,可减少垃圾收集器的工作,ArrayPool管理一个数组池,数组可以从这租借,并返回池中,内存在ArrayPool中管理。 创建ArrayPool…

Html5响应式全开源网站建站源码系统 附带完整的搭建教程

Html5响应式全开源网站建站源码系统是基于Html5、CSS3和JavaScript等技术开发的全开源网站建站系统。它旨在为初学者和小型企业提供一套快速、简便的网站建设解决方案。该系统采用响应式设计,可以自适应不同设备的屏幕大小,提高用户体验。同时&#xff0…

Clean My Mac X2024解锁完整版本

Clean My Mac X是Mac上一款美观易用的系统优化清理工具,也是小编刚开始用Mac时的装机必备。垃圾需要时时清,电脑才能常年新。Windows的垃圾清理工具选择有很多,但是Mac的清理工具可选择的就很少。 今天给大家推荐大名鼎鼎的Clean My Mac X&a…

elasticsearch-head 启动教程

D:\elasticsearch-head-master>grunt server ‘grunt’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 npm install -g grunt-clinpm install

Leetcode—190.颠倒二进制位【简单】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—190.颠倒二进制位 算法思路 实现代码 class Solution { public:uint32_t reverseBits(uint32_t n) {uint32_t res 0;for(int i 0; i < 32 && n > 0; i) {res | (n & 1) << (31 - i);n >&…

【华为数据之道学习笔记】1-1非数字原生企业的特点

非数字原生企业的数字化转型挑战 软件和数据平台为核心的数字世界入口&#xff0c;便捷地获取和存储了大量的数据&#xff0c;并开始尝试通过机器学习等人工智能技术分析这些数据&#xff0c;以便更好地理解用户需求&#xff0c;增强数字化创新能力。部分数字原生企业引领着云计…

第二十一章,网络通信

网络协议 IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmission Control Protocol/Internet Protocol。Internet 依靠TCP/IP协议&#xff0c;在全球范围内实现了不同硬件结构、不同操作系统…

浅谈Android 14适配

引言 距离 Android 14 发布已经有一段时间了&#xff0c;趁着这次机会&#xff0c;了解和熟悉了 Android 14 更新的内容&#xff0c;现在来和大家分享一下&#xff0c;大家喜欢的话可以点个赞多多支持一下&#xff0c;文章的内容按照适配内容的重要程度进行排序。 targetSdk …

机器学习实战:预测波士顿房价

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下机器学习中一个非常经典的案例&#xff1a;预测波士顿房价&#xff0c;在此过程中也会补充很多重要的知识点&#xff0c;欢迎大家一起前来探讨学习~ 一、导入数据 在这个项目中&#xff0c;我们利用马萨诸…

python-根据文件名移动已处理的文件

假设NC文件所在的文件夹为"nc_files"&#xff0c;CSV文件所在的文件夹为"csv_files"&#xff0c;目标文件夹为"target_folder"&#xff1a; import os import shutilnc_folder nc_files csv_folder csv_files target_folder target_folder# …

SAP UI5 walkthrough step4 XML Views

SAPUI5 指出多种VIEW类型&#xff0c;包括XML,HTML,JavaScript 推荐使用XML&#xff0c;因为可读性更高 我们提前介绍一下MVC架构。 MVC是一种软件架构模式&#xff0c;它包括三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;…

element el-pagination solt 使用

起初只是想修改一下&#xff0c;共多少条的颜色&#xff0c;和跳转至 发现并不支持 网上找通过js修改&#xff0c;因为我这是在 dialog里面的 好像并不能适用 mounted() {document.getElementsByClassName("el-pagination__jump")[0].childNodes[0].nodeValue &quo…

企业集团采购系统(供应商、询价、招投标)-源码

一、业务需求 企业招标询价供应商管理系统是一种专业的采购管理系统&#xff0c;旨在帮助企业实现供应商关系的管理和采购成本的控制。该系统涵盖了企业采购管理的各个方面&#xff0c;包括采购预算、供应商管理、产品管理、采购计划、询价、竞价、招标、采购订单、采购合同执…

Python零基础入门之详解sort排序使用

文章目录 1.前言2.环境准备3.程序实现4.sort拓展关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 1.前言 昨天一…

低代码平台选型标准:功能、应用与优劣势分析

在数字化转型的浪潮下&#xff0c;中小企业面临满足市场需求、提高效率和竞争力的挑战。低代码平台做为数字化转型的重要工具&#xff0c;为中小企业带来了快速开发和定制应用程序解决方案。但是&#xff0c;在很多低代码平台中&#xff0c;选择是一个重要的环节。企业应该根据…

Linux学习教程(第十一章 Linux高级文件系统管理)二

第十一章 Linux高级文件系统管理&#xff08;二&#xff09; 九、Linux如何判断磁盘配额是否生效&#xff1f; 我们的磁盘配额已经生效&#xff0c;接下来测试一下是否会限制我们的用户。以 lamp1 用户为例&#xff0c; 因为 lamp1 用户除容量被限制外&#xff0c;也限制了文…