在 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 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/

  2. 在 IAM 主控台的導覽窗格中,選擇 Roles (角色)。然後選擇 Create role (建立角色)。

  3. 選擇AWS 服務角色類型,然後選擇 Lambda

  4. 選擇 L ambda 使用案例。服務會定義使用案例,以包含服務所需的信任政策。然後選擇 Next: Permissions (下一步:許可)。

  5. 選擇一或多個許可政策以連接至角色 (例如 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. 在「基本資訊」區段中,設定 Lambda 函數:

    1. 針對 函數名稱 ,請輸入 TestFunction1

    2. 執行期選擇 Node.js 18.x

    3. 針對 Role (角色),請選擇 Choose an existing role (選擇現有的角色)

    4. 對於現有角色,請選取您先前建立的 Lambda 角色

      注意

      如果您建立的 IAM 角色未出現在清單中,則該角色可能仍需要幾分鐘才能傳播到 Lambda。

    5. 選擇建立函數

      建立 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. 選擇儲存

步驟 3:再建立兩個 Lambda 函數

再建立兩個 Lambda 函數。

  1. 重複步驟 2 以建立另外兩個 Lambda 函數。對於下一個函數,在函數名稱中,輸入TestFunction2。對於最後一個函數,在函數名稱中,輸入TestFunction3

  2. 在 Lambda 主控台中,檢查您現在有三個 Lambda 函數TestFunction1TestFunction2、、和TestFunction3

步驟 4:建立狀態機

在此步驟中,您將使用 Step Functions 主控台建立具有三Task種狀態的狀態機器。每個Task狀態都會參考三個 Lambda 函數中的一個。

  1. 開啟 Step Functions 主控台,然後選擇建立狀態機器

    重要

    請確定您的狀態機與您先前在步驟 2 和步驟 3 中建立的 Lambda 函數位於相同的 AWS 帳戶和區域。

  2. 在「選擇範本」對話方塊中,選取「空白」。

  3. 選擇選取。這會在設計模式中開啟工作流程工作室

  4. 在本教學課程中,您將在程式碼編輯器. Amazon States Language 若要這麼做,請選擇 [程式碼]。

  5. 刪除現有的樣板代碼並粘貼以下代碼。在「工作」狀態定義中,請記得將範例 ARN 取代為您建立的 Lambda 函數的 ARN。

    { "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 州語言的狀態機器的描述。它定義了三個Task狀態命名為CallTestFunction1CallTestFunction2CallTestFunction3。每個函數都會呼叫三個 Lambda 函數之一。如需詳細資訊,請參閱狀態機器結構

  6. 指定狀態機的名稱。若要執行此操作,請選擇的預設狀態機器名稱旁邊的編輯圖示MyStateMachine。然後,在 [狀態機器組態] 中,在 [狀態機器名稱] 方塊中指定名稱

    針對本教學課程,輸入名稱 TraceFunctions

  7. (選擇性) 在狀態機器組態中,指定其他工作流程設定,例如狀態機器類型及其執行角色。

    在此自學課程的其他組態下,選擇啟用 X-Ray 追蹤。保留狀態機器設定中的所有其他預設選項。

    如果您先前已使用狀態機器的正確許可建立 IAM 角色,並且想要使用它,請在 [權限] 中選取 [選擇現有角色],然後從清單中選取角色。或選取 [輸入角色 ARN],然後為該 IAM 角色提供 ARN。

  8. 在 [確認角色建立] 對話方塊中,選擇 [確認] 以繼續。

    您也可以選擇 [檢視角色設定] 以返回 [狀態機器組態]。

    注意

    如果您刪除 Step Functions 建立的 IAM 角色,則 Step Functions 稍後無法重新建立。同樣地,如果您修改角色 (例如,透過從 IAM 政策中的主體移除 Step Functions),Step Functions 稍後無法還原其原始設定。

步驟 5:運行狀態機

狀態機器執行是執行工作流程以執行工作的執行個體。

  1. TraceFunctions頁面上,選擇 [開始執行]。

    系統會隨即顯示 New execution (新執行) 頁面。

  2. 在 [開始執行] 對話方塊中,執行下列動作:

    1. (選擇性) 若要識別您的執行項目,您可以在「名稱」(Name) 方塊中指定執行項目的名稱。默認情況下,Step Functions 自動生成一個唯一的執行名稱。

      注意

      Step Functions 可讓您建立狀態機器、執行項目和活動的名稱,以及包含非 ASCII 字元的標籤。這些非 ASCII 名稱不適用於 Amazon CloudWatch。若要確保您可以追蹤 CloudWatch 量度,請選擇僅使用 ASCII 字元的名稱。

    2. 選擇 Start execution (開始執行)

    3. Step Functions 主控台會將您導向至標題為執行 ID 的頁面。此頁面稱為「執行詳細資訊」頁面。在此頁面上,您可以在執行進行時或完成之後複查執行結果。

      若要複查執行結果,請在「圖形」檢視中選擇個別狀態,然後選擇步驟詳情窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需有關可在「執行詳細資訊」頁面檢視之執行資訊的詳細資訊,請參閱執行詳細資訊頁面 — 介面概觀

      運行幾個(至少三個)執行。

  3. 執行完成後,請按照 X-Ray 跟踪圖鏈接進行操作。您可以在執行仍在執行時檢視追蹤,但您可能希望在檢視 X-Ray 追蹤對應之前查看執行結果。

    
                            X-Ray 啟用
  4. 檢視服務對應以識別發生錯誤的位置、高延遲的連線,或追蹤失敗的要求。在此示例中,您可以查看每個功能接收的流量。 TestFunction2被稱為更頻繁TestFunction3,並且TestFunction1被稱為兩倍以上的頻率TestFunction2

    服務映射會透過根據成功呼叫與錯誤及故障的比例,將每個節點標上顏色,來指出每個節點的運作狀態。

    • 綠色表示成功呼叫

    • 紅色表示伺服器故障 (500 系列錯誤)

    • 黃色表示用戶端錯誤 (400 系列錯誤)

    • 紫色表示調節錯誤 (429 請求數太多)

    
                            X-Ray 啟用

    您也可以選擇服務節點來檢視該節點的要求,或選擇兩個節點之間的邊緣來檢視傳遞該連線的要求。

  5. 檢視 X-Ray 追蹤對應,以查看每次執行的情況。Timeline (時間表) 檢視會顯示區段和子區段的階層。清單中的第一個項目是區段,代表服務為單一請求記錄的所有資料。在區段下方為子區段。此範例顯示 Lambda 函數記錄的子區段。

    
                            X-Ray 啟用

    如需瞭解 X-Ray 追蹤以及使用 X-Ray 與 Step Functions 的詳細資訊,請參閱 AWS X-Ray 和 Step Functions