您可以通過使用Serverless Devs和Function Compute控制台完成函數的部署,當匹配解壓規則的ZIP檔案上傳到OSS後,會觸發函數自動解壓。
注意事項
建議使用UTF-8或GB 2312編碼命名您的檔案或檔案夾,否則可能導致解壓後的檔案或檔案夾名稱出現亂碼、解壓過程中斷等問題。
向Bucket上傳壓縮檔時,請不要選擇Archive Storage或冷Archive Storage類型,否則無法正常觸發函數執行。
壓縮檔建議使用標準的ZIP命令列進行壓縮,防止解壓失敗。
向Bucket上傳的壓縮檔中,單個檔案大小不要超過1 GB,否則可能導致解壓失敗。
解壓單個壓縮包的最大時間為2小時,超過2小時未完成的任務會解壓失敗。
預設設定的函數執行時間長度為2小時,您可以調整函數的執行逾時時間來滿足業務需求。
操作流程
使用Function Compute控制台實現壓縮檔的自動解壓
前提條件
操作步驟
- 登入Function Compute控制台,在左側導覽列,單擊應用。
在應用頁面,單擊建立應用。
在建立應用頁面,選擇建立應用的方式。
本文以通過模板建立應用方式為例進行介紹。
在下方模板地區,選擇熱門 App頁簽,找到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實現壓縮檔的自動解壓
前提條件
已開通Function Compute服務。具體操作,請參見開通Function Compute服務。
已開通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觸發器。
如果您需要使用Function Compute實現打包下載OSS的檔案,請參見使用Function Compute實現打包下載OSS檔案。