Step Functions を使用してアクティビティステートマシンを作成する - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Step Functions を使用してアクティビティステートマシンを作成する

このチュートリアルでは、Java と を使用してアクティビティベースのステートマシンを作成する方法を示します。 AWS Step Functions。 アクティビティを使用すると、ステートマシンから別の場所で実行されるワーカーコードを制御できます。Step Functions のアクティビティについて説明します。 の概要については、Step Functions のステートマシンについて説明します。 を参照してください。

このチュートリアルを完了するには、以下が必要です。

ステップ 1: アクティビティを作成する

Step Functions に、作成したい[worker] (ワーカー) (プログラム) の [activity] (アクティビティ) を認識させる必要があります。Step Functions は、アクティビティの ID を確立する Amazon リソースネーム (ARN) で応答します。このアイデンティティを使用して、ステートマシンとワーカー間で渡される情報を調整します。

重要

アクティビティタスクが同じ にあることを確認します。 AWS ステートマシンとしての アカウント。

  1. Step Functions コンソール内、左のナビゲーションペインで、[Activities] (アクティビティ) を選択します。

  2. [Create activity] (アクティビティの作成) を選択します。

  3. アクティビティの [名前] (get-greeting など) を入力し、[アクティビティの作成] を選択します。

  4. アクティビティタスクが作成されたら、次の例に示すようにARN、その を書き留めます。

    arn:aws:states:us-east-1:123456789012:activity:get-greeting

ステップ 2: ステートマシンを作成する

アクティビティがいつ呼び出されるかと、ワーカーがいつプライマリ作業を実行して、その結果を収集し、結果を戻すべきかを判断するステートマシンを作成します。ステートマシンを作成するには、Workflow Studio の コードエディタ を使用します。

  1. Step Functions コンソール内、左のナビゲーションペインで、[State machines] (ステートマシン) を選択します。

  2. [ステートマシン] ページで、[ステートマシンの作成] を選択します。

  3. [テンプレートを選択] ダイアログボックスで [空白] を選択します。

  4. 選択 を選択して、 で Workflow Studio を開きますデザインモード

  5. このチュートリアルでは、コードエディタでステートマシンの Amazon ステートメント言語 (ASL) 定義を記述します。これを行うには、[コード] を選択します。

  6. 既存のボイラープレートコードを削除して、次のコードを貼り付けます。このコードの例は、 ResourceフィールドARNで前に作成したアクティビティタスクARNの に置き換えてください。

    { "Comment": "An example using a Task state.", "StartAt": "getGreeting", "Version": "1.0", "TimeoutSeconds": 300, "States": { "getGreeting": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:get-greeting", "End": true } } }

    これは、 Amazon ステートメント言語 () を使用したステートマシンの説明ですASL。getGreeting という名前の単一の Task 状態を定義します。詳細については、「State Machine Structure」を参照してください。

  7. グラフの視覚化、追加したASL定義のワークフローグラフが次のグラフのようになります。

    RunActivity タスク状態を使用したステートマシンのグラフ視覚化。
  8. ステートマシンの名前を指定します。これを行うには、デフォルトのステートマシン名 の横にある編集アイコンを選択しますMyStateMachine。次に、[ステートマシンの設定][ステートマシン名] ボックスに名前を指定します。

    このチュートリアルでは、名前として「ActivityStateMachine」と入力します。

  9. (オプション) [ステートマシンの設定] で、ステートマシンのタイプや実行ロールなど、他のワークフロー設定を指定します。

    このチュートリアルでは、[ステートマシンの設定] のデフォルト設定をすべてそのまま使用します。

    ステートマシンに対して正しいアクセス許可を持つ IAMロールを以前に作成していて、それを使用する場合は、アクセス許可 既存のロールを選択 を選択し、リストからロールを選択します。または、ロールを入力しARN、そのIAMロールARNの を指定します。

  10. [ロールの作成を確認] ダイアログボックスで、[確認] を選択して続行します。

    [ロールの設定を表示] を選択して [ステートマシンの設定] に戻ることもできます。

    注記

    Step Functions が作成するIAMロールを削除した場合、Step Functions は後で再作成できません。同様に、ロールを変更した場合 (IAMポリシー内のプリンシパルから Step Functions を削除した場合など)、Step Functions は後で元の設定を復元できません。

ステップ 3: ワーカーを実装する

ワーカーを作成します。ワーカーは、次の処理を行うプログラムです。

  • GetActivityTask API アクションを使用してアクティビティの Step Functions をポーリングします。

  • コードを使用したアクティビティの作業の実行 (次のコードの getGreeting() メソッドなど)。

  • SendTaskSuccessSendTaskFailureおよび SendTaskHeartbeatAPIアクションを使用して結果を返す。

注記

アクティビティワーカーの詳細な例については、例: Ruby のアクティビティワーカー を参照してください この例により、アクティビティワーカーのリファレンスとして使用できるベストプラクティスに基づく実装が提供されます。このコードには、ポーラーおよびアクティビティワーカー用に構成可能な数のスレッドを含む、コンシューマー/プロデューサーパターンが実装されています。

ワーカーを実装するには

  1. GreeterActivities.java という名前のファイルを作成します。

  2. 次のコードを追加します。

    import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.EnvironmentVariableCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.stepfunctions.AWSStepFunctions; import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder; import com.amazonaws.services.stepfunctions.model.GetActivityTaskRequest; import com.amazonaws.services.stepfunctions.model.GetActivityTaskResult; import com.amazonaws.services.stepfunctions.model.SendTaskFailureRequest; import com.amazonaws.services.stepfunctions.model.SendTaskSuccessRequest; import com.amazonaws.util.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; import java.util.concurrent.TimeUnit; public class GreeterActivities { public String getGreeting(String who) throws Exception { return "{\"Hello\": \"" + who + "\"}"; } public static void main(final String[] args) throws Exception { GreeterActivities greeterActivities = new GreeterActivities(); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSocketTimeout((int)TimeUnit.SECONDS.toMillis(70)); AWSStepFunctions client = AWSStepFunctionsClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new EnvironmentVariableCredentialsProvider()) .withClientConfiguration(clientConfiguration) .build(); while (true) { GetActivityTaskResult getActivityTaskResult = client.getActivityTask( new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN)); if (getActivityTaskResult.getTaskToken() != null) { try { JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput()); String greetingResult = greeterActivities.getGreeting(json.get("who").textValue()); client.sendTaskSuccess( new SendTaskSuccessRequest().withOutput( greetingResult).withTaskToken(getActivityTaskResult.getTaskToken())); } catch (Exception e) { client.sendTaskFailure(new SendTaskFailureRequest().withTaskToken( getActivityTaskResult.getTaskToken())); } } else { Thread.sleep(1000); } } } }
    注記

    この例の EnvironmentVariableCredentialsProvider クラスでは、AWS_ACCESS_KEY_ID (または AWS_ACCESS_KEY) および AWS_SECRET_KEY (または AWS_SECRET_ACCESS_KEY) 環境変数が設定されていることを前提としています。ファクトリに必要な認証情報の提供の詳細については、 のAWSCredentialsProvider「」を参照してください。 AWS SDK for Java API リファレンスセットアップ AWS の開発用の認証情報とリージョン AWS SDK for Java デベロッパーガイド

    デフォルトでは、 AWS SDK は、任意のオペレーションのためにサーバーからデータを受信するまで最大 50 秒待ちます。GetActivityTask オペレーションは、次に使用可能なタスクまで最大 60 秒待機するロングポーリングオペレーションです。SocketTimeoutException エラーが発生しないようにするには、 SocketTimeout を 70 秒に設定します。

  3. GetActivityTaskRequest().withActivityArn() コンストラクタのパラメータリストで、 ACTIVITY_ARN 値を、以前に作成したアクティビティタスクARNの に置き換えます。

