サービスの1つ以上のバージョンを公開できます。 バージョンは、サービスのスナップショットと同様に使用されます。 バージョンを公開すると、Function Computeはサービスのスナップショットを生成し、サービスをスナップショットに関連付けるためのバージョン番号を自動的に割り当てます。 サービスのバージョンのエイリアスを作成し、そのエイリアスをバージョンに指定することもできます。 サービスのバージョンとエイリアスを使用して、リリース、ロールバック、カナリアリリースなどの機能を実装できます。 このトピックでは、Function Computeコンソールでサービスのバージョンとエイリアスを使用してカナリアリリースを実装する方法について説明します。
カナリア解放プロセス
始める前に
ステップ1: 関数の準備とテスト
サービスとサービス内の関数を初めて作成する場合、サービスのバージョンはLATESTです。 LATESTバージョンのサービスでは、サービスが安定するまでデバッグできます。 function Computeコンソールの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バージョンのサービスに属していることを示します。
ステップ2: バージョンを公開してバージョンをテストする
最新バージョンのサービスが安定すると、安定バージョンのサービスを公開して、オンラインリクエストに応答できます。 詳細については、「バージョンの公開」をご参照ください。
新しいバージョンが公開された後、function Computeコンソールで新しいバージョンの関数を実行できます。
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。
関数ページで、バージョンドロップダウンリストからバージョンを選択します。
管理する関数の名前をクリックします。 表示されるページで、[コード] タブをクリックし、[テスト機能] をクリックします。
関数の実行後、実行ログの出力を表示できます。 この例のログ出力では、修飾子フィールドの値は1、versionIdフィールドの値は1です。 値は、実行された関数がバージョン1のサービスに属していることを示します。
ステップ3: エイリアスを使用してトラフィックを切り替える
バージョンが公開された後、エイリアスを作成し、エイリアスをバージョンにポイントすることができます。 このバージョンが更新されると、エイリアスを新しいバージョンに指定できます。 このように、呼び出し元は関数を呼び出すために正しいエイリアスのみを使用する必要があります。 エイリアスの作成方法については、「エイリアスの作成」をご参照ください。
エイリアスの作成後、function Computeコンソールで正しいバージョンの関数が実行されているかどうかを確認できます。
このトピックの例では、エイリアスalias1はバージョン1を指します。
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。
[関数] ページで、目的の関数の名前をクリックします。
関数の詳細ページの右上隅で、alias1からバージョンまたはエイリアスドロップダウンリスト。
をクリックし、コードタブをクリックし、テスト機能.
実行が完了したら、ログ出力で関数のバージョンを表示できます。 この例のログ出力では、修飾子フィールドの値はalias1で、versionIdフィールドの値は1です。 値は、実行された関数がエイリアスalias1に関連付けられたサービスに属し、エイリアスがバージョン1を指していることを示します。
新しいバージョンが開発された後、カナリアリリースバージョンを使用して、新しいバージョンが安定していることを確認できます。
バージョン2を新しいバージョンとして公開します。 詳細については、「バージョンの公開」をご参照ください。
バージョンが公開された後、バージョンリストで最新バージョンを表示できます。
左側のナビゲーションウィンドウで、エイリアス.
別名リストで、別名alias1バージョンを指す1をクリックし、変更で、アクション列を作成します。
表示されるパネルで、Canary Releaseバージョンパラメーターを2カナリアリリースタイプを選択し、OK.
ランダムカナリアリリース (パーセンテージ)
Canary Release Version Weightパラメーターの値を指定します。 次の図に例を示します。
上記の設定が完了したら、エイリアスalias1を呼び出して、特定の量のトラフィックがバージョン2に切り替えられているかどうかを確認できます。 この例では、エイリアスalias1を呼び出して関数を10回実行すると、バージョン2が3回呼び出され、バージョン1が7回呼び出されます。
指定されたルールに基づくカナリアリリース
説明指定されたルールに基づくカナリアリリースは、HTTP関数に対してのみ選択できます。
この例では、keyの値が
x-test-uid
の場合にのみ、リクエストメッセージがカナリアリリースバージョンにルーティングされます。
次の表に、カナリアリリースルールを作成するためのパラメーターを示します。
パラメーター
説明
名前
作成するエイリアスの名前を入力します。
Majorバージョン
エイリアスのメジャーバージョン。
Canaryリリースバージョンの有効化
カナリアリリースバージョンを有効にするかどうかを指定します。
Canary Releaseバージョン
エイリアスのカナリアリリースバージョン。
カナリアリリースタイプ
カナリアリリースタイプを選択します。 有効な値: [割合によるランダムカナリアリリース] および [指定されたルールに基づくカナリアリリース] 。
[割合によるランダムカナリアリリース]: トラフィックをカナリアリリースバージョンに切り替えるための重み。
指定されたルールに基づくカナリアリリース: カナリアリリースの実行に基づくルール。
Canary ReleaseバージョンWeight
このパラメーターは、カナリアリリースタイプパラメーターを [割合によるランダムカナリアリリース] に設定した場合にのみ必要です。
このパラメータは、カナリアリリースバージョンに切り替えられたトラフィックの割合を指定します。 たとえば、このパラメーターを5% に設定した場合、Function Computeは5% のトラフィックをカナリアリリースバージョンに割り当て、95% のトラフィックをメジャーバージョンに割り当てます。
ルールモード
このパラメーターは、カナリアリリースタイプパラメーターを指定されたルールに基づくカナリアリリースに設定した場合にのみ必要です。
このパラメーターは、指定したルールの選択モードを指定します。 有効な値:
以下のすべてのルールを満たす
以下のルールを満たす
ルール
このパラメーターは、カナリアリリースタイプパラメーターを指定されたルールに基づくカナリアリリースに設定した場合にのみ必要です。
このパラメータは、ルールの内容を指定します。 各ルールには次のフィールドがあります。
パラメータタイプ: パラメータのタイプ。 有効な値: Header、Cookie、およびQuery。
Parameter: カナリアのリリースを制御するために使用されるパラメーターの名前。
条件: 比較条件。 リクエストを送信すると、Function Computeは、指定された条件に基づいて、Parameterフィールドの実際の値とParameterフィールドに指定した値を比較します。 条件が満たされると、要求はカナリアリリースバージョンにルーティングされます。 有効な値:
=, ! =, >, <, >=, <=
: 比較演算子。 たとえば、[条件] フィールドを=
に設定した場合、リクエストパラメーターの実際の値が [値] フィールドで指定した値と等しい場合にのみ、リクエストはカナリアリリースバージョンにルーティングされます。in
: 文字列一致条件。 リクエストは、リクエストパラメーターの実際の値が [値] フィールドで指定した値に含まれている場合にのみ、カナリアリリースバージョンにルーティングされます。値の分布
: 指定されたパラメーター値の分布に基づいてカナリアリリースを実行します。 たとえば、[パラメータータイプ] フィールドをHeaderに、[パラメーター] フィールドをuser-id
に、[値] フィールドを20
に設定します。 これは、HTTPリクエストヘッダーuser-id
の配布値の20% に対応するリクエストがカナリアリリースバージョンにルーティングされることを示します。
値: カナリアのリリースを制御するために使用されるパラメーター値。
[+ ルールの追加] をクリックすると、ルールを追加できます。
高度な設定
プロビジョニング済みインスタンスのCanaryリリース重み
カナリアリリースのプロビジョニング済みモードのインスタンスの割合。 プロビジョニングされたインスタンスの数が1より大きい場合、Function Computeは指定された値に基づいてインスタンスを生成します。 パラメーターを指定しない場合、デフォルト値は1% です。
重要このパラメーターの値は、プロビジョニングされたインスタンスの数が1より大きい場合にのみ有効です。
カナリアリリースのバージョンが安定したら、すべてのオンライントラフィックを新しいバージョン2のサービスに切り替えることができます。
よくある質問
呼び出されたサービスのバージョンを確認するにはどうすればよいですか?
カナリアリリース機能を使用すると、Function Computeは指定された重みに基づいてトラフィックを割り当てます。 次のいずれかの方法でサービスのバージョンを確認できます。
contextパラメーターを使用する
関数が呼び出されるたびに、contextパラメーターに含まれるserviceパラメーターには、修飾子フィールドとversionIdフィールドが含まれます。
qualifier: 関数が呼び出されたときに渡されるバージョン情報。 値には、バージョン番号またはエイリアスを指定できます。
versionId: 関数の実行時に修飾子フィールドに基づいて解析される特定のバージョン番号。
同期関数呼び出しに対するレスポンスの使用
同期関数呼び出しに対する応答には、呼び出されたサービスのバージョンを示すx-fc-invocation-service-versionヘッダーが含まれます。