選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 AWS FIS aws:lambda:function 動作

焦點模式
使用 AWS FIS aws:lambda:function 動作 - AWS 故障注入服務

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

您可以使用 aws:lambda:function 動作,將故障注入 AWS Lambda 函數的叫用中。

這些動作使用 AWS FIS 受管延伸模組來注入故障。若要使用 aws:lambda:function 動作,您需要將延伸模組做為圖層連接至 Lambda 函數,並設定 Amazon S3 儲存貯體,以在 AWS FIS 和延伸模組之間進行通訊。

當您執行以 aws:lambda:function 為目標的 AWS FIS 實驗時, 會從 Lambda 函數 AWS FIS 讀取 Amazon S3 組態,並將錯誤注入資訊寫入指定的 Amazon S3 位置,如下圖所示。

圖表顯示 AWS Fault Injection Service Lambda 延伸模組的組態。

動作

限制

  • AWS FIS Lambda 延伸模組無法與使用回應串流的函數搭配使用。即使未套用任何錯誤, AWS FIS Lambda 延伸模組也會隱藏串流組態。如需詳細資訊,請參閱 AWS Lambda 使用者指南中的 Lambda 函數的回應串流

先決條件

在使用 AWS FIS Lambda 動作之前,請確定您已完成下列一次性任務:

  • 在您計劃從 開始實驗的區域中建立 Amazon S3 儲存貯體 ‐ 您可以使用單一 Amazon S3 儲存貯體進行多個實驗,並在多個 AWS 帳戶之間共用儲存貯體。不過,您必須為每個儲存貯體各有一個儲存貯體 AWS 區域。

  • 建立 IAM 政策,將 Lambda 延伸模組的讀取存取權授予 Amazon S3 儲存貯體 - 在下列範本中,將 取代my-config-distribution-bucket為您在上方建立的 Amazon S3 儲存貯體名稱,並將 FisConfigs 取代為您要使用的 Amazon S3 儲存貯體中的資料夾名稱。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListingConfigLocation", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::my-config-distribution-bucket"], "Condition": { "StringLike": { "s3:prefix": ["FisConfigs/*"] } } }, { "Sid": "AllowReadingObjectFromConfigLocation", "Effect": "Allow", "Action": "s3:GetObject", "Resource": ["arn:aws:s3:::my-config-distribution-bucket/FisConfigs/*"] } ] }
  • 建立 IAM 政策,將 AWS FIS 實驗的寫入存取權授予 Amazon S3 儲存貯體 - 在下列範本中,將 取代my-config-distribution-bucket為您在上方建立的 Amazon S3 儲存貯體名稱,並將 FisConfigs 取代為您要使用的 Amazon S3 儲存貯體中的資料夾名稱。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowFisToWriteAndDeleteFaultConfigurations", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::my-config-distribution-bucket/FisConfigs/*" }, { "Sid": "AllowFisToInspectLambdaFunctions", "Effect": "Allow", "Action": [ "lambda:GetFunction" ], "Resource": "*" }, { "Sid": "AllowFisToDoTagLookups", "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": "*" } ] }

設定 Lambda 函數

針對您要影響的每個 Lambda 函數,請遵循下列步驟:

  1. 將上述建立的 Amazon S3 讀取存取政策連接至 Lambda 函數。

  2. 將 AWS FIS 延伸模組做為 layer 連接至 函數。如需 layer ARNs的詳細資訊,請參閱Lambda 擴充 AWS FIS 功能的可用版本

  3. AWS_FIS_CONFIGURATION_LOCATION變數設定為 Amazon S3 組態資料夾的 ARN,例如 arn:aws:s3:::my-config-distribution-bucket/FisConfigs/

  4. AWS_LAMBDA_EXEC_WRAPPER 變數設定為 /opt/aws-fis/bootstrap

設定 AWS FIS 實驗

在執行實驗之前,請確定您已將您在先決條件中建立的 Amazon S3 寫入存取政策連接到將使用 AWS FIS Lambda 動作的實驗角色。如需如何設定 AWS FIS 實驗的詳細資訊,請參閱 管理 AWS FIS 實驗範本

日誌

AWS FIS Lambda 延伸模組會將日誌寫入主控台和 CloudWatch 日誌。您可以使用 AWS_FIS_LOG_LEVEL變數來設定記錄。支援的值為 INFOWARNERROR。日誌將以為 Lambda 函數設定的日誌格式撰寫。

以下是文字格式的日誌範例:

2024-08-09T18:51:38.599984Z INFO AWS FIS EXTENSION - extension enabled 1.0.1

以下是 JSON 格式日誌的範例:

{ "timestamp": "2024-10-08T17:15:36.953905Z", "level": "INFO", "fields": { "message": "AWS FIS EXTENSION - adding 5000 milliseconds of latency to function invocation", "requestId":"0608bf70-908f-4a17-bbfe-3782cd783d8b" } }

