

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

# Lambda 受管執行個體的最佳實務
<a name="lambda-managed-instances-best-practices"></a>

## 容量提供者組態
<a name="lambda-managed-instances-bp-capacity-provider"></a>

**依信任層級分隔容量提供者。**為具有不同安全需求的工作負載建立不同的容量提供者。指派給相同容量提供者的所有函數都必須相互信任，因為容量提供者可做為安全界限。

**使用描述性名稱。**命名容量提供者，以清楚指出其預期用途和信任層級 （例如 `production-trusted`、)`dev-sandbox`。這有助於團隊了解每個容量提供者的目的和安全性狀態。

**使用多個可用區域。**在建立容量提供者時，指定跨多個可用區域的子網路。Lambda 預設會針對 AZ 彈性啟動三個執行個體，以確保函數的高可用性。

## 執行個體類型選取
<a name="lambda-managed-instances-bp-instance-types"></a>

**讓 Lambda 選擇執行個體類型。**根據預設，Lambda 會為您的工作負載選擇最佳的執行個體類型。我們建議您讓 Lambda 受管執行個體為您選擇執行個體類型，因為限制可能的執行個體類型數量可能會導致可用性降低。

**指定特定需求的執行個體類型。**如果您有特定的硬體需求，請將允許的執行個體類型設定為相容的執行個體清單。例如：
+ 對於需要高網路頻寬的應用程式，請選取多個 n 個執行個體類型
+ 針對具有成本限制的測試或開發環境，請選擇較小的執行個體類型，例如 m7a.large

## 函數組態
<a name="lambda-managed-instances-bp-function-config"></a>

**選擇適當的記憶體和 vCPU 設定。**選取支援函數多並行執行的記憶體和 vCPU 組態。支援的函數大小下限為 2GB 和 1 個 vCPU。
+ 對於 Python 應用程式，選擇較高比率的記憶體與 vCPUs（例如 4 比 1 或 8 比 1)，因為 Python 處理多並行的方式
+ 對於執行少量 IO 的 CPU 密集型操作或函數，請選擇多個 vCPU
+ 對於 IO 密集型應用程式，例如 Web 服務或批次任務，多並行可提供最大效益

**適當設定並行上限。**Lambda 會針對平衡資源消耗和輸送量的最大並行選擇合理的預設值。根據函數的資源用量調整此設定：
+ 如果您的函數調用使用極少的 CPU，請增加並行上限 （每個 vCPU 最多 64 個）
+ 如果您的應用程式使用大量記憶體和極少 CPU，請減少並行上限

請注意，並行極低的執行環境可能會遇到調節和擴展困難。

## 擴展組態
<a name="lambda-managed-instances-bp-scaling"></a>

**設定適當的目標資源使用率。**根據預設，Lambda 會維持足夠的空間，讓您的流量在 5 分鐘內加倍，無需調節。根據您的工作負載特性進行調整：
+ 對於對調節不敏感的非常穩定工作負載或應用程式，請將目標設定為高層級，以實現更高的使用率和更低的成本
+ 對於具有潛在流量暴增的工作負載，請將資源目標設定為低層級，以維持額外的空間

**規劃流量成長。**如果您的流量在 5 分鐘內增加一倍以上，您可能會在 Lambda 擴展執行個體和執行環境時看到調節。設計您的應用程式，以在快速擴展期間處理潛在的限流。

## 安全
<a name="lambda-managed-instances-bp-security"></a>

**套用 PassCapacityProvider 許可的最低權限。**僅授予必要容量提供者的`lambda:PassCapacityProvider`許可。使用資源層級許可來限制使用者可以指派給函數的容量提供者。

**監控容量提供者用量。**Use AWS CloudTrail 可監控容量提供者指派和存取模式。這有助於識別未經授權的存取嘗試，並確保符合安全政策。

**分隔不受信任的工作負載。**請勿在不受信任的工作負載之間依賴容器進行安全隔離。使用不同的容量提供者來分隔不受互信的工作負載。

## 成本最佳化
<a name="lambda-managed-instances-bp-cost"></a>

**使用 EC2 定價選項。**利用 EC2 Savings Plans 和預留執行個體來降低成本。這些定價選項適用於基礎 EC2 運算 (15% 的管理費不會折扣）。

**針對穩定狀態工作負載進行最佳化。**Lambda 受管執行個體最適合具有可預測大量流量的穩定狀態函數。對於高載流量模式，Lambda （預設） 可能更具成本效益。

**監控資源使用率。**追蹤 CloudWatch 指標以了解 CPU 和記憶體使用率。根據實際用量模式調整函數記憶體配置和執行個體類型選擇，以最佳化成本。

## 監控與可觀測性
<a name="lambda-managed-instances-bp-monitoring"></a>

**監控容量提供者指標。**追蹤容量提供者層級指標，包括 CPUUtilization、MemoryUtilization、vCPUAvailable 和 MemoryAvailable，以確認工作負載有足夠的資源可用。

**監控執行環境指標。**追蹤執行環境層級指標，包括 ExecutionEnvironmentConcurrency 和 ExecutionEnvironmentConcurrencyLimit，以了解擴展行為並識別潛在的限流。

**設定 CloudWatch 警示。**為關鍵指標建立 CloudWatch 警示，以主動識別問題：
+ CPU 或記憶體使用率高
+ 可用容量低
+ 接近並行限制

## 語言特定考量事項
<a name="lambda-managed-instances-bp-runtime"></a>

**遵循特定語言的最佳實務。**每種程式設計語言處理多並行的方式都不同。檢閱語言特定指南以取得詳細建議：
+ **Java：**將執行緒安全集合、 `AtomicInteger`和 `ThreadLocal`用於請求特定狀態
+ **Node.js：**針對所有請求特定的狀態使用 InvokeStore，並避免全域變數
+ **Python：**在 中使用唯一的檔案名稱`/tmp`搭配請求 IDs並考慮以程序為基礎的記憶體隔離
+ **Rust：**使用 `run_concurrent`而非 `run`，並啟用 `concurrency-tokio`功能。處理常式必須是 `Clone` \+ `Send`。

**測試執行緒安全和並行問題。**在部署到生產環境之前，請徹底測試您的 函數是否有執行緒安全問題、競爭條件，以及在並行負載下的適當狀態隔離。

## 後續步驟
<a name="lambda-managed-instances-bp-next-steps"></a>
+ 了解 [Lambda 受管執行個體的容量提供者](lambda-managed-instances-capacity-providers.md)
+ 了解 [Lambda 受管執行個體的擴展](lambda-managed-instances-scaling.md)
+ 檢閱 [Java](lambda-managed-instances-java-runtime.md)、[Node.js](lambda-managed-instances-nodejs-runtime.md) 和 [Python](lambda-managed-instances-python-runtime.md) 的執行時間特定指南
+ [為您的容量提供者設定 VPC 連線](lambda-managed-instances-networking.md)
+ 使用 [CloudWatch 指標](lambda-managed-instances-monitoring.md)監控 Lambda 受管執行個體