Step Functions で X-Ray によるトレースを表示する - AWS Step Functions

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

Step Functions で X-Ray によるトレースを表示する

このチュートリアルでは、X-Ray を使用してステートマシンの実行時に発生するエラーを追跡する方法について説明します。AWS X-Ray を使用して、ステートマシンのコンポーネントの視覚化、パフォーマンスのボトルネックの特定、およびエラーの原因となったリクエストのトラブルシューティングを行うことができます。このチュートリアルでは、ランダムにエラーを生成する Lambda 関数をいくつか作成し、X-Ray を使用してトレースおよび分析します。

Lambda を使用する Step Functions ステートマシン状態の作成 チュートリアルでは、 Lambda関数を呼び出すステートマシンを作成する手順について説明します。このチュートリアルを完了したら、ステップ 2 に進み、以前に作成した AWS Identity and Access Management (IAM) ロールを使用します。

ステップ 1: Lambda の IAMロールを作成する

AWS Lambda と の両方 AWS Step Functions がコードを実行し、 AWS リソース (Amazon S3 バケットに保存されているデータなど) にアクセスできます。セキュリティを維持するために、Lambda および Step Functions にこれらのリソースへのアクセスを付与する必要があります。

Lambda では、Lambda 関数の作成時に AWS Identity and Access Management (IAM) ロールを割り当てる必要があります。これは、ステートマシンの作成時に Step Functions が IAMロールを割り当てる場合と同じです。

IAM コンソールを使用して、サービスにリンクされたロールを作成します。

ロールを作成するには (コンソール)
  1. にサインイン AWS Management Console し、 でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/

  2. IAM コンソールのナビゲーションペインで、ロール を選択します。次に、[Create role] (ロールの作成) を選択します。

  3. [AWS のサービス] ロールタイプを選択してから、Lambda を選択します。

  4. ユースケースに [Lambda] を選択します。ユースケースは、サービスに必要な信頼ポリシーを含めるように定義されています。次に、[Next: Permissions] (次へ: 許可) を選択します。

  5. ロールにアタッチするアクセス許可ポリシーを 1 つ以上選択します (例: AWSLambdaBasicExecutionRole)。AWS Lambda アクセス許可モデルを参照してください。

    ロールに許可するアクセス許可を割り当てるポリシーの横にあるボックスを選択し、[Next: Review] (次へ: レビュー) をクリックします。

  6. [Role name] (ロール名) に入力します。

  7. (オプション) [Role description] (ロールの説明) で、サービスにリンクされた新しいロールの説明を編集します。

  8. ロールを確認し、[Create role] (ロールの作成) を選択します。

ステップ 2: Lambda 関数を作成する

Lambda 関数はエラーまたはタイムアウトをランダムにスローし、X-Ray で表示するサンプルデータを生成します。

重要

Lambda 関数がステートマシンと同じ AWS リージョン AWS アカウントにあることを確認します。

  1. Lambda コンソールを開き、[関数を作成] を選択します。

  2. [Create function] (関数の作成) セクションで、[Author from scratch] (一から作成) を選択します。

  3. [Basic information] (ベーシックな情報) セクションで、Lambda 関数を構成:

    1. [関数名]TestFunction1 と入力します。

    2. [ランタイム][Node.js 18.x] を選択します。

    3. [Role] (ロール) で、[Choose an existing role] (既存のロールを選択) を選択します。

    4. [既存のロール] で、前に作成した Lambda ロールを選択します。

      注記

      作成したIAMロールがリストに表示されない場合、ロールが Lambda に伝達されるまでに数分かかることがあります。

    5. [Create function (関数の作成)] を選択します。

      Lambda 関数が作成されたら、ページの右上隅にある Amazon リソースネーム (ARN) を書き留めます。例:

      arn:aws:lambda:us-east-1:123456789012:function:TestFunction1
  4. Lambda 関数の次のコードを の関数コードセクションにコピーします。 TestFunction1 ページ。

    function getRandomSeconds(max) { return Math.floor(Math.random() * Math.floor(max)) * 1000; } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } export const handler = async (event) => { if(getRandomSeconds(4) === 0) { throw new Error("Something went wrong!"); } let wait_time = getRandomSeconds(5); await sleep(wait_time); return { 'response': true } };

    このコードは、時間切れの障害をランダムに作成します。これは、X-Ray トレースを使用して表示および分析できるステートマシンでエラーの例を生成するために使用されます。

  5. [Save] を選択します。

ステップ 3: さらに 2 つの Lambda 関数を作成する