發出的日誌可與 Amazon CloudWatch 指標篩選條件搭配使用,以產生自訂指標。如需指標篩選條件的詳細資訊,請參閱《Amazon CloudWatch Logs 使用者指南》中的使用篩選條件從日誌事件建立指標

使用 CloudWatch Embedded Metric Format (EMF)

您可以設定 AWS FIS Lambda 擴充功能,將AWS_FIS_EXTENSION_METRICS變數設定為 以發出 EMF 日誌all。根據預設,延伸模組不會發出 EMF 日誌,且AWS_FIS_EXTENSION_METRICS預設為 none。EMF 日誌會在 CloudWatch 主控台aws-fis-extension namespace的 中發佈。

aws-fis-extension命名空間中,您可以選取要在圖形中顯示的特定指標。以下範例顯示aws-fis-extension命名空間中的一些可用指標。

CloudWatch 儀表板中的輸出 EMF 指標範例圖表。

進階主題

本節提供如何使用 Lambda AWS FIS 延伸模組和特殊使用案例的其他資訊。

了解輪詢

您可能會注意到在故障開始影響所有調用之前,緩衝期最多為 60 秒。這是因為在等待實驗啟動時,Lambda 延伸會不常輪詢組態資訊。您可以設定AWS_FIS_SLOW_POLL_INTERVAL_SECONDS環境變數 (預設 60 秒) 來調整輪詢間隔。較低的值會更頻繁輪詢,但對效能和成本的影響更大。您也可能會在注入錯誤之後,注意到延遲時間最多 20 秒。這是因為延伸模組會在實驗執行時更頻繁地輪詢。

了解並行

您可以同時以多個動作鎖定相同的 Lambda 函數。如果動作彼此不同,則會套用所有動作。例如,您可以在傳回錯誤之前新增初始延遲。如果將兩個相同或衝突的動作套用至相同的函數,則只會套用最早開始日期的動作。

下圖顯示兩個衝突的動作:aws:lambda:invocation-erroraws:lambda:invocation-http-integration-response,重疊。一開始,aws:lambda:invocation-error 會在 11:38 增加並執行 2 分鐘。然後,aws:lambda:invocation-http-integration-response 會嘗試從 11:39 開始,但在第一個動作結束後的 11:40 才會生效。為了維持實驗時間,aws:lambda:invocation-http-integration-response 仍會在最初預定的 11:41 完成。

Graphs showing error and response code percentages for x86 and arm during overlapping actions.

了解調用百分比

AWS Fault Injection Service Lambda 動作使用 aws:lambda:function 目標,可讓您選取一或多個 AWS Lambda 函數 ARNs。使用這些 ARNs, AWS Fault Injection Service Lambda 動作可以在每次呼叫選取的 Lambda 函數時注入錯誤。為了讓您僅將故障注入一小部分調用,每個動作都可讓您指定值為 0 到 100 的invocationPercentage參數。使用 invocationPercentage 參數,即使調用百分比低於 100%,您也可以確保動作是並行的。

SnapStart 的特殊考量

AWS Lambda 啟用 SnapStart 的 函數在取得第一個故障組態AWS_FIS_SLOW_POLL_INTERVAL_SECONDS之前,即使實驗已在執行中,仍會有較高的機會等待 的完整持續時間。這是因為 Lambda SnapStart 使用單一快照做為多個執行環境的初始狀態,並持續暫存。對於 AWS Fault Injection Service Lambda 延伸模組,它會保留輪詢頻率,並略過初始化執行環境時的初始組態檢查。如需 Lambda SnapStart 的詳細資訊,請參閱 使用者指南中的使用 Lambda SnapStart 改善啟動效能AWS Lambda

快速不常函數的特殊考量

如果您的 Lambda 函數執行時間少於平均輪詢持續時間 70 毫秒,則輪詢執行緒可能需要多次調用才能取得故障組態。如果函數不常執行,例如每 15 分鐘執行一次,則永遠不會完成輪詢。若要確保輪詢執行緒可以完成,請設定 AWS_FIS_POLL_MAX_WAIT_MILLISECONDS 參數。延伸模組會等到您為進行中輪詢設定的持續時間結束,再啟動函數。請注意,這將增加計費的函數持續時間,並導致某些調用的額外延遲。

使用 Lambda Runtime API Proxy 設定多個延伸模組

Lambda 延伸模組使用 AWS Lambda 執行期 API 代理來攔截函數呼叫,然後再到達執行期。其做法是將 AWS Lambda 執行期 API 的代理公開到執行期,並在AWS_LAMBDA_RUNTIME_API變數中公告其位置。

下圖顯示使用 Lambda Runtime API 代理的單一延伸模組組態:

預設組態。

