

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

# Amazon MQ 訊息代理程式作為 EventBridge 管道中的來源
<a name="eb-pipes-mq"></a>

您可以用 EventBridge 接收來自 Amazon MQ 訊息代理程式的記錄。然後，您可以選擇性地篩選或增強這些記錄，然後再將它們傳送到可用的目的地之一進行處理。您可以在設定管道時選擇 Amazon MQ 特定的設定。當將資料傳送至目的地時，EventBridge 管道會維護來自訊息代理程式的資料串流中的記錄順序。

Amazon MQ 是一項受管訊息代理程式服務，適用於 [Apache ActiveMQ](https://activemq.apache.org/) 和 [RabbitMQ](https://www.rabbitmq.com/)。訊息代理程式透過主題或佇列事件目的地，允許軟體應用程式和元件使用不同程式設計語言、作業系統和正式簡訊協定來進行通訊。

Amazon MQ 還可以透過安裝 ActiveMQ 或 RabbitMQ 代理程式，來代表您管理 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。安裝代理程式之後，它會為您的執行個體提供不同的網路拓撲和其他基礎結構需求。

Amazon MQ 來源具有下列組態限制：
+ **跨帳戶**：EventBridge 不支援跨帳戶處理。您無法使用 EventBridge 來處理來自不同 AWS 帳戶中 Amazon MQ 訊息代理程式的記錄。
+ **身分驗證支援**：針對 ActiveMQ，僅支援 [ActiveMQ SimpleAuthenticationPlugin](https://activemq.apache.org/security#simple-authentication-plugin)。對於 RabbitMQ，僅支援 [PLAIN](https://www.rabbitmq.com/access-control.html#mechanisms) 身分驗證機制。若要管理憑證，請使用 AWS Secrets Manager。如需 ActiveMQ 身分驗證的詳細資訊，請參閱《Amazon MQ 開發人員指南》中的[將 ActiveMQ 代理程式與 LDAP 整合](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/security-authentication-authorization.html)。
+ **連線配額**：代理程式每個線路層級協定允許的連線數量上限。此配額以代理程式執行個體類型為基礎。如需詳細資訊，請參閱《Amazon MQ 開發人員指南》中的 **\$1Amazon MQ\$1 中的配額**的[代理程式](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-limits.html#broker-limits)。
+ **連線**：您可以在公有或私有虛擬私有雲端 (VPC) 中建立代理程式。若是私有 VPC，您的管道需要存取 VPC 才能接收訊息。
+ **事件目的地**：僅支援佇列目的地。然而，您可以使用虛擬主題，當作為佇列在外部與管道互動時，其行為在內部可作為主題。如需詳細資訊，請參閱 Apache ActiveMQ 網站上的[虛擬目的地](https://activemq.apache.org/virtual-destinations)，以及 RabbitMQ 網站上的[虛擬主機](https://www.rabbitmq.com/vhosts.html)。
+ **網路拓撲**：針對 ActiveMQ，管道僅支援單一執行個體或待命代理程式。針對 RabbitMQ，每個管道僅支援單一執行個體代理程式或叢集部署。單一執行個體代理程式需要容錯移轉端點。如需這些代理程式部署模式的詳細資訊，請參閱《Amazon MQ 開發人員指南》中的 [Active MQ 代理程式架構](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-broker-architecture.html)和 [Rabbit MQ 代理程式架構](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/rabbitmq-broker-architecture.html)。
+ **協定**：支援的協定取決於您所使用的 Amazon MQ。
  + 針對 ActiveMQ 整合，EventBridge 會使用 OpenWire/Java 訊息服務 (JMS) 協定來取用訊息。任何其他通訊協定都不支援訊息消耗。EventBridge 僅支援 JMS 通訊協定中的 `TextMessage`和 `BytesMessage`操作。如需有關 OpenWire 協定的詳細資訊，請參閱 Apache ActiveMQ 網站上的 [OpenWire](https://activemq.apache.org/openwire.html)。
  + 對於 RabbitMQ 整合，EventBridge 透過 AMQP 0-9-1 協定來取用訊息。不支援透過其他協定來取用訊息。如需 RabbitMQ 實作 AMQP 0-9-1 協定的詳細資訊，請參閱 RabbitMQ 網站上的 [AMQP 0-9-1 完整參考指南](https://www.rabbitmq.com/amqp-0-9-1-reference.html)。

EventBridge 會自動支援 Amazon MQ 支援的最新版 ActiveMQ 和 RabbitMQ。如需支援的最新版，請參閱《Amazon MQ 開發人員指南》中的 [Amazon MQ 版本備註](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-release-notes.html)。

**注意**  
根據預設，Amazon MQ 具有每週代理程式維護時段。代理程式在該時段不可用。對於沒有待命的代理程式，EventBridge 不會處理訊息，直到視窗結束為止。

**範例事件**

下列範例事件顯示管道接收的資訊。您可以使用此事件來建立和篩選事件模式，或定義輸入轉換。並非所有欄位都可以篩選。如需有關所能篩選欄位的詳細資訊，請參閱 [Amazon EventBridge 管道中的事件篩選](eb-pipes-event-filtering.md)。

**ActiveMQ**

```
[
  {
    "eventSource": "aws:amq",
    "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8",    
    "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-west-2.amazonaws.com.rproxy.govskope.us-37557-1234520418293-4:1:1:1:1",
    "messageType": "jms/text-message",
    "data": "QUJDOkFBQUE=",
    "connectionId": "myJMSCoID",
    "redelivered": false,
    "destination": {
      "physicalname": "testQueue"
    },
    "timestamp": 1598827811958,
    "brokerInTime": 1598827811958,
    "brokerOutTime": 1598827811959
  },
  {
    "eventSource": "aws:amq",
    "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8",        
    "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-west-2.amazonaws.com.rproxy.govskope.us-37557-1234520418293-4:1:1:1:1",
    "messageType": "jms/bytes-message",
    "data": "3DTOOW7crj51prgVLQaGQ82S48k=",
    "connectionId": "myJMSCoID1",
    "persistent": false,
    "destination": {
      "physicalname": "testQueue"
    },
    "timestamp": 1598827811958,
    "brokerInTime": 1598827811958,
    "brokerOutTime": 1598827811959
  }
]
```

**RabbitMQ**

```
[
  {
    "eventSource": "aws:rmq",
    "eventSourceArn": "arn:aws:mq:us-west-2:111122223333:broker:pizzaBroker:b-9bcfa592-423a-4942-879d-eb284b418fc8",
    "eventSourceKey": "pizzaQueue::/",
    "basicProperties": {
      "contentType": "text/plain",
      "contentEncoding": null,
      "headers": {
        "header1": {
          "bytes": [
            118,
            97,
            108,
            117,
            101,
            49
          ]
        },
        "header2": {
          "bytes": [
            118,
            97,
            108,
            117,
            101,
            50
          ]
        },
        "numberInHeader": 10
      },
      "deliveryMode": 1,
      "priority": 34,
      "correlationId": null,
      "replyTo": null,
      "expiration": "60000",
      "messageId": null,
      "timestamp": "Jan 1, 1970, 12:33:41 AM",
      "type": null,
      "userId": "AIDACKCEVSQ6C2EXAMPLE",
      "appId": null,
      "clusterId": null,
      "bodySize": 80
    },
    "redelivered": false,
    "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ=="
  }
]
```

## 取用者群組
<a name="pipes-mq-consumer-group"></a>

若要與 Amazon MQ 互動，EventBridge 會建立可以從您的 Amazon MQ 代理程式讀取的取用者群體。建立取用者群組時，會使用與管道 UUID 相同的 ID。

對於 Amazon MQ 來源，EventBridge 會批次處理記錄，並在單個承載中將它們傳送到您的函數。要控制行為，您可以設定批次間隔和批次大小。EventBridge 會提取訊息，直到發生下列一種情況：
+ 處理過的記錄達到有效負載大小最大 6 MB。
+ 批次化視窗即會到期。
+ 記錄數達到完整批次大小。

EventBridge 將您的批次轉換為單個承載，然後調用您的函數。訊息不會保存也不會還原序列化。相反，取用者群組會將其擷取為位元組 BLOB。然後，透過 base64 將它們編碼到 JSON 承載中。如果管道針對批次中的任何訊息傳回錯誤，EventBridge 會重試整個批次的訊息，直至處理成功或訊息過期。

## 網路組態
<a name="pipes-mq-vpc-config"></a>

根據預設，Amazon MQ 代理程式使用設定為 false 的 `PubliclyAccessible` 標記建立。只有當 `PubliclyAccessible` 設定為 true 時，代理程式才會取得公有 IP 地址。針對使用管道的完整存取權，您的代理程式必須使用公有端點，或提供對 VPC 的存取權。

如果您無法公開存取您的 Amazon MQ 代理程式，EventBridge 必須能存取與代理程式相關聯的 Amazon Virtual Private Cloud (Amazon VPC)。
+ 若要存取 Amazon MQ 代理程式的 VPC，EventBridge 可以使用來源子網路的傳出網際網路存取。針對公用子網路，這必須是受管理的 [NAT 閘道](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。對於私有子網路，它可以是 NAT 閘道，也可以是您自己的 NAT。確定 NAT 具有公有 IP 地址，可連線至網際網路。
+ EventBridge 管道也支援透過 交付事件[AWS PrivateLink](https://aws.amazon.com/privatelink/)，可讓您將事件從位於 Amazon Virtual Private Cloud (Amazon VPC) 的事件來源傳送至管道目標，而無須周遊公有網際網路。您可以使用管道從 Amazon Managed Streaming for Apache Kafka (Amazon MSK)、自我管理的 Apache Kafka 和位於私有子網路中的 Amazon MQ 來源輪詢，而不需要部署網際網路閘道、設定防火牆規則或設定代理伺服器。

  若要設定 VPC 端點，請參閱*AWS PrivateLink 《 使用者指南*》中的[建立 VPC 端點](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)。針對服務名稱，選取 `com.amazonaws.region.pipes-data`。

使用下列規則 (最低限度) 設定 Amazon VPC 安全群組：
+ 傳入規則 – 允許 Amazon MQ 代理程式連接埠上針對來源指定的安全群組的所有流量。
+ 傳出規則：針對所有目的地，允許連接埠 443 上的所有流量。允許 Amazon MQ 代理程式連接埠上針對來源指定的安全群組的所有流量。

  中介裝置連接埠包括：
  + 適用於純文字的 9092
  + 適用於 TLS 的 9094
  + 9096 for SASL
  + 適用於 IAM 的 9098

**注意**  
您的 Amazon VPC 組態可透過 [Amazon MQ API](https://docs.aws.amazon.com/amazon-mq/latest/api-reference/resources.html) 來探索。您不需要在設定期間設定它。