aws ffmpeg+ lambda来完成视频stream的截图 python docker 版
描述:
业务需求在aws云上面实现直播,随机截取直播流进行截图,上传到S3桶里面去。
业务其实很简单,难点是在如何在serverless的lambda来部署ffmpeg,因为lambda的无状态特性,所以我们无法直接在lambda上安装ffmpeg的安装包。
这就让我们在aws的lambda上部署ffmpeg变的困难起来,但是方法总比困难多,我有两个解决方案:
1. 通过docker 部署到aws 的lambda
2. 通过自定义层的方法部署到lambda
我们前面讲了第二种方案,今天介绍一下比较繁琐的第一种方案。
通过Docker的方式来部署ffmpeg到lambda
准备事项:
-
准备一台与lambda系统相同的ec2(临时使用用完就可以delete掉了)
-
创建IAMffmpeg_ecr_builder
-
给角色赋予一个策略
-
给ec2绑定角色即可
-
git clone 自己的项目到ec2实例上面
git clone 项目url
-
创建build文件夹并将git clone下来的项目文件夹移动进去
mkdir inplay_build # 移动项目到build文件夹里面 mv inplay_ffmpeg/ inplay_build/ #移动Dockerfile到build文件夹里面 mv Dockerfile /home/ec2-user/inplay_build/
-
将准备好的dockerfile代码写入到Dockerfile里面
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 ./inplay_ffmpeg ./ CMD ["lambda_handle.lambda_handler"]
-
我们要开始build docker image了
sudo docker build -t inplay:latest -f Dockerfile .
好了到此我们项目的image 也build完了一切都准备好了,那么我们如何将docker 部署到AWS 的lambda上呢?我们还需要使用一个AWS的服务那就是Amazon Elastic Container Registry (Amazon ECR)
我们开始ecr的部分
-
我们通过允许一下命令对ecr 注册表种的docker进行身份验证。
重要提示:将 us-east-1 替换为 AWS 区域。然后,将 123456789012 替换为您的 AWS 账户 ID。 aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
-
通过运行以下 create-repository AWS CLI 命令创建 Amazon ECR 存储库:
重要提示:请将 hello-world 替换为您的 Amazon ECR 存储库的名称。 aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
-
通过运行以下 docker tag Docker CLI 命令来标记要推送到存储库的容器镜像:
重要提示:请将 123456789012 替换为您的 AWS 账户 ID。将 us-east-1 替换为 AWS 区域。 docker tag hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
-
通过运行以下 docker push Docker CLI 命令将您的容器镜像推送到存储库:
重要提示:请将 123456789012 替换为您的 AWS 账户 ID。将 us-east-1 替换为 AWS 区域。 docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
好到此我们已经将我们的项目push到ecr上了,接下来我们要将docker部署到lambda上面去了
部署docker到lambda
- 创建一个lambda
好了到此我们的项目已经通过docker的方式部署到lambda上面了
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。