さらに 2 つの Lambda 関数を作成します。

  1. ステップ 2 を繰り返して、さらに 2 つの Lambda 関数を作成します。次の関数については、[Function name] (関数名) に TestFunction2 を入力します。最後の関数については、[Function name] (関数名) に TestFunction3 を入力します。

  2. Lambda コンソールで、TestFunction1TestFunction2TestFunction3 の 3 つの Lambda 関数があることをチェックします

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

このステップでは、Step Functions コンソールを使用して、3 つの Task 状態を持つステートマシンを作成します。各 Task 状態 は 3 つの Lambda 関数のうちの 1 つをリファレンスします。

  1. Step Functions コンソールを開き、[ステートマシンの作成] を選択します。

    重要

    ステートマシンが、ステップ 2 とステップ 3 で先ほど作成した Lambda 関数と同じ AWS アカウントとリージョンにあることを確認します。

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

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

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

  5. 既存のボイラープレートコードを削除して、次のコードを貼り付けます。タスク状態定義で、この例を作成した Lambda 関数ARNsARNsの に置き換えることを忘れないでください。

    { "StartAt": "CallTestFunction1", "States": { "CallTestFunction1": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function1", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction2" }, "CallTestFunction2": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function2", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction3" }, "CallTestFunction3": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function3", "TimeoutSeconds": 5, "Catch": [ { "ErrorEquals": [ "States.Timeout" ], "Next": "AfterTimeout" }, { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "Succeed" }, "Succeed": { "Type": "Succeed" }, "AfterTimeout": { "Type": "Fail" }, "AfterTaskFailed": { "Type": "Fail" } } }

    これは、Amazon ステートメント言語を使用したステートマシンの説明です。TaskCallTestFunction1 および CallTestFunction2 という名前の 3 つの CallTestFunction3 状態を定義します。それぞれが 3 つの Lambda 関数のうちの 1 つを呼び出します。詳細については、「State Machine Structure」を参照してください。

  6. ステートマシンの名前を指定します。これを行うには、デフォルトのステートマシン名 の横にある編集アイコンを選択しますMyStateMachine。次に、[ステートマシンの設定][ステートマシン名] ボックスに名前を指定します。

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

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

    このチュートリアルでは、[追加設定][X-Ray トレースを有効にする] を選択します。[ステートマシンの設定] のその他のデフォルト設定をすべてそのまま使用します。

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

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

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

    注記

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

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

ステートマシンの実行は、ワークフローを実行してタスクを実施するインスタンスです。

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

    [新しい実行] ページが表示されます。

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

    1. (オプション) 実行を識別するには、名前を指定するか、デフォルトで生成された実行名 を使用します。

      注記

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

    2. [実行のスタート] を選択します。

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

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

      複数の (少なくとも 3 つ) の実行を行います。

  3. 実行が終了した後、[X-Ray trace map] (X-Ray トレースマップ) リンクに従います。実行中であっても、トレースを表示できますが、X-Ray トレースマップを表示する前に、実行結果を確認したくなるかもしれません。

  4. サービスマップを表示して、エラーの発生場所、高レイテンシーの接続、失敗したリクエストのトレースを識別します。この例では、各関数が受信しているトラフィック量を確認できます。TestFunction2 の呼び出し回数は TestFunction3 よりも多く、TestFunction1 の呼び出し回数は TestFunction2 の 2 倍を超えました。

    このサービスマップは、各ノードの状態をエラーと障害に対する正常な呼び出しの比率に基づいて色分けしたものです。

    • は、正常な呼び出し

    • は、サーバー障害 (500 系のエラー)

    • は、クライアントエラー (400 系のエラー)

    • は、スロットリングエラー (429 リクエストが多すぎる)

    3 つのテスト関数の X-Ray トレースノードのスクリーンショット例。

    そのノードのリクエスト、または 2 つのノード間のエッジを表示するサービスノードを選択して、その接続でやりとりされたリクエストを表示できます。

  5. X-Ray トレースマップを表示して、実行ごとに何が起こったかを確認します。タイムラインビューには、セグメントとサブセグメントの階層を表示します。リスト内の最初のエントリは、1 回のリクエストに対してサービスによって記録されたすべてのデータを表すセグメントです。セグメントの下にサブセグメントがあります。この例では、Lambda 関数によって記録されたサブセグメントを表示しています。

    テスト関数の X-Ray タイムラインセグメントとサブセグメントのスクリーンショット例。

    X-Ray トレースを理解し、Step Functions を使って X-Ray を使用する方法の詳細については、の Step Functions リクエストデータをトレースする AWS X-Ray を参照