本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 Lambda 設定 Amazon MSK 叢集和 Amazon VPC 網路
若要將 AWS Lambda 函數連線至 Amazon MSK 叢集,您需要正確設定叢集及其所在的 Amazon Virtual Private Cloud (VPC)。此頁面說明如何設定您的叢集和 VPC。如果您的叢集和 VPC 已正確設定,請參閱 設定 Lambda 的 Amazon MSK 事件來源 來設定事件來源映射。
Lambda 和 MSK 整合的網路組態需求概觀
Lambda 和 MSK 整合所需的聯網組態取決於您應用程式的網路架構。此整合涉及三個主要資源:Amazon MSK 叢集、Lambda 函數和 Lambda 事件來源映射。這些資源都位於不同的 VPC 中:
-
Amazon MSK 叢集通常位於您管理之 VPC 的私有子網路中。
-
您的 Lambda 函數位於 Lambda AWS擁有的受管 VPC 中。
-
您的 Lambda 事件來源映射位於 Lambda AWS擁有的另一個受管 VPC 中,與包含函數的 VPC 分開。
事件來源映射是 MSK 叢集和 Lambda 函數之間的媒介資源。事件來源映射有兩個主要任務。首先,它會輪詢 MSK 叢集以取得新訊息。然後,它會使用這些訊息調用 Lambda 函數。由於這三個資源位於不同的 VPCs 中,因此輪詢和調用操作都需要跨 VPC 網路呼叫。
事件來源映射的網路組態需求取決於其是否使用佈建模式或隨需模式,如下圖所示:

Lambda 事件來源映射輪詢 MSK 叢集以取得新訊息的方式在這兩種模式中都相同。為了在您的事件來源映射和 MSK 叢集之間建立連線,Lambda 會在您的私有子網路中建立超平面 ENI (或重複使用現有的 ENI,如果有的話),以建立安全連線。如圖所示,此超平面 ENI 會使用 MSK 叢集的子網路和安全群組組態,而不是 Lambda 函數。
從叢集輪詢訊息後,Lambda 叫用函數的方式在每個模式中都不同:
-
在佈建模式中,Lambda 會自動處理事件來源映射 VPC 與函數 VPC 之間的連線。因此,您不需要任何其他聯網元件就能成功叫用您的 函數。
-
在隨需模式中,您的 Lambda 事件來源映射會透過客戶受管 VPC 的路徑叫用您的函數。因此,您需要在 VPC 的公有子網路中設定 NAT 閘道,或在 VPC 的私有子網路中設定AWS PrivateLink端點,以提供對 Lambda、 AWS Security Token Service (STS) 和選擇性的存取AWS Secrets Manager。正確設定其中一個選項可讓您的 VPC 與 Lambda 受管執行期 VPC 之間建立連線,這是叫用函數的必要條件。
NAT 閘道允許私有子網路中的資源存取公有網際網路。使用此組態表示您的流量在叫用 Lambda 函數之前周遊網際網路。 AWS PrivateLink 端點可讓私有子網路安全地連線至 AWS 服務或其他私有 VPC 資源,而不會周遊公有網際網路。如需如何設定這些資源的詳細資訊設定 MSK 事件來源的 AWS PrivateLink 端點,請參閱 設定 MSK 事件來源的 NAT 閘道或 。
到目前為止,我們假設您的 MSK 叢集位於 VPC 內的私有子網路中,這是更常見的情況。不過,即使您的 MSK 叢集位於 VPC 內的公有子網路中,您仍必須設定 AWS PrivateLink 端點以啟用安全連線。下表根據您設定 MSK 叢集和 Lambda 事件來源映射的方式,摘要說明聯網組態需求:
MSK 叢集位置 (在客戶受管 VPC 中) | Lambda 事件來源映射擴展模式 | 必要的聯網組態 |
---|---|---|
私有子網路 |
隨需模式 |
NAT 閘道 (位於 VPC 的公有子網路中) 或 AWS PrivateLink 端點 (位於 VPC 的私有子網路中),以啟用對 Lambda 的存取 AWS STS,以及選擇性的 Secrets Manager。 |
公有子網路 |
隨需模式 |
AWS PrivateLink 端點 (位於 VPC 的公有子網路中),以啟用對 Lambda 的存取 AWS STS,以及選擇性的 Secrets Manager。 |
私有子網路 |
佈建模式 |
無 |
公有子網路 |
佈建模式 |
無 |
此外,與您的 MSK 叢集相關聯的安全群組必須允許透過正確連接埠的流量。請確定您已設定下列安全群組規則:
-
傳入規則 – 允許預設代理程式連接埠上的所有流量。MSK 使用的連接埠取決於叢集上的身分驗證類型:
9098
用於 IAM 身分驗證、9096
用於 SASL/SCRAM,以及9094
用於 TLS。或者,您可以使用自我參考的安全群組規則,允許從相同安全群組內的執行個體進行存取。 -
傳出規則 – 如果您的函數需要與其他
443
AWS 服務通訊,允許外部目的地連接埠上的所有流量。或者,如果您不需要與其他 AWS 服務通訊,您可以使用自我參考的安全群組規則來限制對代理程式的存取。 -
Amazon VPC 端點傳入規則 – 如果您使用的是 Amazon VPC 端點,與端點相關聯的安全群組必須允許
443
來自叢集安全群組的連接埠上的傳入流量。
設定 MSK 事件來源的 NAT 閘道
您可以設定 NAT 閘道,以允許事件來源映射從您的叢集輪詢訊息,並透過 VPC 透過路徑叫用函數。只有當您的事件來源映射使用隨需模式,且您的叢集位於 VPC 的私有子網路內時,才需要此操作。如果您的叢集位於 VPC 的公有子網路中,或您的事件來源映射使用佈建模式,則不需要設定 NAT 閘道。
NAT 閘道允許私有子網路中的資源存取公有網際網路。如果您需要 Lambda 的私有連線,請設定 MSK 事件來源的 AWS PrivateLink 端點改為參閱 。
設定 NAT 閘道之後,您必須設定適當的路由表。這可讓來自私有子網路的流量透過 NAT 閘道路由至公有網際網路。