ステップ 4: ステートマシンを実行する

ステートマシンの実行をスタートすると、ワーカーがアクティビティの Step Functions をポーリングして、その作業を実行し (指定した入力を使用)、その結果を返します。

  1. リポジトリの [] ActivityStateMachine ページ、実行の開始 を選択します。

    [実行を開始] ダイアログが表示されます。

  2. [実行を開始] ダイアログボックスで、以下の操作を行います。

    1. (オプション) 生成されたデフォルトを上書きするカスタム実行名を入力します。

      非ASCII名前とログ記録

      Step Functions は、 以外のASCII文字を含むステートマシン、実行、アクティビティ、およびラベルの名前を受け入れます。このような文字は Amazon では機能しないため CloudWatch、 でメトリクスを追跡できるようにASCII、文字のみを使用することをお勧めします CloudWatch。

    2. 入力ボックスに次のJSON入力を入力してワークフローを実行します。

      { "who": "AWS Step Functions" }
    3. [実行のスタート] を選択します。

    4. Step Functions コンソールから実行 ID のタイトルが付いたページが表示されます。このページは、[実行の詳細] ページと呼ばれます。このページでは、実行の進行中または完了後に実行結果を確認できます。

      実行結果を確認するには、[グラフビュー] で個々の状態を選択し、ステップの詳細 ペインの個々のタブを選択すると、入力、出力、定義などの各状態の詳細がそれぞれ表示されます。[実行の詳細] ページに表示できる実行情報の詳細については、「実行の詳細の概要」を参照してください。

ステップ 5: ワーカーを実行して停止する

ワーカーにアクティビティのステートマシンをポーリングさせるには、ワーカーを実行する必要があります。

  1. コマンドラインで、GreeterActivities.java を作成したディレクトリに移動します。

  2. を使用するには AWS SDKビルドファイルの依存関係libと Java に および third-party ディレクトリのフルパスを追加しますCLASSPATH。詳細については、「」の「 のダウンロードと抽出SDK」を参照してください。 AWS SDK for Java デベロッパーガイド

  3. ファイルをコンパイルします。

    $ javac GreeterActivities.java
  4. ファイルを実行します。

    $ java GreeterActivities
  5. Step Functions コンソールで、[実行の詳細] ページに移動します。

  6. 実行が完了したら、実行結果を確認します。

  7. ワーカーを停止します。