您可以通過使用Serverless Devs和函數計算控制臺完成函數的部署,當匹配解壓規則的ZIP文件上傳到OSS后,會觸發函數自動解壓。
注意事項
建議使用UTF-8或GB 2312編碼命名您的文件或文件夾,否則可能導致解壓后的文件或文件夾名稱出現亂碼、解壓過程中斷等問題。
向Bucket上傳壓縮文件時,請不要選擇歸檔存儲或冷歸檔存儲類型,否則無法正常觸發函數執行。
壓縮文件建議使用標準的ZIP命令行進行壓縮,防止解壓失敗。
向Bucket上傳的壓縮文件中,單個文件大小不要超過1 GB,否則可能導致解壓失敗。
解壓單個壓縮包的最大時間為2小時,超過2小時未完成的任務會解壓失敗。
默認設置的函數執行時長為2小時,您可以調整函數的執行超時時間來滿足業務需求。
操作流程
使用函數計算控制臺實現壓縮文件的自動解壓
前提條件
操作步驟
- 登錄函數計算控制臺,在左側導航欄,單擊應用。
在應用頁面,單擊創建應用。
在創建應用頁面,選擇創建應用的方式。
本文以通過模板創建應用方式為例進行介紹。
在下方模板區域,選擇熱門應用頁簽,找到OSS上傳zip文件自動解壓卡片,光標放到該卡片,然后單擊立即創建。
在創建應用頁面,設置以下配置項,然后單擊創建并部署。
主要配置項說明如下,其余配置項選擇默認值即可。
配置項
說明
基本信息
部署類型
選擇直接部署。
角色名稱
默認為角色AliyunFCServerlessDevsRole。如果現有權限不足,單擊+添加策略,在彈出的對話框選擇要添加的策略,然后單擊添加。
高級配置
地域
選擇應用部署的地域。
服務名
設置要創建的應用所屬的服務名稱。
函數名
設置要創建的應用所屬的函數名稱。
RAM角色ARN
選擇OSS觸發函數時所用的角色。請確保已為該角色配置AliyunOSSFullAccess和AliyunFCDefaultRolePolicy權限策略。
OSS存儲桶名
選擇已創建的Bucket。
前綴
設置文件前綴。默認為src。同一個Bucket下的不同觸發器的文件前綴不能重復。
解壓目標目錄
設置文件解壓后的目標存儲目錄。默認為dst。
說明為了防止循環觸發函數,請將此目錄設置為不同于前綴的目標目錄。
是否保留壓縮文件名為路徑目錄
設置是否保留壓縮文件名為路徑的目錄。取值說明如下:
true:保留壓縮文件名為路徑目錄。例如,設置的解壓目標目錄為target,壓縮文件名為source.zip,解壓后文件路徑為target/source/...。
false:直接解壓到目標目錄中。上述示例中,解壓后文件路徑為target/...。
觸發器RAM角色ARN
默認為角色AliyunOSSEventNotificationRole,OSS會使用此角色發送事件通知調用函數。
測試應用。
上傳.zip文件至與您設置的前綴匹配的目錄時,觸發應用所屬函數執行,自動將.zip文件解壓并保存至您設置的解壓目標目錄。
例如,您設置的前綴為source,解壓目標目錄為target。將.zip文件上傳至source或source1時,均觸發函數執行,并自動解壓保存文件至target。
(推薦)使用Serverless Devs實現壓縮文件的自動解壓
前提條件
已開通函數計算服務。具體操作,請參見開通函數計算服務。
已開通OSS服務并在OSS創建存儲空間。具體操作,請參見開通OSS服務并創建存儲空間。
已安裝并配置Serverless Devs。具體操作,請參見安裝Serverless Devs和配置Serverless Devs。
操作步驟
執行以下命令,下載示例工程。
git clone git@github.com:awesome-fc/decompress-oss.git
執行以下命令,進入項目目錄。
cd decompress-oss
編輯s.yaml文件內的配置信息并保存。
將文件內的
bucketName
的參數信息your-bucket
修改為您創建的Bucket的名稱。可選:按需修改OSS觸發器前綴
Prefix
、后綴Suffix
和解壓后文件保存的目錄PROCESSED_DIR
的參數信息。
說明本文示例中OSS觸發器前綴默認為
src/
,您可以設置為src
;解壓后文件保存目錄默認為dst/
。執行以下命令,部署項目。
sudo s fc-decompress-oss-invoke-fc-EnhancedInstance deploy -y
輸出示例。
Checking Service, Function, Triggers (18.63s) Creating Service, Function, Triggers (13.44s) There is auto config in the service: enhancedInstance-decompress Tips for next step ====================== * Display information of the deployed resource: s info * Display metrics: s metrics * Display logs: s logs * Invoke remote function: s invoke * Remove Service: s remove service * Remove Function: s remove function * Remove Trigger: s remove trigge * Remove CustomDomain: s remove domain fc-decompress-oss-invoke-fc-EnhancedInstance: region: cn-hangzhou service: name: enhancedInstance-decompress function: name: oss-invoke-fc runtime: python3 handler: index.handler memorySize: 4096 timeout: 7200 triggers: - type: oss name: zip-t - type: oss name: gz-t - type: oss name: tar-t
向Bucket中上傳后綴為.zip、.tar、.gz等壓縮文件到指定的目錄并觸發解壓函數執行。
本文示例的默認目錄為src/,解壓后的文件會自動生成到指定的目錄dst/。
相關文檔
如果您僅需要解壓上傳到OSS的ZIP文件,可以直接在OSS配置ZIP文件自動解壓,具體請參見ZIP包解壓。
如果您需要在一個Bucket內關聯大于10個以上的觸發器,可以選擇創建EventBridge類別的OSS觸發器,具體請參見配置EventBridge類別的OSS觸發器。
如果您需要使用函數計算實現打包下載OSS的文件,請參見使用函數計算實現打包下載OSS文件。