> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
> Use this file to discover all available pages before exploring further.

# EventBridge

> AWS EventBridge, an event bus that matches JSON events against rules and delivers them to targets such as Lambda, SQS and Step Functions.

**On this page**

* [Coverage by target cloud](#coverage-by-target-cloud)
* [How the targets compare](#how-the-targets-compare)
  * [Max adaptation](#max-adaptation)
* [On Google Cloud](#on-google-cloud)
  * [Via Pub/Sub](#via-pub/sub)
* [On Google Cloud, Azure, OCI, and Private Kubernetes](#on-google-cloud-azure-oci-and-private-kubernetes)
  * [Via CloudNativePG](#via-cloudnativepg)
* [On Azure](#on-azure)
  * [Via Azure Event Grid](#via-azure-event-grid)
  * [Via Container Apps](#via-container-apps)

## Coverage by target cloud

| Target             | Available |
| ------------------ | --------- |
| Google Cloud       | ✓         |
| Azure              | ✓         |
| OCI                | ✓         |
| Private Kubernetes | ✓         |

## How the targets compare

Each row compares a capability of EventBridge with its adaptation on each target.
A dash means this row is not stated for that target.

### Max adaptation

| Capability                    | EventBridge            | Google Cloud · Pub/Sub                                                                                                                                 | Google Cloud, Azure, OCI, and Private Kubernetes · CloudNativePG                                                                  | Azure · Azure Event Grid                                                                                      | Azure · Container Apps                                                                                      |
| ----------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Event bus + PutEvents         | native                 | EventBridge bus and publish API served by the adapter                                                                                                  | EventBridge bus and publish API served by the adapter                                                                             | EventBridge bus and publish API served by the adapter                                                         | -                                                                                                           |
| Event-pattern matching        | Yes                    | Partial - Pub/Sub subscription attribute filter, a subset (no nested detail matching)                                                                  | Yes - EventBridge content filtering in the adapter, including nested detail matching; validate the application's operators        | Partial - Event Grid advanced filters, the closest native match, still a subset (filter count/nesting limits) | -                                                                                                           |
| Scheduled rules · cron / rate | native                 | translated to a standard scheduler (inexpressible crons are rejected at deploy)                                                                        | translated to a standard scheduler (inexpressible crons are rejected at deploy)                                                   | translated to a standard scheduler (inexpressible crons are rejected at deploy)                               | a Container Apps Job schedule trigger (translated cron; inexpressible crons are rejected at deploy)         |
| Rule targets · fan-out        | SQS / SNS / Lambda / … | a pull-bridge re-emits to each target's own equivalent                                                                                                 | a durable outbox row per target, re-delivered to each target's own equivalent (at-least-once)                                     | event handlers re-emit to each target's own equivalent                                                        | -                                                                                                           |
| Target DLQ + retry            | Yes                    | Partial - Pub/Sub dead-letter topic + maxDeliveryAttempts (attempt-count only; the age cap maps only to Pub/Sub's coarse min-10-min message retention) | Yes - durable outbox retry honoring maximum\_retry\_attempts + maximum\_event\_age\_in\_seconds, then a DLQ table (Tensor9-owned) | Yes - Event Grid dead-lettering to Storage + native retry (both caps: maxDeliveryAttempts + eventTimeToLive)  | -                                                                                                           |
| API coverage                  | full                   | high                                                                                                                                                   | high                                                                                                                              | high                                                                                                          | high                                                                                                        |
| Event-pattern rules           | Yes                    | -                                                                                                                                                      | -                                                                                                                                 | -                                                                                                             | No - this target supports scheduled rules only; use the Event Grid or Postgres tier for event-pattern rules |
| Rule target · delivery        | SQS / SNS / Lambda / … | -                                                                                                                                                      | -                                                                                                                                 | -                                                                                                             | delivered to the target's own equivalent (SQS target → SendMessage)                                         |

## On Google Cloud

### Via Pub/Sub

| Operation                                           | Area      | Support      | Depth        | Notes                                                                                                                                                                                                                                                                                                                                                                       |
| --------------------------------------------------- | --------- | ------------ | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cross-account / cross-region buses                  | Bus       | Out of scope | Full surface | a bus spans one deployment; cross-account and cross-region event routing is out of scope                                                                                                                                                                                                                                                                                    |
| Event bus (default + custom)                        | Bus       | Supported    | Common       | each bus is provisioned at apply-time; a custom bus is its own topic (or partition of the events store)                                                                                                                                                                                                                                                                     |
| Event bus SSE (customer KMS key)                    | Bus       | Out of scope | Full surface | a bus-level customer-managed KMS key is not supported; encryption at rest follows the backing store's own model (target-managed), not a per-bus customer key                                                                                                                                                                                                                |
| Schema registry / EventBridge Pipes                 | Ecosystem | Out of scope | Full surface | the schema registry and Pipes (source → filter → enrich → target) are distinct products, out of scope                                                                                                                                                                                                                                                                       |
| PutEvents                                           | Publish   | Supported    | Common       | a custom event is published to the bus with its source and detail-type; on the durable tier it is committed before the call returns                                                                                                                                                                                                                                         |
| Archive + replay                                    | Replay    | Out of scope | Full surface | event archive and time-range replay have no analog here (out of scope for this equivalence)                                                                                                                                                                                                                                                                                 |
| Rule: event pattern (JSON matcher)                  | Rules     | Partial      | Common       | the event pattern maps to a Pub/Sub subscription attribute filter: source and detail-type are promoted to attributes and matched natively, but deep nested-detail matching is a subset of EventBridge's grammar                                                                                                                                                             |
| Rule: scheduled (cron / rate)                       | Rules     | Supported    | Most usage   | AWS 6-field cron and rate schedules are translated for the target scheduler; deployment rejects a schedule that cannot be represented                                                                                                                                                                                                                                       |
| DLQ + retry policy on targets                       | Targets   | Partial      | Most usage   | a target DLQ maps to a Pub/Sub dead-letter topic; the attempt cap (maximum\_retry\_attempts) maps to the dead-letter policy's maxDeliveryAttempts (the cloud's own, range 5-100), but the age cap (maximum\_event\_age\_in\_seconds) has no equivalent setting; Pub/Sub bounds redelivery only by the subscription's message retention (min 10 min), too coarse to honor it |
| Target input (constant / input\_path / transformer) | Targets   | Partial      | Full surface | delivery supports constant input unchanged, an input\_path JSONPath selection, or an input transformer using input\_paths + input\_template. Only a subset of transformer template syntax is supported                                                                                                                                                                      |
| Targets (fan a rule to N targets)                   | Targets   | Supported    | Common       | a matched rule fans out to each of its targets (an SQS / SNS / Lambda target is delivered to that service's own equivalent)                                                                                                                                                                                                                                                 |

#### Bus, rules and destinations

The target design maps an EventBridge bus to a Pub/Sub topic and PutEvents to topic publication. Rules use Pub/Sub subscription attribute filters. A delivery worker pulls matched messages and forwards them to each rule's configured target through the target service's selected adapter.

Pub/Sub attribute filtering cannot directly evaluate nested EventBridge detail objects. Review each event pattern before selecting this target. Rules that depend on nested content need the PostgreSQL-backed matcher or a deliberate change to the event and filter design; similar field names do not make the filter languages equivalent.

#### Delivery, scheduling and operations

Google operates Pub/Sub storage and subscription redelivery. The adapter handles the EventBridge API and destination delivery. Broker acceptance, filter matching and target success are distinct stages: test all three and make target side effects safe to repeat after duplicate delivery.

Scheduled rules use Google Cloud Scheduler rather than a Pub/Sub filter. Provision the schedule, topic, subscription and destination together, with the required identities and network access. Archive/replay, Pipes and the schema registry are outside this mapping.

Switch producers after the rules and destinations are ready. Existing AWS history is not copied into the target. Size and validate the deployment with the customer's event sizes, rule count and destination behavior.

## On Google Cloud, Azure, OCI, and Private Kubernetes

### Via CloudNativePG

| Operation                                           | Area      | Support      | Depth        | Notes                                                                                                                                                                                                                                             |
| --------------------------------------------------- | --------- | ------------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cross-account / cross-region buses                  | Bus       | Out of scope | Full surface | a bus spans one deployment; cross-account and cross-region event routing is out of scope                                                                                                                                                          |
| Event bus (default + custom)                        | Bus       | Supported    | Common       | each bus is provisioned at apply-time; a custom bus is its own topic (or partition of the events store)                                                                                                                                           |
| Event bus SSE (customer KMS key)                    | Bus       | Out of scope | Full surface | a bus-level customer-managed KMS key is not supported; encryption at rest follows the backing store's own model (target-managed), not a per-bus customer key                                                                                      |
| Schema registry / EventBridge Pipes                 | Ecosystem | Out of scope | Full surface | the schema registry and Pipes (source → filter → enrich → target) are distinct products, out of scope                                                                                                                                             |
| PutEvents                                           | Publish   | Supported    | Common       | a custom event is published to the bus with its source and detail-type; on the durable tier it is committed before the call returns                                                                                                               |
| Archive + replay                                    | Replay    | Out of scope | Full surface | event archive and time-range replay have no analog here (out of scope for this equivalence)                                                                                                                                                       |
| Rule: event pattern (JSON matcher)                  | Rules     | Supported    | Common       | The adapter stores and evaluates event patterns in code, including prefix, anything-but, numeric ranges, exists, alternatives and nested detail matching. Check the pattern operators used by the application.                                    |
| Rule: scheduled (cron / rate)                       | Rules     | Supported    | Most usage   | AWS 6-field cron and rate schedules are translated for the target scheduler; deployment rejects a schedule that cannot be represented                                                                                                             |
| DLQ + retry policy on targets                       | Targets   | Supported    | Most usage   | a failed target delivery retries from the durable outbox (Tensor9-owned), honoring the retry policy's maximum\_retry\_attempts (attempt cap) and maximum\_event\_age\_in\_seconds (age cap), then lands in a DLQ table; delivery is at-least-once |
| Target input (constant / input\_path / transformer) | Targets   | Partial      | Full surface | delivery supports constant input unchanged, an input\_path JSONPath selection, or an input transformer using input\_paths + input\_template. Only a subset of transformer template syntax is supported                                            |
| Targets (fan a rule to N targets)                   | Targets   | Supported    | Common       | a matched rule fans out to each of its targets (an SQS / SNS / Lambda target is delivered to that service's own equivalent)                                                                                                                       |

#### Accepting and matching an event

The Tensor9 adapter serves EventBridge requests using PostgreSQL for buses, rules, targets, events and pending deliveries. For each event, it evaluates enabled event-pattern rules on the destination bus. It commits the event and delivery records for matched rule-target pairs in one database transaction. This transaction is per event; do not treat a PutEvents batch as one application transaction.

The adapter evaluates patterns in code instead of translating them to a broker's attribute filter. Nested objects are matched recursively. Fields in an object must all match, while a field's candidate values are alternatives. This supports rules over nested detail data as well as the envelope. The matcher supports prefix, suffix, ASCII case-insensitive equality, numeric comparisons, exists, \* wildcards and the documented anything-but forms. CIDR matching is outside this matcher scope. Test matching and nonmatching examples for each operator used by the application, including combinations of operators.

#### Delivering matched events

A worker claims pending deliveries with a temporary lease and sends each to its resolved target. The delivered body is the EventBridge envelope, or the target's static Input when supplied. The envelope includes id, source, detail-type, time, region, account, resources and detail. Input transformation is a separate feature and must be checked against the profile's limits.

A delivery accepted by the target can be repeated if the worker fails before recording success. Targets must tolerate duplicates. Temporary failures are retried with increasing delay and an attempt cap; permanent failures and exhausted attempts become terminal. Removing a target also makes its remaining deliveries terminal. Monitor backlog and terminal failures independently of PutEvents success.

#### Rules, targets and migration

Provision buses, rules and targets before switching producers, then test representative matching and nonmatching events. Confirm each target's selected service adapter and network access. A matching rule is not enough if its destination cannot accept the delivered event.

Scheduled rules need the scheduler described by the deployment, separately from event-pattern evaluation. Existing AWS event history is not copied into the database. Archive/replay, Pipes and the schema registry remain outside this mapping. A stored event used for pending delivery is not an EventBridge archive or an application-facing replay facility.

## On Azure

### Via Azure Event Grid

| Operation                                           | Area      | Support      | Depth        | Notes                                                                                                                                                                                                                                                                                                                  |
| --------------------------------------------------- | --------- | ------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cross-account / cross-region buses                  | Bus       | Out of scope | Full surface | a bus spans one deployment; cross-account and cross-region event routing is out of scope                                                                                                                                                                                                                               |
| Event bus (default + custom)                        | Bus       | Supported    | Common       | each bus is provisioned at apply-time; a custom bus is its own topic (or partition of the events store)                                                                                                                                                                                                                |
| Event bus SSE (customer KMS key)                    | Bus       | Out of scope | Full surface | a bus-level customer-managed KMS key is not supported; encryption at rest follows the backing store's own model (target-managed), not a per-bus customer key                                                                                                                                                           |
| Schema registry / EventBridge Pipes                 | Ecosystem | Out of scope | Full surface | the schema registry and Pipes (source → filter → enrich → target) are distinct products, out of scope                                                                                                                                                                                                                  |
| PutEvents                                           | Publish   | Supported    | Common       | a custom event is published to the bus with its source and detail-type; on the durable tier it is committed before the call returns                                                                                                                                                                                    |
| Archive + replay                                    | Replay    | Out of scope | Full surface | event archive and time-range replay have no analog here (out of scope for this equivalence)                                                                                                                                                                                                                            |
| Rule: event pattern (JSON matcher)                  | Rules     | Partial      | Common       | the event pattern maps to Event Grid advanced filters, the closest native match to EventBridge content filtering (numeric ranges, string contains, nested keys), still capped below EventBridge's full grammar (filter count/nesting limits)                                                                           |
| Rule: scheduled (cron / rate)                       | Rules     | Supported    | Most usage   | AWS 6-field cron and rate schedules are translated for the target scheduler; deployment rejects a schedule that cannot be represented                                                                                                                                                                                  |
| DLQ + retry policy on targets                       | Targets   | Supported    | Most usage   | a target DLQ maps to Event Grid dead-lettering to Storage, with both retry caps native: the attempt cap (maximum\_retry\_attempts) maps to Event Grid's maxDeliveryAttempts (1-30) and the age cap (maximum\_event\_age\_in\_seconds) to its eventTimeToLive (1-1440 min); both retry limits are applied by Event Grid |
| Target input (constant / input\_path / transformer) | Targets   | Partial      | Full surface | delivery supports constant input unchanged, an input\_path JSONPath selection, or an input transformer using input\_paths + input\_template. Only a subset of transformer template syntax is supported                                                                                                                 |
| Targets (fan a rule to N targets)                   | Targets   | Supported    | Common       | a matched rule fans out to each of its targets (an SQS / SNS / Lambda target is delivered to that service's own equivalent)                                                                                                                                                                                            |

#### How it works

A Tensor9 adapter in the customer environment accepts your application's EventBridge `PutEvents` calls. Each event bus maps to an Event Grid topic; events are published in the CloudEvents format, and Event Grid advanced filters match the rules. Event handlers deliver matches to each target's replacement service, such as the SQS or SNS adapter.

Microsoft operates Event Grid's storage, delivery, retry and dead-lettering. The adapter uses the appliance's workload identity to authenticate without a stored key.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE0IiB2aWV3Qm94PSIwIDAgODM2IDIxNCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyBhIHByb2R1Y2VyIGNhbGxzIFB1dEV2ZW50cyBvbiBhbiBFdmVudEJyaWRnZSBidXMsIHJ1bGVzIG1hdGNoIGV2ZW50cyBieSBwYXR0ZXJuIGFuZCBkZWxpdmVyIHRvIHRhcmdldHMuIEFmdGVyOiBvbiBBenVyZSB0aGUgc2FtZSBQdXRFdmVudHMgY2FsbCBpcyBzZXJ2ZWQgYnkgYSBUZW5zb3I5IGFkYXB0ZXIgb250byBhbiBFdmVudCBHcmlkIHRvcGljIGFzIENsb3VkRXZlbnRzLCBhZHZhbmNlZCBmaWx0ZXJzIG1hdGNoLCBhbmQgZXZlbnQgaGFuZGxlcnMgcmUtZW1pdCBlYWNoIG1hdGNoZWQgZXZlbnQgdG8gdGhlIHRhcmdldCdzIG93biBlcXVpdmFsZW50LiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlZzEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ0IiB3aWR0aD0iMzg0IiBoZWlnaHQ9IjE1MiIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjYyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI5MiIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI2MiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjgwIiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+UHJvZHVjZXI8L3RleHQ+Cjx0ZXh0IHg9IjgwIiB5PSIxMzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5QdXRFdmVudHM8L3RleHQ+CjxsaW5lIHgxPSIxMzAiIHkxPSIxMjMiIHgyPSIxOTAiIHkyPSIxMjMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2VnMSkiLz4KPHJlY3QgeD0iMTk0IiB5PSI4NCIgd2lkdGg9IjE5MiIgaGVpZ2h0PSI3OCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI5MCIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPkV2ZW50QnJpZGdlIGJ1czwvdGV4dD4KPHRleHQgeD0iMjkwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5ydWxlcyBtYXRjaCBieSBwYXR0ZXJuPC90ZXh0Pgo8dGV4dCB4PSIyOTAiIHk9IjE0NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5OyBmaWxsOiNiNDUzMDkiPuKGkiB0YXJnZXRzPC90ZXh0Pgo8bGluZSB4MT0iNDE4IiB5MT0iNDAiIHgyPSI0MTgiIHkyPSIxODYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHJlY3QgeD0iNDM2IiB5PSI0NCIgd2lkdGg9IjM4NCIgaGVpZ2h0PSIxNTIiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ1MCIgeT0iNjIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPk9OIEFaVVJFPC90ZXh0Pgo8cmVjdCB4PSI0NTAiIHk9IjkyIiB3aWR0aD0iOTIiIGhlaWdodD0iNjIiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI0OTYiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5Qcm9kdWNlcjwvdGV4dD4KPHRleHQgeD0iNDk2IiB5PSIxMzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjU0MiIgeTE9IjEyMyIgeDI9IjU4NiIgeTI9IjEyMyIgc3Ryb2tlPSIjMDQ3ODU3IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWcxKSIvPgo8cmVjdCB4PSI1OTAiIHk9Ijg4IiB3aWR0aD0iOTQiIGhlaWdodD0iNzAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2MzciIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5UZW5zb3I5PC90ZXh0Pgo8dGV4dCB4PSI2MzciIHk9IjEzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmFkYXB0ZXI8L3RleHQ+CjxsaW5lIHgxPSI2ODQiIHkxPSIxMjMiIHgyPSI3MjIiIHkyPSIxMjMiIHN0cm9rZT0iIzA0Nzg1NyIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2VnMSkiLz4KPHJlY3QgeD0iNzI2IiB5PSI4NCIgd2lkdGg9IjgwIiBoZWlnaHQ9Ijc4IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzY2IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+RXZlbnQgR3JpZDwvdGV4dD4KPHRleHQgeD0iNzY2IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5DbG91ZEV2ZW50czwvdGV4dD4KPHRleHQgeD0iNzY2IiB5PSIxMzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5hZHZhbmNlZCBmaWx0ZXJzPC90ZXh0Pgo8dGV4dCB4PSI3NjYiIHk9IjE1MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5OyBmaWxsOiMwNDc4NTciPkF6dXJlIHJldHJpZXM8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS a producer calls PutEvents on an EventBridge bus, rules match events by pattern and deliver to targets. After: on Azure the same PutEvents call is served by a Tensor9 adapter onto an Event Grid topic as CloudEvents, advanced filters match, and event handlers re-emit each matched event to the target's own equivalent." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjE0IiB2aWV3Qm94PSIwIDAgODM2IDIxNCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyBhIHByb2R1Y2VyIGNhbGxzIFB1dEV2ZW50cyBvbiBhbiBFdmVudEJyaWRnZSBidXMsIHJ1bGVzIG1hdGNoIGV2ZW50cyBieSBwYXR0ZXJuIGFuZCBkZWxpdmVyIHRvIHRhcmdldHMuIEFmdGVyOiBvbiBBenVyZSB0aGUgc2FtZSBQdXRFdmVudHMgY2FsbCBpcyBzZXJ2ZWQgYnkgYSBUZW5zb3I5IGFkYXB0ZXIgb250byBhbiBFdmVudCBHcmlkIHRvcGljIGFzIENsb3VkRXZlbnRzLCBhZHZhbmNlZCBmaWx0ZXJzIG1hdGNoLCBhbmQgZXZlbnQgaGFuZGxlcnMgcmUtZW1pdCBlYWNoIG1hdGNoZWQgZXZlbnQgdG8gdGhlIHRhcmdldCdzIG93biBlcXVpdmFsZW50LiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlZzEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ0IiB3aWR0aD0iMzg0IiBoZWlnaHQ9IjE1MiIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjYyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iOTIiIHdpZHRoPSIxMDAiIGhlaWdodD0iNjIiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI4MCIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPlByb2R1Y2VyPC90ZXh0Pgo8dGV4dCB4PSI4MCIgeT0iMTM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+UHV0RXZlbnRzPC90ZXh0Pgo8bGluZSB4MT0iMTMwIiB5MT0iMTIzIiB4Mj0iMTkwIiB5Mj0iMTIzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlZzEpIi8+CjxyZWN0IHg9IjE5NCIgeT0iODQiIHdpZHRoPSIxOTIiIGhlaWdodD0iNzgiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyOTAiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5FdmVudEJyaWRnZSBidXM8L3RleHQ+Cjx0ZXh0IHg9IjI5MCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+cnVsZXMgbWF0Y2ggYnkgcGF0dGVybjwvdGV4dD4KPHRleHQgeD0iMjkwIiB5PSIxNDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNjsgZmlsbDogI2RlYjI5MCI+4oaSIHRhcmdldHM8L3RleHQ+CjxsaW5lIHgxPSI0MTgiIHkxPSI0MCIgeDI9IjQxOCIgeTI9IjE4NiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8cmVjdCB4PSI0MzYiIHk9IjQ0IiB3aWR0aD0iMzg0IiBoZWlnaHQ9IjE1MiIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDUwIiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPk9OIEFaVVJFPC90ZXh0Pgo8cmVjdCB4PSI0NTAiIHk9IjkyIiB3aWR0aD0iOTIiIGhlaWdodD0iNjIiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI0OTYiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5Qcm9kdWNlcjwvdGV4dD4KPHRleHQgeD0iNDk2IiB5PSIxMzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjU0MiIgeTE9IjEyMyIgeDI9IjU4NiIgeTI9IjEyMyIgc3Ryb2tlPSIjMDQ3ODU3IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWcxKSIvPgo8cmVjdCB4PSI1OTAiIHk9Ijg4IiB3aWR0aD0iOTQiIGhlaWdodD0iNzAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2MzciIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5UZW5zb3I5PC90ZXh0Pgo8dGV4dCB4PSI2MzciIHk9IjEzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmFkYXB0ZXI8L3RleHQ+CjxsaW5lIHgxPSI2ODQiIHkxPSIxMjMiIHgyPSI3MjIiIHkyPSIxMjMiIHN0cm9rZT0iIzA0Nzg1NyIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2VnMSkiLz4KPHJlY3QgeD0iNzI2IiB5PSI4NCIgd2lkdGg9IjgwIiBoZWlnaHQ9Ijc4IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzY2IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+RXZlbnQgR3JpZDwvdGV4dD4KPHRleHQgeD0iNzY2IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5DbG91ZEV2ZW50czwvdGV4dD4KPHRleHQgeD0iNzY2IiB5PSIxMzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5hZHZhbmNlZCBmaWx0ZXJzPC90ZXh0Pgo8dGV4dCB4PSI3NjYiIHk9IjE1MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2OyBmaWxsOiAjOTBkZWM4Ij5BenVyZSByZXRyaWVzPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS a producer calls PutEvents on an EventBridge bus, rules match events by pattern and deliver to targets. After: on Azure the same PutEvents call is served by a Tensor9 adapter onto an Event Grid topic as CloudEvents, advanced filters match, and event handlers re-emit each matched event to the target's own equivalent." />
</div>

#### Filter support and the PostgreSQL alternative

Event Grid advanced filters support numeric ranges, string containment and nested keys, but cover only part of EventBridge's filter syntax. Limits on filter count and nesting can prevent a rule from being translated. Check the event patterns your application uses before choosing this target.

With Event Grid, Microsoft operates event matching and delivery. The PostgreSQL target evaluates nested detail fields and its supported pattern operators in the adapter. Compare those operators with your rules when Event Grid cannot express them; it does not cover every EventBridge pattern form. The customer also operates the PostgreSQL database used for event and delivery state.

#### Scheduled rules use Container Apps

Event Grid has no scheduler. Scheduled EventBridge rules use a Container Apps Job that scales to zero between runs. A stack containing both event-pattern rules and scheduled rules therefore provisions both Event Grid and Container Apps resources. Check the Container Apps section for its schedule and target restrictions.

#### Limitations

△ Event Grid limitations

* **Content filtering is capped below EventBridge's grammar.** Advanced filters cover numeric ranges, string containment and nested keys, with limits on filter count and nesting. Check each required pattern against Event Grid and the PostgreSQL adapter's supported operators before selecting a target.
* **Archive and replay are out of scope.** EventBridge can archive events and replay them later. Nothing here reproduces that, so a recovery or backfill procedure built on replay does not port and needs another design.
* **Pipes and the schema registry are out of scope.** EventBridge Pipes and the schema registry are unsupported by this target.
* **Scheduled rules use Container Apps Jobs.** Event Grid has no scheduler, so a cron or rate rule is served by a Container Apps Job instead. Expect a mixed stack to provision both, and review the scheduled-rule section for its constraints.

#### Other considerations

* **Allow pending AWS deliveries to finish.** Provision topics, filters and handlers before switching producers. Pending EventBridge deliveries and retries are not copied to Event Grid. Keep the old destinations available while those deliveries finish, and handle duplicate events during cutover.
* **Review Event Grid retry limits.** Retry and dead-lettering are Event Grid's, with its own caps on delivery attempts and event time-to-live, and dead-lettered events land in Storage. If your operational runbooks assume EventBridge's retry behaviour, those numbers are the ones to re-read.
* **Targets resolve to their own equivalents.** An SQS target sends a message through the SQS adapter selected for this appliance. Review each target service's support and limitations alongside the EventBridge rules.

### Via Container Apps

| Operation                                                  | Area      | Support      | Depth        | Notes                                                                                                                                                                                                                                                                         |
| ---------------------------------------------------------- | --------- | ------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Event bus + PutEvents                                      | Bus       | Out of scope | Common       | this target supports scheduled rules only; it provisions no event bus and no publish path. Use the Event Grid or the durable Postgres tier for a bus + PutEvents                                                                                                              |
| Archive + replay / Pipes / schema registry / cross-account | Ecosystem | Out of scope | Full surface | unsupported for scheduled jobs                                                                                                                                                                                                                                                |
| Rule: event pattern (JSON matcher)                         | Rules     | Out of scope | Common       | an event-pattern (bus-matching) rule is caught at deploy here; use Event Grid or the PostgreSQL adapter for event-pattern rules                                                                                                                                               |
| Rule: scheduled (cron / rate)                              | Rules     | Supported    | Common       | a scheduled Container Apps Job runs the translated AWS 6-field cron or rate schedule and scales to zero between runs; deployment rejects schedules that cannot be represented                                                                                                 |
| DLQ + retry policy on targets                              | Targets   | Partial      | Most usage   | delivery uses the selected SQS adapter; its storage and dead-letter behavior also apply here                                                                                                                                                                                  |
| Target input (constant / input\_path / transformer)        | Targets   | Out of scope | Full surface | for scheduled jobs the job runs on its cron and receives the rule's scheduled event; a target input override (a constant Input, an input\_path selector, or an input\_transformer) is caught at deploy, so set the job's payload in the Container Apps Job definition instead |
| Target: SNS / Lambda / non-SQS                             | Targets   | Out of scope | Full surface | only SQS destinations are supported; deployment rejects other destination types                                                                                                                                                                                               |
| Target: SQS                                                | Targets   | Supported    | Common       | each job run sends the scheduled event to the SQS target through SendMessage on its selected adapter                                                                                                                                                                          |

#### How it works

A scheduled EventBridge rule maps to a **Container Apps Job with a schedule trigger**. The job scales to zero between runs. Each run sends the scheduled event to the rule's SQS target through `SendMessage`, using the SQS adapter selected for the appliance.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjA2IiB2aWV3Qm94PSIwIDAgODM2IDIwNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyBhIHNjaGVkdWxlZCBFdmVudEJyaWRnZSBydWxlIGZpcmVzIG9uIGEgY3JvbiBvciByYXRlIHNjaGVkdWxlIGFuZCBkZWxpdmVycyBhbiBldmVudCB0byBpdHMgdGFyZ2V0LiBBZnRlcjogb24gQXp1cmUgYSBDb250YWluZXIgQXBwcyBKb2Igd2l0aCBhIHNjaGVkdWxlIHRyaWdnZXIgZmlyZXMgdGhlIHRyYW5zbGF0ZWQgY3Jvbiwgc2NhbGVzIHRvIHplcm8gYmV0d2VlbiBydW5zLCBhbmQgc2VuZHMgdGhlIHNjaGVkdWxlZCBldmVudCB0aHJvdWdoIHRoZSB0YXJnZXQgU1FTIGFkYXB0ZXIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImNhMSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDQiIHdpZHRoPSIzODQiIGhlaWdodD0iMTQ0IiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9Ijg2IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjY4IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMTA1IiB5PSIxMTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+U2NoZWR1bGVkIHJ1bGU8L3RleHQ+Cjx0ZXh0IHg9IjEwNSIgeT0iMTMzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+Y3JvbiAvIHJhdGU8L3RleHQ+CjxsaW5lIHgxPSIxODAiIHkxPSIxMjAiIHgyPSIyMzgiIHkyPSIxMjAiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2NhMSkiLz4KPHJlY3QgeD0iMjQyIiB5PSI4NiIgd2lkdGg9IjE0NCIgaGVpZ2h0PSI2OCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMxNCIgeT0iMTE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPlRhcmdldDwvdGV4dD4KPHRleHQgeD0iMzE0IiB5PSIxMzMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5hbiBTUVMgcXVldWU8L3RleHQ+CjxsaW5lIHgxPSI0MTgiIHkxPSI0MCIgeDI9IjQxOCIgeTI9IjE3OCIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8cmVjdCB4PSI0MzYiIHk9IjQ0IiB3aWR0aD0iMzg0IiBoZWlnaHQ9IjE0NCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDUwIiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gQVpVUkU8L3RleHQ+CjxyZWN0IHg9IjQ1MCIgeT0iODIiIHdpZHRoPSIxNjYiIGhlaWdodD0iNzYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MzMiIHk9IjEwOSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5Db250YWluZXIgQXBwcyBKb2I8L3RleHQ+Cjx0ZXh0IHg9IjUzMyIgeT0iMTI1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+c2NoZWR1bGUgdHJpZ2dlcjwvdGV4dD4KPHRleHQgeD0iNTMzIiB5PSIxNDEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA1OTY2OTsgZmlsbDojMDQ3ODU3Ij5zY2FsZXMgdG8gemVybzwvdGV4dD4KPGxpbmUgeDE9IjYxNiIgeTE9IjEyMCIgeDI9IjY2MiIgeTI9IjEyMCIgc3Ryb2tlPSIjMDQ3ODU3IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2ExKSIvPgo8cmVjdCB4PSI2NjYiIHk9Ijg2IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjY4IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzM2IiB5PSIxMTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+VGFyZ2V0IGVxdWl2YWxlbnQ8L3RleHQ+Cjx0ZXh0IHg9IjczNiIgeT0iMTMzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+U2VuZE1lc3NhZ2U8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS a scheduled EventBridge rule fires on a cron or rate schedule and delivers an event to its target. After: on Azure a Container Apps Job with a schedule trigger fires the translated cron, scales to zero between runs, and sends the scheduled event through the target SQS adapter." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjA2IiB2aWV3Qm94PSIwIDAgODM2IDIwNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyBhIHNjaGVkdWxlZCBFdmVudEJyaWRnZSBydWxlIGZpcmVzIG9uIGEgY3JvbiBvciByYXRlIHNjaGVkdWxlIGFuZCBkZWxpdmVycyBhbiBldmVudCB0byBpdHMgdGFyZ2V0LiBBZnRlcjogb24gQXp1cmUgYSBDb250YWluZXIgQXBwcyBKb2Igd2l0aCBhIHNjaGVkdWxlIHRyaWdnZXIgZmlyZXMgdGhlIHRyYW5zbGF0ZWQgY3Jvbiwgc2NhbGVzIHRvIHplcm8gYmV0d2VlbiBydW5zLCBhbmQgc2VuZHMgdGhlIHNjaGVkdWxlZCBldmVudCB0aHJvdWdoIHRoZSB0YXJnZXQgU1FTIGFkYXB0ZXIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImNhMSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDQiIHdpZHRoPSIzODQiIGhlaWdodD0iMTQ0IiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI4NiIgd2lkdGg9IjE1MCIgaGVpZ2h0PSI2OCIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjEwNSIgeT0iMTE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPlNjaGVkdWxlZCBydWxlPC90ZXh0Pgo8dGV4dCB4PSIxMDUiIHk9IjEzMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmNyb24gLyByYXRlPC90ZXh0Pgo8bGluZSB4MT0iMTgwIiB5MT0iMTIwIiB4Mj0iMjM4IiB5Mj0iMTIwIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNjYTEpIi8+CjxyZWN0IHg9IjI0MiIgeT0iODYiIHdpZHRoPSIxNDQiIGhlaWdodD0iNjgiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIzMTQiIHk9IjExNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5UYXJnZXQ8L3RleHQ+Cjx0ZXh0IHg9IjMxNCIgeT0iMTMzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+YW4gU1FTIHF1ZXVlPC90ZXh0Pgo8bGluZSB4MT0iNDE4IiB5MT0iNDAiIHgyPSI0MTgiIHkyPSIxNzgiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHJlY3QgeD0iNDM2IiB5PSI0NCIgd2lkdGg9IjM4NCIgaGVpZ2h0PSIxNDQiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ1MCIgeT0iNjIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5PTiBBWlVSRTwvdGV4dD4KPHJlY3QgeD0iNDUwIiB5PSI4MiIgd2lkdGg9IjE2NiIgaGVpZ2h0PSI3NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUzMyIgeT0iMTA5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPkNvbnRhaW5lciBBcHBzIEpvYjwvdGV4dD4KPHRleHQgeD0iNTMzIiB5PSIxMjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5zY2hlZHVsZSB0cmlnZ2VyPC90ZXh0Pgo8dGV4dCB4PSI1MzMiIHk9IjE0MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2OyBmaWxsOiAjOTBkZWM4Ij5zY2FsZXMgdG8gemVybzwvdGV4dD4KPGxpbmUgeDE9IjYxNiIgeTE9IjEyMCIgeDI9IjY2MiIgeTI9IjEyMCIgc3Ryb2tlPSIjMDQ3ODU3IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2ExKSIvPgo8cmVjdCB4PSI2NjYiIHk9Ijg2IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjY4IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzM2IiB5PSIxMTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+VGFyZ2V0IGVxdWl2YWxlbnQ8L3RleHQ+Cjx0ZXh0IHg9IjczNiIgeT0iMTMzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+U2VuZE1lc3NhZ2U8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS a scheduled EventBridge rule fires on a cron or rate schedule and delivers an event to its target. After: on Azure a Container Apps Job with a schedule trigger fires the translated cron, scales to zero between runs, and sends the scheduled event through the target SQS adapter." />
</div>

#### Cron translation

AWS cron expressions have six fields; standard cron has five and uses a different day-of-week convention. Tensor9 translates expressions that preserve the schedule. If an expression cannot be represented, deployment fails with an error identifying it. Revise that schedule before deployment.

#### Supported rules and targets

This target supports scheduled rules with SQS destinations. Deployment rejects event-pattern rules because the job provides neither an event bus nor `PutEvents`. Use Event Grid for pattern rules, or compare the PostgreSQL adapter's supported operators when your rules need nested detail matching that Event Grid cannot express.

Non-SQS destinations are also rejected. A scheduled rule that invokes a function or sends to another service needs a different implementation.

#### Limitations

△ Scheduled-rule limitations

* **Only scheduled rules are served here.** Deployment rejects event-pattern rules for this target. Use Event Grid or the PostgreSQL adapter after checking its supported pattern operators.
* **Only SQS targets are served here.** The job delivers through the SQS adapter. Other target types are rejected at deploy, so a scheduled rule that invokes a function or posts to an API needs that gap closed before this target works for it.
* **Some AWS cron expressions cannot be expressed at all.** AWS's six-field cron is more expressive than standard cron in places. An untranslatable expression is a deploy-time error, which means a rule you rely on may need its schedule restated in a form standard cron can express.
* **Allow for job startup time.** The job starts a new instance on each trigger. Measure the delay before processing begins if your application has a deadline after the scheduled time.

#### Other considerations

* **Estimate cost from job runs.** Job compute is billed while the job runs. Estimate it from the schedule frequency, run duration and resources required.
* **Check cron translation before deployment.** The translation is decided at deploy, so the fastest way to find an untranslatable expression is to look at your rules' schedules first. Six-field expressions and unusual day-of-week forms are where the refusals land.
* **A mixed stack provisions both mechanisms.** If some rules are scheduled and others match patterns, expect Container Apps resources alongside Event Grid ones. On AWS they were entries on one bus; here they are two different services, and both appear in the plan.

[Service Catalog](/service-adapters/catalog).
