微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

aws ffmpeg+ lambda来完成视频stream的截图 python docker 版

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

准备事项:
  1. 准备一台与lambda系统相同的ec2(临时使用用完就可以delete掉了)

    在这里插入图片描述

  2. 创建IAMffmpeg_ecr_builder

    在这里插入图片描述

  3. 给角色赋予一个策略

    在这里插入图片描述

  4. 给ec2绑定角色即可

    在这里插入图片描述

  5. git clone 自己的项目到ec2实例上面

    git clone 项目url
    
  6. 创建build文件夹并将git clone下来的项目文件夹移动进去

    mkdir inplay_build
    # 移动项目到build文件夹里面
    mv inplay_ffmpeg/ inplay_build/
    #移动Dockerfile到build文件夹里面
    mv Dockerfile /home/ec2-user/inplay_build/
    
  7. 将准备好的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"]
    
  8. 我们要开始build docker image了

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

好了到此我们项目的image 也build完了一切都准备好了,那么我们如何将docker 部署到AWS 的lambda上呢?我们还需要使用一个AWS的服务那就是Amazon Elastic Container Registry (Amazon ECR)

我们开始ecr的部分

  1. 我们通过允许一下命令对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
    
  2. 通过运行以下 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
    
  3. 通过运行以下 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
    
  4. 通过运行以下 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

  1. 创建一个lambda

    在这里插入图片描述


    在这里插入图片描述

好了到此我们的项目已经通过docker的方式部署到lambda上面了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