本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 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 主控台建立服務連結角色。
建立角色 (主控台)
登入 AWS Management Console 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/
。 -
在 IAM 主控台的導覽窗格中,選擇 Roles (角色)。然後選擇 Create role (建立角色)。
-
選擇AWS 服務角色類型,然後選擇 Lambda。
-
選擇 L ambda 使用案例。服務會定義使用案例,以包含服務所需的信任政策。然後選擇 Next: Permissions (下一步:許可)。
-
選擇一或多個許可政策以連接至角色 (例如
AWSLambdaBasicExecutionRole
)。請參閱 AWS Lambda 許可模型。選取可指派您要角色具有之許可政策旁的方塊,然後選擇 Next: Review (下一步:檢閱)。
-
輸入 Role name (角色名稱)。
-
(選擇性) 針對 Role description (角色描述),編輯新服務連結角色的描述。
-
檢閱角色,然後選擇 Create role (建立角色)。
步驟 2:建立 Lambda 函數
您的 Lambda 函數會隨機擲回錯誤或逾時,產生要在 X-Ray 中檢視的範例資料。
重要
確保您的 Lambda 函數與狀態機位於相同的 AWS 帳戶和 AWS 區域。
-
開啟 Lambda 主控台
,然後選擇建立函數。 -
在 Create function (建立函數) 區段中,選擇 Author from scratch (從頭開始撰寫)。
-
在「基本資訊」區段中,設定 Lambda 函數:
-
針對 函數名稱 ,請輸入
TestFunction1
。 -
在執行期選擇 Node.js 18.x。
-
針對 Role (角色),請選擇 Choose an existing role (選擇現有的角色)。
-
對於現有角色,請選取您先前建立的 Lambda 角色。
注意
如果您建立的 IAM 角色未出現在清單中,則該角色可能仍需要幾分鐘才能傳播到 Lambda。
-
選擇建立函數。
建立 Lambda 函數時,請注意頁面右上角的 Amazon 資源名稱 (ARN)。例如:
arn:aws:lambda:us-east-1:123456789012:function:TestFunction1
-
-
將 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 跟踪進行查看和分析的示例錯誤。
-
選擇儲存。
步驟 3:再建立兩個 Lambda 函數
再建立兩個 Lambda 函數。
-
重複步驟 2 以建立另外兩個 Lambda 函數。對於下一個函數,在函數名稱中,輸入
TestFunction2
。對於最後一個函數,在函數名稱中,輸入TestFunction3
。 -
在 Lambda 主控台中,檢查您現在有三個 Lambda 函數
TestFunction1
TestFunction2
、、和TestFunction3
。
步驟 4:建立狀態機
在此步驟中,您將使用 Step Functions 主控台Task
種狀態的狀態機器。每個Task
狀態都會參考三個 Lambda 函數中的一個。
-
開啟 Step Functions 主控台
,然後選擇建立狀態機器。 在「選擇範本」對話方塊中,選取「空白」。
選擇選取。這會在設計模式中開啟工作流程工作室
-
在本教學課程中,您將在程式碼編輯器. Amazon States Language 若要這麼做,請選擇 [程式碼]。
-
刪除現有的樣板代碼並粘貼以下代碼。在「工作」狀態定義中,請記得將範例 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
狀態命名為CallTestFunction1
,CallTestFunction2
和CallTestFunction3
。每個函數都會呼叫三個 Lambda 函數之一。如需詳細資訊,請參閱狀態機器結構。 -
指定狀態機的名稱。若要執行此操作,請選擇的預設狀態機器名稱旁邊的編輯圖示MyStateMachine。然後,在 [狀態機器組態] 中,在 [狀態機器名稱] 方塊中指定名稱。
針對本教學課程,輸入名稱
TraceFunctions
。 -
(選擇性) 在狀態機器組態中,指定其他工作流程設定,例如狀態機器類型及其執行角色。
在此自學課程的其他組態下,選擇啟用 X-Ray 追蹤。保留狀態機器設定中的所有其他預設選項。
如果您先前已使用狀態機器的正確許可建立 IAM 角色,並且想要使用它,請在 [權限] 中選取 [選擇現有角色],然後從清單中選取角色。或選取 [輸入角色 ARN],然後為該 IAM 角色提供 ARN。
-
在 [確認角色建立] 對話方塊中,選擇 [確認] 以繼續。
您也可以選擇 [檢視角色設定] 以返回 [狀態機器組態]。
注意
如果您刪除 Step Functions 建立的 IAM 角色,則 Step Functions 稍後無法重新建立。同樣地,如果您修改角色 (例如,透過從 IAM 政策中的主體移除 Step Functions),Step Functions 稍後無法還原其原始設定。
步驟 5:運行狀態機
狀態機器執行是執行工作流程以執行工作的執行個體。
-
在
TraceFunctions
頁面上,選擇 [開始執行]。系統會隨即顯示 New execution (新執行) 頁面。
-
在 [開始執行] 對話方塊中,執行下列動作:
-
(選擇性) 若要識別您的執行項目,您可以在「名稱」(Name) 方塊中指定執行項目的名稱。默認情況下,Step Functions 自動生成一個唯一的執行名稱。
注意
Step Functions 可讓您建立狀態機器、執行項目和活動的名稱,以及包含非 ASCII 字元的標籤。這些非 ASCII 名稱不適用於 Amazon CloudWatch。若要確保您可以追蹤 CloudWatch 量度,請選擇僅使用 ASCII 字元的名稱。
-
選擇 Start execution (開始執行)。
-
Step Functions 主控台會將您導向至標題為執行 ID 的頁面。此頁面稱為「執行詳細資訊」頁面。在此頁面上,您可以在執行進行時或完成之後複查執行結果。
若要複查執行結果,請在「圖形」檢視中選擇個別狀態,然後選擇步驟詳情窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需有關可在「執行詳細資訊」頁面檢視之執行資訊的詳細資訊,請參閱執行詳細資訊頁面 — 介面概觀。
運行幾個(至少三個)執行。
-
-
執行完成後,請按照 X-Ray 跟踪圖鏈接進行操作。您可以在執行仍在執行時檢視追蹤,但您可能希望在檢視 X-Ray 追蹤對應之前查看執行結果。
-
檢視服務對應以識別發生錯誤的位置、高延遲的連線,或追蹤失敗的要求。在此示例中,您可以查看每個功能接收的流量。
TestFunction2
被稱為更頻繁TestFunction3
,並且TestFunction1
被稱為兩倍以上的頻率TestFunction2
。服務映射會透過根據成功呼叫與錯誤及故障的比例,將每個節點標上顏色,來指出每個節點的運作狀態。
-
綠色表示成功呼叫
-
紅色表示伺服器故障 (500 系列錯誤)
-
黃色表示用戶端錯誤 (400 系列錯誤)
-
紫色表示調節錯誤 (429 請求數太多)
您也可以選擇服務節點來檢視該節點的要求,或選擇兩個節點之間的邊緣來檢視傳遞該連線的要求。
-
-
檢視 X-Ray 追蹤對應,以查看每次執行的情況。Timeline (時間表) 檢視會顯示區段和子區段的階層。清單中的第一個項目是區段,代表服務為單一請求記錄的所有資料。在區段下方為子區段。此範例顯示 Lambda 函數記錄的子區段。
如需瞭解 X-Ray 追蹤以及使用 X-Ray 與 Step Functions 的詳細資訊,請參閱 AWS X-Ray 和 Step Functions