若要使用 AWS Lambda 執行期 API 代理模式將 AWS FIS Lambda 延伸模組與另一個延伸模組搭配使用,您將需要使用自訂引導指令碼鏈結代理。 AWS FIS Lambda 延伸模組接受下列環境變數:

  • AWS_FIS_PROXY_RUNTIME_API_ENDPOINT ‐ 採用127.0.0.1:9876代表 AWS Lambda 執行期 API 本機 IP 和接聽程式連接埠的格式字串。這可以是 的原始值AWS_LAMBDA_RUNTIME_API或其他代理的位置。

  • AWS_FIS_PROXY_LISTENER_PORT ‐ 根據預設, 會取得連接埠號碼,讓 AWS FIS 延伸模組在其中啟動自己的代理9100

透過這些設定,您可以使用 Lambda 執行期 API 代理,以兩種不同的順序將 AWS FIS 延伸項目與另一個延伸項目連結。

使用 Lambda API 代理的兩個鏈結延伸模組。

如需 AWS Lambda 執行期 API 代理的詳細資訊,請參閱AWS Lambda 《 使用者指南》中的使用 AWS Lambda 執行期 API 代理擴充功能增強執行期安全性和管理,以及使用 Lambda 執行期 API 進行自訂執行期

使用 AWS FIS 搭配容器執行時間

對於使用接受AWS_LAMBDA_RUNTIME_API環境變數的容器映像的 AWS Lambda 函數,您可以依照下列步驟,將 AWS FIS Lambda 延伸模組封裝到容器映像中:

  1. 決定要從中擷取延伸模組的 layer ARN。如需如何尋找 ARN 的詳細資訊,請參閱 設定 Lambda 函數

  2. 使用 AWS Command Line Interface (CLI) 來請求有關延伸模組 的詳細資訊aws lambda get-layer-version-by-arn --arn fis-extension-arn。回應將包含一個Location欄位,其中包含預先簽章的 URL,您可以從中下載 FIS 擴充功能做為 ZIP 檔案。

  3. 將延伸模組的內容解壓縮至 /opt Docker 檔案系統。以下是以 NodeJS Lambda 執行時間為基礎的 Dockerfile 範例:

    # extension installation # FROM amazon/aws-lambda-nodejs:12 AS builder COPY extension.zip extension.zip RUN yum install -y unzip RUN mkdir -p /opt RUN unzip extension.zip -d /opt RUN rm -f extension.zip FROM amazon/aws-lambda-nodejs:12 WORKDIR /opt COPY --from=builder /opt . # extension installation finished # # JS example. Modify as required by your runtime WORKDIR ${LAMBDA_TASK_ROOT} COPY index.js package.json . RUN npm install CMD [ "index.handler" ]

如需容器映像的詳細資訊,請參閱 AWS Lambda 使用者指南中的使用容器映像建立 Lambda 函數

AWS FIS Lambda 環境變數

以下是 AWS FIS Lambda 延伸模組的環境變數清單

  • AWS_FIS_CONFIGURATION_LOCATION ‐ 必要。 AWS FIS 將寫入作用中故障組態的位置,而延伸模組將讀取故障組態。位置應為 Amazon S3 ARN 格式,包括儲存貯體和路徑。例如:arn:aws:s3:::my-fis-config-bucket/FisConfigs/

  • AWS_LAMBDA_EXEC_WRAPPER ‐ 必要。用於設定 AWS FIS Lambda 延伸模組的 AWS Lambda 包裝程式指令碼位置。這應該設定為延伸模組隨附的/opt/aws-fis/bootstrap指令碼。

  • AWS_FIS_LOG_LEVEL ‐ 選用。 AWS FIS Lambda 擴充功能所發出訊息的日誌層級。支援的值為 INFOWARNERROR。如果未設定, AWS FIS 則延伸會預設為 INFO

  • AWS_FIS_EXTENSION_METRICS ‐ 選用。可能值為 allnone。如果設定為 延伸all模組, 會在 下發出 EMF 指標aws-fis-extension namespace

  • AWS_FIS_SLOW_POLL_INTERVAL_SECONDS ‐ 選用。如果設定 ,則當延伸模組未注入故障並等待將故障組態新增至組態位置時, 會覆寫輪詢間隔 (以秒為單位)。預設為 60

  • AWS_FIS_PROXY_RUNTIME_API_ENDPOINT ‐ 選用。如果設定 會覆寫 的值AWS_LAMBDA_RUNTIME_API,以定義 AWS FIS 延伸模組與 AWS Lambda 執行時間 API 互動的位置,以控制函數叫用。預期 IP:PORT,例如 127.0.0.1:9000。如需 的詳細資訊AWS_LAMBDA_RUNTIME_API,請參閱《 使用者指南》中的將 Lambda 執行時間 API 用於自訂執行時間AWS Lambda

  • AWS_FIS_PROXY_LISTENER_PORT ‐ 選用。定義 AWS FIS Lambda 延伸模組公開 AWS Lambda 執行時間 API 代理的連接埠,可供其他延伸模組或執行時間使用。預設為 9100

  • AWS_FIS_POLL_MAX_WAIT_MILLISECONDS ‐ 選用。如果設定為非零值,此變數會定義延伸模組在評估故障組態和開始調用執行時間之前,等待傳輸中非同步輪詢完成的毫秒數。預設為 0

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。