在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.pswp.cn/news/206859.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206859.shtml
英文地址,請注明出處:http://en.pswp.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;也限制了文…