使用 Lambda 處理 Amazon MQ 訊息 - AWS Lambda

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

使用 Lambda 處理 Amazon MQ 訊息

設定網路存取

若要透過事件來源對應授與 Lambda 完整存取代理程式,您的代理程式必須使用公有端點 (公有 IP 位址),或者您必須提供對在其中建立代理程式之 Amazon VPC 的存取權。

預設情況下,當您建立 Amazon MQ 代理程式時,PubliclyAccessible 旗標會設為 false。為了讓您的代理程式能夠接收到公有 IP 地址,您必須將 PubliclyAccessible 旗標設為 true。

將 Amazon MQ 與 Lambda 搭配使用的最佳做法是使用 AWS PrivateLink VPC端點,並將 Lambda 函數存取權授予代理程式的存取權。VPC部署 Lambda 的端點,以及 () 的端點 (僅適用於 ActiveMQ AWS Security Token Service )AWS STS的端點。如果您的代理程式使用驗證,請同時為 AWS Secrets Manager. 如需進一步了解,請參閱 設置 Amazon VPC 端點

或者,在VPC包含 Amazon MQ 代理程式的每個公有子網路上設定NAT閘道。如需詳細資訊,請參閱為VPC連線的 Lambda 函數啟用網際網路存取

當您為 Amazon MQ 代理程式建立事件來源映射時,Lambda 會檢查代理程式的子網路和安全群組是否已存在彈性網路界面 (ENIs)。VPC如果 Lambda 找到現有的ENIs,它會嘗試重複使用它們。否則,Lambda 會建立新的連線ENIs至事件來源並叫用您的函數。

注意

Lambda 函數一律會在 Lambda 服務VPCs擁有的內部執行。這VPCs些由服務自動維護,客戶不可見。您也可以將您的功能連接到 Amazon VPC。在任何一種情況下,函數的VPC配置都不會影響事件源映射。只有事件來源的組態才VPC會決定 Lambda 連線至事件來源的方式。

設定安全群組規則

為VPC包含您的 Amazon Amazon MQ 的亞馬遜設定安全群組。

注意

根據預設,ActiveMQ 的 Amazon MQ 使用連接埠61617,而 Amazon MQ 則用於 RabbitMQ 連接埠。5671

  • 輸入規則 — 允許來自其本身的安全性群組內與事件來源關聯之安全性群組的 Broker 連接埠上的所有流量。

  • 輸出規則 — 允許所有目的地443的連接埠上的所有流量。允許代理連接埠上的所有流量來自其本身的安全性群組。

  • Amazon VPC 端點入站規則 — 對於與 Amazon VPC 端點關聯的安全群組,允許443來自代理程式安全群組的連入埠流量

設置 Amazon VPC 端點

使用 Amazon VPC 端點時,請使用端點的API彈性網路界面 (ENI) 路 AWS 由呼叫以叫用函數。Lambda 服務主體需要呼叫lambda:InvokeFunction使用這些功能的任何函數ENIs。此外,對於 ActiveMQ 的 Amazon MQ,Lambda 服務主體必須sts:AssumeRole在使用. ENIs

根據預設,Amazon VPC 端點具有允許廣泛存取資源的開放IAM政策。若要在生產環境中使用 Amazon MQ 搭配 Lambda,您可以將這些政策限制為僅允許特定主體存取特定的角色和函數。

下列範例VPC端點政策示範如何授與 AWS STS 和 Lambda 端點所需的存取權。

範例 端點策略 — AWS STS 端點(僅適用於 ActiveMQ)
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "arn:aws::iam::123456789012:role/my-role" } ] }
範例 端點政策 — Lambda 點
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "arn:aws::lambda:us-west-2:123456789012:function:my-function" } ] }

如果您的 Amazon MQ 代理程式使用身份驗證,您也可以限制 Secrets Manager 端點的端點政策。若要呼叫 Secrets ManagerAPI,Lambda 會使用您的函數角色,而不是 Lambda 服務主體。下列範例顯示 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" } ] }
警告

將端點策略限制為僅允許來自組織內的API呼叫,可防止事件來源對應正常運作。

建立事件來源對應

建立事件來源映射,指示 Lambda 將記錄從 Amazon MQ 代理程式傳送至 Lambda 函數。您可以建立多個事件來源映射,來使用多個函數處理相同資料,或使用單一函數處理來自多個來源的項目。

若要將函數設定為從 Amazon MQ 讀取,請新增必要的許可,並在 Lambda 主控台中建立 MQ 觸發器。

若要從 Amazon MQ 代理程式讀取記錄,您的 Lambda 函數需要下列許可。您可以在函數執行角色中新增許可陳述式,授予 Lambda 權限,以便與 Amazon MQ 代理程式及其基礎資源互動:

注意

使用加密的客戶管理金鑰時,也請新增 kms:Decrypt 許可。

若要新增權限並建立觸發器
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇函數的名稱。

  3. 依序選擇 Configuration (組態) 索引標籤和 Permissions (許可)。

  4. 在 [角色名稱] 下,選擇指向您的執行角色的連結。此連結會在IAM主控台中開啟角色。

    連結至執行角色
  5. 選擇 [新增權限],然後選擇 [建立內嵌原則]。

    在IAM主控台中建立內嵌政策
  6. 在 [原則編輯器] 中,選擇JSON。輸入下列政策。您的函數需要這些許可才能從 Amazon MQ 代理程式讀取。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "mq:DescribeBroker", "secretsmanager:GetSecretValue", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
    注意

    使用加密的客戶管理金鑰時,您還必須新增kms:Decrypt權限。

  7. 選擇 Next (下一步)。輸入策略名稱,然後選擇 [建立策略]。

  8. 返回 Lambda 主控台中的函數。在 函式概觀 下,選擇 新增觸發條件

    Lambda 主控台的函數概觀區段
  9. 選擇 MQ 觸發器類型。

  10. 設定需要的選項,然後選擇 新增

Lambda 支援 Amazon MQ 事件來源的下列選項:

  • MQ broker (MQ 代理程式) – 選取 Amazon MQ 代理程式。

  • Batch size (批次大小) - 設定單一批次中要擷取的訊息數目上限。

  • Queue name (佇列名稱) - 輸入要取用的 Amazon MQ 佇列。

  • Source access configuration (來源存取組態) - 輸入儲存您代理程式憑證的虛擬主機資訊和 Secrets Manager 機密。

  • Enable trigger (啟用觸發條件) - 停用觸發條件以停止處理記錄。

若要啟用或停用觸發條件 (或將其刪除),請在設計工具中選擇 MQ 觸發條件。若要重新設定觸發程序,請使用事件來源對應API作業。