下列步驟會引導您使用 主控台設定 NAT 閘道。視需要為每個可用區域 (AZ) 重複這些步驟。
設定 NAT 閘道和適當路由 (主控台)
-
請遵循建立 NAT 閘道中的步驟,注意下列事項:
-
NAT 閘道應一律位於公有子網路中。建立具有公有連線的 NAT 閘道。
-
如果您的 MSK 叢集跨多個 AZs 複寫,請為每個 AZ 建立一個 NAT 閘道。例如,在每個 AZ 中,您的 VPC 應該有一個包含叢集的私有子網路,以及一個包含 NAT 閘道的公有子網路。對於具有三個可用AZs設定,您將有三個私有子網路、三個公有子網路和三個 NAT 閘道。
-
-
建立 NAT 閘道之後,請開啟 Amazon VPC 主控台
,然後在左側功能表中選擇路由表。 -
選擇 Create route table (建立路由表)。
-
將此路由表與包含 MSK 叢集的 VPC 建立關聯。或者,輸入路由表的名稱。
-
選擇 Create route table (建立路由表)。
-
選擇您剛建立的路由表。
-
在子網路關聯索引標籤下,選擇編輯子網路關聯。
-
將此路由表與包含 MSK 叢集的私有子網路建立關聯。
-
-
選擇 Edit routes (編輯路由)。
-
選擇新增路由:
-
對於 Destination (目的地),請選擇
0.0.0.0/0
。 -
針對目標,選擇 NAT 閘道。
-
在搜尋方塊中,選擇您在步驟 1 中建立的 NAT 閘道。這應該是與包含 MSK 叢集的私有子網路 (您在步驟 6 中與此路由表相關聯的私有子網路) 位於相同 AZ 中的 NAT 閘道。
-
-
選擇儲存變更。
設定 MSK 事件來源的 AWS PrivateLink 端點
您可以將 AWS PrivateLink 端點設定為從叢集輪詢訊息,並透過 VPC 透過路徑叫用函數。這些端點應允許 MSK 叢集存取下列項目:
-
Lambda 服務
-
或者, AWS Secrets Manager服務。如果叢集身分驗證所需的秘密存放在 Secrets Manager 中,則此為必要項目。
只有在事件來源映射使用隨需模式時,才需要設定 PrivateLink 端點。如果您的事件來源映射使用佈建模式,Lambda 會為您建立必要的連線。
PrivateLink 端點允許安全的私有存取 AWS 服務 AWS PrivateLink。或者,若要設定 NAT 閘道以讓您的 MSK 叢集存取公有網際網路,請參閱 設定 MSK 事件來源的 NAT 閘道。
設定 VPC 端點之後,MSK 叢集應該可以直接和私有存取 Lambda、STS 和選用的 Secrets Manager。

下列步驟會引導您使用 主控台設定 PrivateLink 端點。視需要為每個端點 (Lambda、STS、Secrets Manager) 重複這些步驟。
設定 VPC PrivateLink 端點 (主控台)
-
開啟 Amazon VPC 主控台
,然後在左側選單中選擇端點。 -
選擇建立端點。
-
或者,輸入端點的名稱。
-
針對類型,選擇 AWS 服務。
-
在服務下,開始輸入服務的名稱。例如,若要建立端點以連線至 Lambda,
lambda
請在搜尋方塊中輸入 。 -
在結果中,您應該會看到目前區域中的服務端點。例如,在美國東部 (維吉尼亞北部) 區域,您應該會看到 。
com.amazonaws.us-east-2.lambda
選取此服務。 -
在網路設定下,選取包含 MSK 叢集的 VPC。
-
在子網路下,選取 MSK 叢集所在的 AZs。
-
針對每個可用區域,在子網路 ID 下,選擇包含 MSK 叢集的私有子網路。
-
-
在安全群組下,選取與您的 MSK 叢集相關聯的安全群組。
-
選擇建立端點。
根據預設,Amazon VPC 端點具有開放的 IAM 政策,允許廣泛存取資源。最佳實務是限制這些政策,以使用該端點執行所需的動作。例如,針對 Secrets Manager 端點,您可以修改其政策,使其僅允許函數的執行角色存取秘密。
範例 VPC 端點政策 – Secrets Manager 端點
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Principal": { "AWS": [
"arn:aws::iam::123456789012:role/my-role"
] }, "Resource":"arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret"
} ] }
對於 AWS STS 和 Lambda 端點,您可以將呼叫委託人限制為 Lambda 服務委託人。不過,請確定您在這些政策"Resource": "*"
中使用 。
範例 VPC 端點政策 – AWS STS 端點
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
範例 VPC 端點政策 – Lambda 端點
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }