本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS FISaws:lambda:function 動作
您可以使用 aws:lambda:function 動作,將錯誤注入AWS Lambda函數的叫用中。
這些動作使用 AWS FIS受管擴充功能來注入錯誤。若要使用 aws:lambda:function 動作,您需要將擴充功能做為 layer 連接至 Lambda 函數,並設定 Amazon S3 儲存貯體以在 AWS FIS和擴充功能之間通訊。
當您執行以 aws:lambda:function 為目標的AWS FIS實驗時, 會從 Lambda 函數AWS FIS讀取 Amazon S3 組態,並將錯誤注入資訊寫入指定的 Amazon S3 位置,如下圖所示。
動作
限制
AWS FISLambda 延伸模組無法與使用回應串流的函數搭配使用。即使未套用錯誤,AWS FISLambda 擴充功能也會抑制串流組態。如需詳細資訊,請參閱《 AWS Lambda使用者指南》中的 Lambda 函數的回應串流。
先決條件
在使用 AWS FISLambda 動作之前,請確定您已完成下列一次性任務:
在您計劃從中開始實驗的區域中建立 Amazon S3 儲存貯體 ‐ 您可以使用單一 Amazon S3 儲存貯體進行多個實驗,並在多個AWS帳戶之間共用儲存貯體。不過,每個儲存貯體都必須有個別的儲存貯體AWS 區域。
建立 IAM 政策,將 Lambda 延伸的讀取存取權授予 Amazon S3 儲存貯體 - 在下列範本中,將 取代
my-config-distribution-bucket為您在上方建立的 Amazon S3 儲存貯體名稱,並將FisConfigs取代為您要使用的 Amazon S3 儲存貯體中的資料夾名稱。建立 IAM 政策,將AWS FIS實驗的寫入存取權授予 Amazon S3 儲存貯體 - 在下列範本中,將 取代
my-config-distribution-bucket為您在上方建立的 Amazon S3 儲存貯體名稱,並將FisConfigs取代為您要使用的 Amazon S3 儲存貯體中的資料夾名稱。
設定 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 FISLambda 動作的實驗角色。如需如何設定AWS FIS實驗的詳細資訊,請參閱 管理 AWS FIS 實驗範本。
日誌
AWS FISLambda 延伸模組會將日誌寫入主控台和 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_EXTENSION_METRICS變數設定為 ,以設定 AWS FISLambda 延伸來發出 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 ServiceLambda 動作使用 aws:lambda:function 目標,可讓您選取一或多個AWS Lambda函數 ARNs。使用這些 ARNs,AWS Fault Injection ServiceLambda 動作可以在每次叫用選取的 Lambda 函數時注入錯誤。若要只允許您將故障注入一小部分的調用中,每個動作都允許您指定值為 0 到 100 的invocationPercentage參數。使用 invocationPercentage 參數,即使調用百分比低於 100%,您也可以確保動作是並行的。
SnapStart 的特殊考量
AWS Lambda啟用 SnapStart 的 函數在取得第一個故障組態AWS_FIS_SLOW_POLL_INTERVAL_SECONDS之前,有較高可能性會等待 的完整持續時間,即使實驗已在執行中。這是因為 Lambda SnapStart 使用單一快照做為多個執行環境的初始狀態,並保留暫時儲存。對於 AWS Fault Injection ServiceLambda 延伸,它會保留輪詢頻率,並略過初始化執行環境時的初始組態檢查。如需 Lambda SnapStart 的詳細資訊,請參閱《 使用者指南》中的使用 Lambda SnapStart 改善啟動效能。 AWS Lambda
快速不常函數的特殊考量
如果您的 Lambda 函數執行時間少於平均輪詢持續時間 70 毫秒,則輪詢執行緒可能需要多次調用才能取得錯誤組態。如果函數不常執行,例如每 15 分鐘執行一次,則永遠不會完成輪詢。若要確保輪詢執行緒可以完成,請設定 AWS_FIS_POLL_MAX_WAIT_MILLISECONDS 參數。延伸項目會等到您為傳輸中輪詢設定的持續時間結束,再啟動函數。請注意,這將增加計費的函數持續時間,並導致某些調用的額外延遲。
使用 Lambda 執行期 API 代理設定多個擴充功能
Lambda 延伸模組會使用AWS Lambda執行期 API 代理來攔截函數呼叫,再到達執行期。其作法是將AWS Lambda執行時間 API 的代理公開至執行時間,並在 AWS_LAMBDA_RUNTIME_API變數中公告其位置。
下圖顯示使用 Lambda 執行期 API 代理的單一延伸模組的組態:
若要使用AWS Lambda執行期 API 代理模式將 AWS FISLambda 延伸模組與另一個延伸模組搭配使用,您將需要使用自訂引導指令碼鏈結代理。AWS FISLambda 延伸模組接受下列環境變數:
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 FISLambda 延伸模組封裝到容器映像中:
決定要從中擷取延伸模組的 layer ARN。如需如何尋找 ARN 的詳細資訊,請參閱 設定 Lambda 函數。
使用 AWS Command Line Interface(CLI) 請求有關延伸模組 的詳細資訊
aws lambda get-layer-version-by-arn --arn fis-extension-arn。回應將包含一個Location欄位,其中包含預先簽章的 URL,您可以從中將 FIS 擴充功能下載為 ZIP 檔案。將延伸模組的內容解壓縮至
/optDocker 檔案系統。以下是以 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 FISLambda 環境變數
以下是 AWS FISLambda 延伸模組的環境變數清單
AWS_FIS_CONFIGURATION_LOCATION‐ 必要。AWS FIS將寫入作用中錯誤組態且延伸模組將讀取錯誤組態的位置。位置應為 Amazon S3 ARN 格式,包括儲存貯體和路徑。例如arn:aws:s3:::my-fis-config-bucket/FisConfigs/。AWS_LAMBDA_EXEC_WRAPPER‐ 必要。用於設定 AWS FISLambda 延伸模組的AWS Lambda包裝函式指令碼位置。這應該設定為 延伸模組隨附的/opt/aws-fis/bootstrap指令碼。AWS_FIS_LOG_LEVEL‐ 選用。AWS FISLambda 延伸所發出訊息的日誌層級。支援的值為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 FISLambda 延伸模組公開AWS Lambda執行時間 API 代理的連接埠,可供另一個延伸模組或執行時間使用。預設為9100。AWS_FIS_POLL_MAX_WAIT_MILLISECONDS‐ 選用。如果設定為非零值,此變數會定義延伸模組在評估故障組態並開始調用執行時間之前,等待傳輸中非同步輪詢完成的毫秒數。預設為0。