Object Storage Service支援Function Compute服務,您可以藉助Function Compute快速構建任何類型的應用和函數,本文將介紹如何使用Function Compute將Object Storage Service上多個檔案(Object)打包下載到本地。
前提條件
已開通Function Compute。
您可以在Function Compute產品詳情頁開通Function Compute。
已授權Function Compute訪問OSS。
具體步驟,請參見授予Function Compute訪問其他雲端服務的許可權。
OSS建立的bucket和應用函數需在同一個 region。
已在某個Bucket的指定目錄下上傳多個檔案。本教程以在華東1(杭州)地區的examplebucket下的dir目錄中上傳多個檔案為例。具體步驟,請參見簡單上傳。
已建立應用所屬的Function Compute服務的RAM角色並記錄ARN。具體步驟,請參見建立可信實體為阿里雲帳號的RAM角色。
方案概述
當您從OSS中批量下載Object時可能會遇到批量下載不方便、小檔案較多時下載緩慢等問題。通過調用Function Compute,可以將OSS上的Object先打包,然後將壓縮包下載到本地後再解壓,實現快速下載批量檔案的目的。使用Function Compute打包下載OSS檔案的工作流程如下圖所示。
使用者調用函數,並指定儲存空間及待壓縮的檔案。
Function Compute從OSS中下載指定檔案,並產生一個隨機名稱的ZIP壓縮包。
Function Compute將壓縮包上傳至OSS。
Function Compute將ZIP包的下載地址返回給使用者。
使用者使用返回的長期有效下載地址從OSS中下載檔案。
使用說明
函數運行環境的磁碟空間是有限的,所以採用流式下載和上傳的方式,只在記憶體中緩衝少量的資料。
為了加快速度,Function Compute在產生ZIP檔案的同時將檔案上傳到OSS。
上傳ZIP檔案到OSS時,利用OSS分區上傳的特性,多線程並發上傳。
使用Function Compute壓縮檔時,最大處理時間是24小時(實驗資料為57個檔案,總大小1.06 GB,處理時間為63s)。
操作步驟
以下以通過Function Compute將華東1(杭州)地區examplebucket中dir/目錄下的多個檔案打包下載到本地為例。
部署應用並擷取對外公網網域名稱。
使用Resource Orchestration Service一鍵部署
您可以使用Resource Orchestration Service一鍵配置部署Function Compute應用,並擷取對外公網網域名稱。使用Resource Orchestration Service快速部署Function Compute應用,並擷取對外公網網域名稱的操作步驟如下。
開啟一鍵配置模板連結。
在配置參數頁簽,所有參數保留預設配置,單擊下一步。
在檢查並確認頁簽,單擊建立。
資源棧的資源棧資訊頁簽下的狀態顯示建立中。
資源棧的狀態顯示建立成功後,單擊輸出頁簽,查看對外公網網域名稱。
使用Serverless應用中心一鍵部署
通過Serverless應用中心一鍵部署應用模板start-zip-oss。
其中,部署類型選擇直接部署,應用模板所在地區與Bucket所在地區保持一致,其他選項保留預設配置。配置詳情如下圖所示。
擷取對外公網網域名稱。
單擊結果頁簽。
在triggers欄位擷取對外公網網域名稱(urlInternet)。
使用Serverless Devs命令列工具手動部署
安裝Serverless Devs。
curl -o- -L http://cli.so/install.sh | bash
驗證是否安裝成功。
s -v
成功安裝後的執行結果:
@serverless-devs/s: 2.1.1, s-home: /root/.s, linux-x64, node-v14.19.3
配置Serverless Devs。
s config add --AccessKeyID LTAI******** --AccessKeySecret KZo1******** --access fc-access
參數說明如下:
參數
說明
--AccessKeyID
訪問Function Compute服務的AccessKey ID。
--AccessKeySecret
訪問Function Compute服務的AccessKey Secret。
--Access
自訂密鑰別名。
部署應用模板start-zip-oss。
初始化專案。
參考以下樣本值完成各個配置項。
進入專案。
部署專案。
記錄輸出結果中返回的system_url。
s init start-zip-oss -d start-zip-oss
配置項
樣本值
應用所在的地區
cn-hangzhou
應用所屬的Function Compute服務
start-zip-oss
應用的函數名稱
zip-oss-func
應用所屬的Function Compute服務配置的RAM角色ARN
acs:ram::137918634953****:role/test-role
cd start-zip-oss
s deploy -y
fc-zip-oss-service: region: cn-hangzhou service: name: start-zip-oss function: name: zip-oss-func runtime: python2.7 handler: main.main_handler memorySize: 3072 timeout: 1800 url: system_url: https://zip-oss-func-start-zip-oss-ayouye****.cn-hangzhou.fcapp.run triggers: - type: http name: http-test
在您自己的伺服器或阿里雲ECS上執行以下命令產生event.json檔案,並在檔案中指定Bucket名稱以及待下載的檔案所在目錄。
cat <<EOF > event.json { "bucket": "examplebucket", "source-dir": "dir/" } EOF
說明source-dir僅支援指定為Bucket下的某個目錄,不支援指定為Bucket根目錄。
請求樣本如下。
curl -v -L -o oss.zip -d @./event.json https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run
/test/oss.zip:用於存放dir/目錄下所有檔案的本地路徑。
https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run:部署專案時返回的system_url。
說明如果您需要將以上樣本中的匿名非鑒權HTTP函數修改為鑒權HTTP函數,您可以通過以下任意一種語言的SDK進行調用:
常見問題
是否支援通過Function Compute打包下載檔案時對檔案添加浮水印?
通過Function Compute打包下載檔案時是否支援產生帶有時效性的檔案下載地址?
更多參考
關於Function Compute與OSS互動模板和應用的更多資訊,請參見範例程式碼。
更多OSS使用Function Compute的操作樣本,請參見使用Function Compute實現OSS壓縮檔的自動解壓。