您可以為函數發布一個或多個版本,版本就相當於函數的快照,當您發布版本時,Function Compute會為您的函數產生快照,並自動分配一個版本號碼與其關聯。您還可以為函數的版本建立別名,指向該版本。結合函數的版本和別名,您可以輕鬆實現發布、復原以及灰階發布等功能。
灰階發布流程
前提條件
步驟一:準備函數並測試
當您初次建立一個函數時,該函數的版本號碼為LATEST。您可以調試LATEST版本下的函數直至版本穩定運行。您可以通過控制台執行LATEST版本下的函數。
登入Function Compute控制台,在左側導覽列,單擊函數。
在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數。
在函數詳情頁面,單擊代碼頁簽。
在代碼編輯器中,修改代碼為查看函數版本的代碼,單擊部署代碼,然後單擊測試函數。
查看函數版本的程式碼範例如下。
module.exports.handler = function(eventBuf, context, callback) { var qualifier = context['service']['qualifier'] var versionId = context['service']['versionId'] console.log('Qualifier from context:', qualifier); console.log('VersionId from context: ', versionId); callback(null, qualifier); };
# -*- coding: utf-8 -*- def handler(event, context): qualifier = context.service.qualifier versionId = context.service.version_id print('Qualifier from context:' + qualifier) print('VersionId from context:' + versionId) return 'hello world'
<?php function handler($event, $context) { $qualifier = $context["service"]["qualifier"]; $versionId = $context["service"]["versionId"]; print($qualifier); print($versionId); return "hello world"; }
using System; using System.IO; using Aliyun.Serverless.Core; using Microsoft.Extensions.Logging; namespace Desktop { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } class App { public string Handler(Stream input, IFcContext context) { ILogger logger = context.Logger; var qualifier = context.ServiceMeta.Qualifier; var versionId = context.ServiceMeta.VersionId; logger.LogInformation("Qualifier from context: {0}", qualifier); logger.LogInformation("versionId from context: {0}", versionId); return "hello word"; } } }
執行完成後,可以查看日誌輸出。從日誌輸出中,可以看到表示版本資訊的欄位qualifier的值為LATEST,即本次執行的函數為LATEST版本下的函數。
步驟二:發布版本並測試
當LATEST版本的函數穩定時,就發行就緒該版本的函數,使用穩定的版本服務線上的請求。具體操作,請參見發布版本。
新版本發布後,您可以通過控制台執行新版本下的函數。
登入Function Compute控制台,在左側導覽列,單擊函數。
在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數。
在函數詳情頁面,選擇版本頁簽,單擊目標版本。
在目標版本頁面,單擊代碼頁簽,然後單擊測試函數。
執行完成後,可以查看執行日誌。從日誌輸出中,可以看到函數執行時的版本資訊qualifier為1,解析出的versionId為1,即本次執行的函數為版本1下的函數。
步驟三:使用別名切換流量
新版本上線後,您可以建立一個別名,設定別名指向該版本。當該版本更新時,可將別名指向的版本更改為更新的版本。調用方無需關心函數的具體版本,只需要使用正確的別名即可。關於建立別名的具體步驟,請參見建立別名。
別名建立完成後,您可以通過控制台驗證是否執行了正確版本的函數。
本文以別名alias1指向版本1為例。
登入Function Compute控制台,在左側導覽列,單擊函數。
在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數。
在函數詳情頁面,選擇別名頁簽,單擊目標別名。
在目標別名頁面,單擊測試頁簽,然後單擊測試函數。
執行完成後,可以查看日誌輸出。從日誌輸出中,可以看到函數執行時的版本資訊qualifier為alias1,解析出的versionId為1,即本次執行的函數為別名alias1下的函數,該別名指向版本1。
新版本開發完成後,需要使用灰階版本協助新版本穩定發布。
發布新版本時必須保證相對上一此版本發布,函數的配置或代碼發生了變更,否則無法發布新版本。
發布新版本2。具體操作,請參見發布版本。
發布完成後,可在版本列表中查看新發布的版本。
在函數詳情頁面,選擇別名頁簽,單擊目標別名右側操作列的編輯。
在編輯函數的別名面板,將新版本2設定為灰階版本,設定灰階版本權重,然後單擊確定。
待灰階版本運行穩定後,可以將線上流量全部切換到新版本2。
常見問題
如何確認被調用的函數的版本?
使用灰階發布功能時,Function Compute按照您指定的權重來分配流量。您可以通過以下方式來確定被調用的函數的版本:
通過context入參確定
每次函數調用,context入參的參數中會包括qualifier和versionId兩個欄位。
qualifier:調用函數時傳入的版本資訊,可以是版本號碼,也可以是別名。
versionId:函數執行時根據qualifier解析出的具體版本號碼。
通過同步函數調用響應確定
同步函數調用的響應包含x-fc-invocation-function-version Header,可以指示已調用的函數版本。