このトピックでは、サーバーレスワークフローのフローが、予約済みリソース関数または指定されたバージョンの関数をスケジュールする方法について説明します。
概要
実際の運用シナリオでは、サービスシナリオの変更により、タスクフローによってスケジュールされた機能が頻繁に変更される場合があります。 したがって、変更による予期しないアクションを回避し、タスクフローの安定性を制御する必要があります。 次のシナリオでは、サーバーレスワークフローのタスクステップで固定バージョンの関数が役立ちます。
フローAは、複数の関数f1、f2、およびf3を編成する。 同じタスクで同じバージョンの関数を実行する必要があります。 例えば、フローAが実行中である場合、関数f1は実行されているが、このとき関数は更新される。 この場合、最新バージョンの関数f2およびf3がフローAで実行される可能性があり、予期しない結果を引き起こす可能性がある。 したがって、フローが実行する関数のバージョンを固定する必要があります。
関数をロールバックする必要があります。 関数の起動後に新しい変更が原因でフローが失敗した場合は、フローを以前の固定バージョンにロールバックする必要があります。
関数エイリアスは、予約済みリソース関数の呼び出し、関数のコールドスタート時間の短縮、およびコスト最適化のベストプラクティスに使用されます。
Function ComputeにデプロイされているさまざまなIntroduction to versionの関数は、同様のシナリオで継続的な統合とリリースを効率的にサポートできます。 次のセクションでは、フロー内の関数エイリアスを使用して予約済みリソース関数を呼び出す方法を例として説明します。 予約リソース関数は、指定されたバージョンの関数に依存します。 この例は、指定したバージョンの関数が必要なシナリオで確認できます。
ステップ1: 関数のリザーブドインスタンスを作成する
Function Computeでfnf-demo
という名前のサービスを作成します。 このサービスでは、provisionという名前のPython 3関数を作成し、そのバージョンとエイリアスをリリースしてリザーブドインスタンスを生成します。 詳細については、「補足例の概要」をご参照ください。
作成された関数のバージョンが1で、エイリアスがオンラインで、リザーブドインスタンスが生成されているとします。 次のコードは、関数の内容を示しています。
import logging
def handler(event, context):
logger = logging.getLogger()
logger.info('Started function test')
return {"success": True}
ステップ2: フローを作成する
サーバーレスワークフローは、Functionの関数のバージョンとエイリアスをネイティブにサポートします。
サーバーレスワークフローのタスクステップで、resourceArnパラメーターにデフォルト値acs:fc:{region }:{ accID}:services/fnf/functions/test
を入力します。 関数実行ルールに基づいて、デフォルトで最新バージョンの関数が実行されます。 をリリースできます。You can release theバージョンの管理またはエイリアスの管理と入力acs:fc:{region }:{ accID}:services/fnf.{ alias or version}/functions/test
指定されたバージョンの関数を呼び出すフローのタスクステップのresourceArnパラメーターで したがって、次のコードに基づいてフローを定義します。
version: v1
type: flow
steps:
- type: task
resourceArn: acs:fc:::services/fnf-demo.online/functions/provision
# You can also use the version by defining resourceArn: acs:fc:::services/fnf-demo.1/functions/provision.
name: TestFCProvision
ステップ3: 予約された関数を実行し、コンソールまたはCLIで実行結果を確認する
フローを実行します。 予約モードを使用する前の実行内容を次の図に示します。
予約モード使用後の実行内容を次の図に示します。
図に示されるように、予約モードが使用された後、フロー実行時間は、500 msから230 msに短縮される。