本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
檢測 Ruby 代碼 AWS Lambda
Lambda 與 AWS X-Ray 之整合,可讓您追蹤、偵錯和最佳化 Lambda 應用程式。您可以使用 X-Ray 追蹤要求,因為它遍歷應用程式中的資源,從前端API到後端的儲存裝置和資料庫。只要將 X-Ray 程式SDK庫新增至您的組建設定,就可以記錄函式對 AWS 服務所進行的任何呼叫的錯誤和延遲。
設定主動追蹤之後,您可以透過應用程式來觀察特定請求。X-Ray 服務圖顯示了有關應用程式及其所有元件的資訊。下列範例顯示具有兩個函式的應用程式。主要函式會處理事件,有時會傳回錯誤。頂部的第二個函數處理出現在第一個日誌組中的錯誤,並使用調 AWS SDK用 X-Ray,Amazon 簡單存儲服務(Amazon S3)和亞馬遜 CloudWatch 日誌。
若要使用控制台在 Lambda 函數上切換主動追蹤,請按照下列步驟操作:
開啟主動追蹤
開啟 Lambda 主控台中的 函數頁面
。 -
選擇一個函數。
選擇 組態 ,然後選擇 監控和操作工具 。
選擇 編輯 。
-
在 X-Ray 下,打開 主動追蹤 。
-
選擇 儲存 。
定價
作為免費方案的一部分,您可以每月免費使用 X-Ray 追蹤,最多達到一定限制。 AWS 達到閾值後,X-Ray 會收取追蹤儲存及擷取的費用。如需詳細資訊,請參閱 AWS X-Ray 定價
您的函數需要將追蹤資料上傳至 X-Ray 的許可。當您在 Lambda 主控台中啟用追蹤時,Lambda 會將必要的許可新增至函數的執行角色。否則,請將AWSXRayDaemonWriteAccess
X-Ray 無法追蹤應用程式的所有請求。X-Ray 會套用取樣演算法以確保追蹤的效率,同時仍提供所有請求的代表範本。取樣率為每秒 1 次請求和 5% 的額外請求。您無法為您的功能配置 X-Ray 採樣率。
在 X-Ray 中,追蹤會記錄一或多個服務所處理之要求的相關資訊。Lambda 會記錄每個追蹤 2 個區段,在服務圖表上建立兩個節點。下列影像會強調顯示這兩個節點:
左側第一個節點代表接收調用請求的 Lambda 服務。第二個節點代表您特定的 Lambda 函數。下列範例顯示了具有這 2 個區段的追蹤。兩者都被命名為我的函數,但一個具有的起源AWS::Lambda
,另一個具有的AWS::Lambda::Function
起源。如果AWS::Lambda
區段顯示錯誤,表示 Lambda 服務發生問題。如果AWS::Lambda::Function
區段顯示錯誤,表示您的函數發生問題。
此範例會展開區AWS::Lambda::Function
段以顯示其三個子區段。
注意
AWS 目前正在對 Lambda 服務實作變更。由於這些變更,您可能會看到系統記錄訊息的結構和內容,以及. AWS 帳戶
此處顯示的示例跟踪說明了舊式函數段。以下段落說明舊樣式和新樣式區段之間的差異。
這些變更將在未來幾週內實施,除了中國和 GovCloud 地區以 AWS 區域 外的所有功能都將轉換為使用新格式的日誌訊息和追蹤區段。
舊式函數段包含以下子段:
-
初始化 - 表示載入函數和執行初始化程式碼所花費的時間。只有函數的每個執行個體所處理的第一個事件會顯示此子區段。
-
調用 – 表示執行處理常式程式碼所花費的時間。
-
額外負荷 - 表示 Lambda 執行期為做好準備以處理下一個事件所花費的時間。
新樣式的函數段不包含Invocation
子段。相反,客戶子段直接附加到功能段。如需有關舊型式和新型式函數區段結構的詳細資訊,請參閱了解 X-Ray 追蹤。
您可以測試處理常式程式碼,以記錄中繼資料並追蹤下游呼叫。若要記錄處理常式對其他資源和服務進行呼叫的詳細資訊,請使用 X-Ray SDK for Ruby。若要取得SDK,請將aws-xray-sdk
套件新增至應用程式的相依性。
範例 blank-ruby/function/Gemfile
# Gemfile source 'https://rubygems.org'
gem 'aws-xray-sdk', '0.11.4'
gem 'aws-sdk-lambda', '1.39.0' gem 'test-unit', '3.3.5'
要檢測 AWS SDK客戶端,請在初始化代碼中創建客戶端後需要該aws-xray-sdk/lambda
模塊。
範例 空白紅寶石/函數/lambda 函數 .rb-跟踪客戶端 AWS SDK
# lambda_function.rb require 'logger' require 'json' require 'aws-sdk-lambda' $client = Aws::Lambda::Client.new() $client.get_account_settings()
require 'aws-xray-sdk/lambda'
def lambda_handler(event:, context:) logger = Logger.new($stdout) ...
在 X-Ray 中,追蹤會記錄一或多個服務所處理之要求的相關資訊。Lambda 會記錄每個追蹤 2 個區段,在服務圖表上建立兩個節點。下列影像會強調顯示這兩個節點:
左側第一個節點代表接收調用請求的 Lambda 服務。第二個節點代表您特定的 Lambda 函數。下列範例顯示了具有這 2 個區段的追蹤。兩者都被命名為我的函數,但一個具有的起源AWS::Lambda
,另一個具有的AWS::Lambda::Function
起源。如果AWS::Lambda
區段顯示錯誤,表示 Lambda 服務發生問題。如果AWS::Lambda::Function
區段顯示錯誤,表示您的函數發生問題。
此範例會展開區AWS::Lambda::Function
段以顯示其三個子區段。
注意
AWS 目前正在對 Lambda 服務實作變更。由於這些變更,您可能會看到系統記錄訊息的結構和內容,以及. AWS 帳戶
此處顯示的示例跟踪說明了舊式函數段。以下段落說明舊樣式和新樣式區段之間的差異。
這些變更將在未來幾週內實施,除了中國和 GovCloud 地區以 AWS 區域 外的所有功能都將轉換為使用新格式的日誌訊息和追蹤區段。
舊式函數段包含以下子段:
-
初始化 - 表示載入函數和執行初始化程式碼所花費的時間。只有函數的每個執行個體所處理的第一個事件會顯示此子區段。
-
調用 – 表示執行處理常式程式碼所花費的時間。
-
額外負荷 - 表示 Lambda 執行期為做好準備以處理下一個事件所花費的時間。
新樣式的函數段不包含Invocation
子段。相反,客戶子段直接附加到功能段。如需有關舊型式和新型式函數區段結構的詳細資訊,請參閱了解 X-Ray 追蹤。
您也可以檢測用HTTP戶端、記錄SQL查詢,以及使用註釋和中繼資料建立自訂子區段。如需詳細資訊,請參閱 AWS X-Ray 開發人員指南中的 Ruby X-SDK Ray。
使用 Lambda 啟用主動追蹤 API
若要使用 AWS CLI 或管理追蹤組態 AWS SDK,請使用下列API作業:
下列範例 AWS CLI 命令可在名為 my- function 的函式上啟用主動追蹤。
aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active
追蹤模式是您發布函數版本時版本特定組態的一部分。您無法變更已發佈版本上的追蹤模式。
啟用作用中追蹤 AWS CloudFormation
若要啟動 AWS CloudFormation 範本中的AWS::Lambda::Function
資源追蹤,請使用TracingConfig
屬性。
範例 function-inline.yml - 追蹤組態
Resources: function: Type: AWS::Lambda::Function Properties:
TracingConfig: Mode: Active
...
對於 AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function
資源,請使用Tracing
屬性。
範例 template.yml - 追蹤組態
Resources: function: Type: AWS::Serverless::Function Properties:
Tracing: Active
...
將執行時間相依性儲存在圖層中
如果您使用 X-Ray SDK 來檢測 AWS SDK客戶端的功能代碼,則您的部署包可能會變得相當大。若要避免每次更新函數程式碼時都上傳執行階段相依性,請將 X-Ray 封裝SDK在 Lambda 層中。
下面的例子顯示了存儲 X-Ray SDK 的 Ruby AWS::Serverless::LayerVersion
資源。
範例 template.yml - 相依性層
Resources: function: Type: AWS::Serverless::Function Properties: CodeUri: function/. Tracing: Active
Layers: - !Ref libs
...libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-ruby-lib Description: Dependencies for the blank-ruby sample app. ContentUri: lib/. CompatibleRuntimes: - ruby2.5
透過此組態,您只有在變更執行時間相依性時才會更新程式庫層。由於函數部署套件僅含有您的程式碼,因此有助於減少上傳時間。
為相依性建立圖層需要建置變更,才能在部署之前產生圖層封存。如需工作範例,請參閱 blank-ruby