本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用 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 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 函數,請遵循下列步驟:
-
將上述建立的 Amazon S3 讀取存取政策連接至 Lambda 函數。
-
將 AWS FIS 延伸模組做為 layer 連接至 函數。如需 layer ARNs的詳細資訊,請參閱Lambda 擴充 AWS FIS 功能的可用版本。
-
將
AWS_FIS_CONFIGURATION_LOCATION
變數設定為 Amazon S3 組態資料夾的 ARN,例如arn:aws:s3:::my-config-distribution-bucket/FisConfigs/
。 -
將
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
變數來設定記錄。支援的值為 INFO
、WARN
和 ERROR
。日誌將以為 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
命名空間中的一些可用指標。

進階主題
本節提供如何使用 Lambda AWS FIS 延伸模組和特殊使用案例的其他資訊。
主題
了解輪詢
您可能會注意到在故障開始影響所有調用之前,緩衝期最多為 60 秒。這是因為在等待實驗啟動時,Lambda 延伸會不常輪詢組態資訊。您可以設定AWS_FIS_SLOW_POLL_INTERVAL_SECONDS
環境變數 (預設 60 秒) 來調整輪詢間隔。較低的值會更頻繁輪詢,但對效能和成本的影響更大。您也可能會在注入錯誤之後,注意到延遲時間最多 20 秒。這是因為延伸模組會在實驗執行時更頻繁地輪詢。
了解並行
您可以同時以多個動作鎖定相同的 Lambda 函數。如果動作彼此不同,則會套用所有動作。例如,您可以在傳回錯誤之前新增初始延遲。如果將兩個相同或衝突的動作套用至相同的函數,則只會套用最早開始日期的動作。
下圖顯示兩個衝突的動作:aws:lambda:invocation-error 和 aws: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 完成。

了解調用百分比
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 延伸項目與另一個延伸項目連結。

如需 AWS Lambda 執行期 API 代理的詳細資訊,請參閱AWS Lambda 《 使用者指南》中的使用 AWS Lambda 執行期 API 代理擴充功能增強執行期安全性和管理
使用 AWS FIS 搭配容器執行時間
對於使用接受AWS_LAMBDA_RUNTIME_API
環境變數的容器映像的 AWS Lambda 函數,您可以依照下列步驟,將 AWS FIS Lambda 延伸模組封裝到容器映像中:
決定要從中擷取延伸模組的 layer ARN。如需如何尋找 ARN 的詳細資訊,請參閱 設定 Lambda 函數。
使用 AWS Command Line Interface (CLI) 來請求有關延伸模組 的詳細資訊
aws lambda get-layer-version-by-arn --arn fis-extension-arn
。回應將包含一個Location
欄位,其中包含預先簽章的 URL,您可以從中下載 FIS 擴充功能做為 ZIP 檔案。將延伸模組的內容解壓縮至
/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 擴充功能所發出訊息的日誌層級。支援的值為INFO
、WARN
和ERROR
。如果未設定, AWS FIS 則延伸會預設為INFO
。AWS_FIS_EXTENSION_METRICS
‐ 選用。可能值為all
和none
。如果設定為 延伸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 LambdaAWS_FIS_PROXY_LISTENER_PORT
‐ 選用。定義 AWS FIS Lambda 延伸模組公開 AWS Lambda 執行時間 API 代理的連接埠,可供其他延伸模組或執行時間使用。預設為9100
。AWS_FIS_POLL_MAX_WAIT_MILLISECONDS
‐ 選用。如果設定為非零值,此變數會定義延伸模組在評估故障組態和開始調用執行時間之前,等待傳輸中非同步輪詢完成的毫秒數。預設為0
。