Plugin Documentation

BridgeBus
Amazon EventBridge for Blueprints and C++

Send game events into the AWS event bus, route them with rules and targets, archive and replay them, and run one-off, rate and cron schedules with EventBridge Scheduler, all with Amazon Cognito credentials and built on the official AWS SDK for C++.

v1.0
UE 4.27 & 5.8
Win64, Linux & Android
79 Blueprint nodes
Category Networking
Alpha XP

Overview

BridgeBus connects Unreal Engine 4.27 and 5.8 to Amazon EventBridge and EventBridge Scheduler. Your game publishes what happens — matches finished, purchases, achievements, telemetry — as events; EventBridge rules deliver them to Lambda functions, SQS queues, Step Functions, other buses or HTTP endpoints without the game knowing about any of them. Requests run on background worker threads with automatic retries; every result arrives on the game thread.

  • Put Event and Put Events (any number of entries, split at the 10-entry API limit, per-entry results).
  • BridgeBus Emitter component: queue events from gameplay, automatic batched flushing, retry of throttled events, stats.
  • Buses, rules and targets: list, describe, create and delete buses; put, enable, disable and delete rules; put, list and remove targets with input transformers, retry policies and dead-letter queues.
  • Archives and replays, including a latent Wait For Replay.
  • EventBridge Scheduler: one-off at(), rate() and cron() schedules with time zones, flexible windows, start/end dates and self-deleting one-off schedules; Schedule Event emits an event at a given time.
  • Pure helpers: event pattern builder, local pattern matcher, event envelope parser, ARN helpers, expression builders and validator, JSON helpers.

Requirements

RequirementDetails
Unreal Engine4.27 and 5.8
PlatformsWin64, Linux and Android
ModulesBridgeBus (Runtime), BridgeBusSdk (prebuilt AWS SDK for C++ 1.11.916 in Source/ThirdParty)
DependenciesNo other plugins. On Linux and Android the SDK uses the engine's libcurl, OpenSSL and certificate store.
AWSAn AWS account. EventBridge, Scheduler and Cognito usage is billed by AWS.

Installation

  1. Install BridgeBus from Fab into your engine, or copy the BridgeBus folder into your project's Plugins folder.
  2. Enable BridgeBus in Edit > Plugins and restart the editor.
  3. Open Project Settings > Plugins > BridgeBus and set Region, Identity Pool Id and Default Source.
  4. C++ only: add PublicDependencyModuleNames.Add("BridgeBus"); to your Build.cs.
Several AWS plugins in one projectEach Alpha XP cloud plugin carries its own copy of the SDK under a plugin-specific name, so they install side by side without conflicts.

Setting up AWS

  1. In Amazon Cognito create an identity pool (enable guest access if players publish before signing in).
  2. Optional: create a custom event bus such as mygame-prod in the EventBridge console and set it as Default Event Bus Name.
  3. Give the player role of the pool only what the game client needs — putting events with your own source:
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/mygame-prod",
    "Condition": { "StringEquals": { "events:source": "com.mygame" } }
  }]
}

If players create their own reminders with the scheduler, add a scoped scheduler statement (one schedule group per game) plus iam:PassRole on the scheduler execution role:

{
  "Effect": "Allow",
  "Action": ["scheduler:CreateSchedule", "scheduler:GetSchedule", "scheduler:DeleteSchedule"],
  "Resource": "arn:aws:scheduler:us-east-1:123456789012:schedule/mygame-reminders/*"
},
{
  "Effect": "Allow",
  "Action": "iam:PassRole",
  "Resource": "arn:aws:iam::123456789012:role/mygame-scheduler-role",
  "Condition": { "StringEquals": { "iam:PassedToService": "scheduler.amazonaws.com" } }
}

The scheduler execution role (Default Scheduler Role Arn) is trusted by scheduler.amazonaws.com and allowed to invoke its targets, for example events:PutEvents on your bus or lambda:InvokeFunction.

Admin nodesCreate / Delete Event Bus, Put / Enable / Disable / Delete Rule, Put / Remove Targets, Create / Delete Archive, Start / Cancel Replay and the schedule-group nodes need admin permissions (events:* on the resources, scheduler:*ScheduleGroup). Use them in live-ops tools, editor utilities and dedicated servers with Static Keys or the Default Credential Chain — never grant them to the player role. Read-only nodes (List / Describe) need the matching events:List* / events:Describe* permissions.
Never ship access keysStatic keys in the settings end up in DefaultGame.ini and in packaged games. Shipping builds refuse settings keys unless Allow Static Keys In Shipping is enabled.

Quick start

Publish an event

  1. Add Put Event to an Event Graph. Detail Type MatchFinished, Detail {"matchId":"42","winner":"blue"} (or build it with Struct To JSON).
  2. From On Success, read Result > Event Id. From On Failure, print Error > Message.
  3. In the EventBridge console create a rule on the bus with pattern {"source":["com.mygame"],"detail-type":["MatchFinished"]} and a Lambda target — or do the same from a tool with Make Event Pattern, Put Rule and Put Targets.

Telemetry with the emitter

  1. Add a BridgeBus Emitter component to your GameState. Set Default Detail Type Telemetry, Auto Flush Interval 5.
  2. Call Queue Event wherever something happens. The component sends batches in the background; bind On Failed to log lost events.

A timed event

  1. Set Default Scheduler Role Arn in the settings.
  2. Call Schedule Event with Fire Time = tomorrow 18:00 UTC, Event Bus Arn = Make Event Bus Arn, Detail Type TournamentStart. The schedule emits the event at that time and deletes itself.

Node reference

All 79 nodes, grouped by Blueprint category. Latent nodes run in the background, fire exactly one final pin on the game thread and can be stopped with Cancel. Nodes marked (admin) need admin IAM permissions.

Config and identity

NodeKindInputsOutputsPurpose
Set RegionCallableRegion-Switches the AWS region for every following request.
Set Credential ModeCallableMode-Overrides the credential mode from the settings.
Set Login TokenCallableProvider, Token-Signs the player in to the identity pool with a provider token.
Clear Login TokensCallable--Forgets all tokens; the player becomes a guest.
Set Static CredentialsCallableAccess Key Id, Secret Access Key, Session Token-Uses these keys from now on (Static Keys mode).
Get Identity IdPure-Identity IdThe player's Cognito identity id (empty until resolved).
Make User Pool Provider NamePureRegion, User Pool IdProviderLogin key of a Cognito user pool.
Is ConfiguredPure-bool, ProblemFalse plus a reason when the settings are incomplete.
Set Event DefaultsCallableEvent Bus Name, Source-Runtime override of the default bus and source.
Set Scheduler DefaultsCallableGroup Name, Role Arn, Timezone-Runtime override of the scheduler defaults.
Resolve IdentityLatentForce RefreshOn Success / On Failure (Identity Id, Error)Fetches Cognito credentials now so errors show up early.
CancelCallable(latent node)-None of the node's pins fire any more.
Is FinishedPure(latent node)boolTrue after the node finished or was cancelled.

Events

NodeKindInputsOutputsPurpose
Put EventLatentDetail Type, Detail, Source, Event Bus Name, Resources, TimeOn Success / On Failure (Result, Error)Puts one event on a bus.
Put EventsLatentEntriesOn Completed (Results, Failed Count)Puts many events, 10 per request; one result per entry, in order.
Test Event PatternLatentEvent Pattern, Event JsonOn Success / On Failure (Matches, Error)Asks EventBridge whether a full event matches a pattern.
Make Event EntryPureDetail Type, Detail, Source, Event Bus Name, Resources, TimeEntryBuilds an entry for Put Events or the emitter.
Make Event PatternPureSources, Detail Types, Resources, Accounts, RegionsPattern JSONBuilds an event pattern from value lists.
Add Pattern Prefix FilterPureEvent Pattern, Field Path, PrefixPattern JSONAdds a {"prefix": ...} filter on a dotted field path.
Add Pattern Value FilterPureEvent Pattern, Field Path, Values, Values As JsonPattern JSONAdds exact-match values on a field path (strings, or numbers/booleans).
Event Pattern MatchesPureEvent Pattern, Event JsonboolLocal pattern check without a network call.
Parse EventPureEvent Jsonbool, EventParses an EventBridge envelope (id, source, detail-type, time, detail ...).
Make Event Bus ArnPureAccount Id, Event Bus Name, RegionArnBuilds arn:aws:events:<region>:<account>:event-bus/<name>.
Parse ArnPureArnbool, Partition, Service, Region, Account Id, ResourceSplits any ARN into its parts.

Buses

NodeKindInputsOutputsPurpose
List Event BusesLatentName Prefix, Next Token, LimitOn Success / On Failure (Page, Error)Lists the account's buses, paged.
Describe Event BusLatentEvent Bus NameOn Success / On Failure (Bus, Error)ARN, description, policy, dead-letter queue of a bus.
Create Event Bus (admin)LatentEvent Bus Name, Description, Dead Letter ArnOn Success / On Failure (Bus, Error)Creates a custom bus.
Delete Event Bus (admin)LatentEvent Bus NameOn Success / On Failure (Error)Deletes a custom bus.

Rules and targets

NodeKindInputsOutputsPurpose
List RulesLatentEvent Bus Name, Name Prefix, Next Token, LimitOn Success / On Failure (Page, Error)Lists the rules of a bus.
Describe RuleLatentRule Name, Event Bus NameOn Success / On Failure (Rule, Error)Pattern / schedule, state, role, creator of a rule.
Put Rule (admin)LatentRule Name, Event Bus Name, Event Pattern, Schedule Expression, Description, Role Arn, StateOn Success / On Failure (Rule Arn, Error)Creates or updates a rule.
Enable Rule (admin)LatentRule Name, Event Bus NameOn Success / On Failure (Error)Turns a rule on.
Disable Rule (admin)LatentRule Name, Event Bus NameOn Success / On Failure (Error)Turns a rule off without deleting it.
Delete Rule (admin)LatentRule Name, Event Bus Name, ForceOn Success / On Failure (Error)Deletes a rule (remove its targets first).
List Targets By RuleLatentRule Name, Event Bus Name, Next Token, LimitOn Success / On Failure (Page, Error)What a rule invokes.
Put Targets (admin)LatentRule Name, Targets, Event Bus NameOn Success / On Failure (Result, Error)Adds or updates targets; Result lists rejected ones.
Remove Targets (admin)LatentRule Name, Target Ids, Event Bus Name, ForceOn Success / On Failure (Result, Error)Removes targets by id.
List Rule Names By TargetLatentTarget Arn, Event Bus Name, Next Token, LimitOn Success / On Failure (Page, Error)Which rules invoke a target ARN.
Make Rule TargetPureId, Arn, Role Arn, Input, Input Path, Dead Letter Arn, Max Retry Attempts, Max Event Age SecondsTargetBuilds a rule target.
Set Target Input TransformerPureTarget, Paths, TemplateTargetAdds an input transformer (placeholders from JSONPaths).

Archives and replays

NodeKindInputsOutputsPurpose
Create Archive (admin)LatentArchive Name, Event Source Arn, Description, Event Pattern, Retention DaysOn Success / On Failure (Archive, Error)Records the events of a bus for later replay.
List ArchivesLatentName Prefix, Event Source Arn, Next Token, LimitOn Success / On Failure (Page, Error)Lists archives.
Describe ArchiveLatentArchive NameOn Success / On Failure (Archive, Error)State, event count, size, retention, pattern.
Delete Archive (admin)LatentArchive NameOn Success / On Failure (Error)Deletes an archive.
Start Replay (admin)LatentReplay Name, Archive Arn, Destination Bus Arn, Event Start Time, Event End Time, Filter Rule Arns, DescriptionOn Success / On Failure (Replay, Error)Replays archived events of a time range onto a bus.
Describe ReplayLatentReplay NameOn Success / On Failure (Replay, Error)State and progress of a replay.
Cancel Replay (admin)LatentReplay NameOn Success / On Failure (Replay, Error)Stops a running replay.
List ReplaysLatentName Prefix, Event Source Arn, Next Token, LimitOn Success / On Failure (Page, Error)Lists replays.
Wait For ReplayLatentReplay Name, Poll Interval Seconds, Timeout SecondsOn Progress, On Completed / On Failure (Replay, Error)Polls a replay until Completed, Cancelled or Failed.

Schedules

NodeKindInputsOutputsPurpose
Create ScheduleLatentSchedule Name, Schedule Expression, Target, OptionsOn Success / On Failure (Schedule Arn, Error)Creates an at / rate / cron schedule.
Schedule EventLatentSchedule Name, Fire Time, Event Bus Arn, Detail Type, Detail, Source, OptionsOn Success / On Failure (Schedule Arn, Error)One-off, self-deleting schedule that emits an event at Fire Time (UTC).
Get ScheduleLatentSchedule Name, Group NameOn Success / On Failure (Schedule, Error)Reads every field of a schedule.
Update ScheduleLatentSchedule Name, Schedule Expression, Target, OptionsOn Success / On Failure (Schedule Arn, Error)Replaces a schedule's settings.
Delete ScheduleLatentSchedule Name, Group NameOn Success / On Failure (Error)Deletes a schedule.
List SchedulesLatentGroup Name, Name Prefix, Next Token, Enabled Only, Disabled Only, LimitOn Success / On Failure (Page, Error)Lists schedules (summaries).
Create Schedule Group (admin)LatentGroup NameOn Success / On Failure (Group Arn, Error)Creates a group for schedules.
Get Schedule GroupLatentGroup NameOn Success / On Failure (Group, Error)ARN and state of a group.
Delete Schedule Group (admin)LatentGroup NameOn Success / On Failure (Error)Deletes a group and all its schedules.
List Schedule GroupsLatentName Prefix, Next Token, LimitOn Success / On Failure (Page, Error)Lists groups.
Make At ExpressionPureTimeExpressionat(yyyy-mm-ddThh:mm:ss).
Make Rate ExpressionPureValue, UnitExpressionrate(5 minutes), rate(1 day) ...
Make Cron ExpressionPureMinutes, Hours, Day Of Month, Month, Day Of Week, YearExpressioncron(...) from six fields.
Validate Schedule ExpressionPureSchedule Expressionbool, ProblemLocal syntax check with an explanation.
Make Schedule TargetPureArn, Role Arn, Input, Dead Letter Arn, Max Retry Attempts, Max Event Age SecondsTargetTarget for any AWS resource or universal target.
Make Event Bus Schedule TargetPureEvent Bus Arn, Detail Type, Detail, Source, Role ArnTargetTarget that puts an event on a bus.

Emitter (BridgeBus Emitter component)

NodeKindInputsOutputsPurpose
Queue EventCallableDetail Type, Detail, ResourcesboolQueues one event with the component defaults.
Queue EventsCallableEntriesCountQueues prepared entries.
FlushCallable-boolSends the queue now.
ClearCallable-Dropped countDrops the queue.
Get Pending CountPure-intEvents waiting.
Is FlushingPure-boolA flush request is in flight.
Set Auto FlushCallableInterval Seconds, Batch Size-Changes automatic flushing.
Set Emitter DefaultsCallableSource, Detail Type, Event Bus Name-Defaults for events queued from now on.
Get StatsPure-StatsQueued / sent / failed / dropped totals, flush count, last flush time.
Set PausedCallablePause-Stops queueing and flushing (telemetry opt-out).
Is PausedPure-boolTrue while paused.

JSON

NodeKindInputsOutputsPurpose
Struct To JSONCallableStruct (any)bool, JsonAny struct to a JSON object (use it as event Detail).
JSON To StructCallableJsonbool, Out StructFills a struct from JSON.
Get JSON FieldPureJson, Pathbool, ValueReads one value, path like detail.player.stats[2].score.

Emitter component

BridgeBus Emitter keeps a queue of events and sends it when Auto Flush Interval elapses, when Max Batch Size events are waiting, or on Flush. One flush is in flight at a time (up to 100 events, sent 10 per request). Events rejected with a retryable error (throttling, internal failure, network) go back into the queue when Requeue Retryable is on; others are reported on On Failed. When the queue is full (Max Pending), the oldest events are dropped. With Flush On End Play the remaining events are sent when the actor ends play. Stamp Queue Time keeps the real event time even when batches are sent later.

Event patterns

Make Event Pattern (Sources = [com.mygame], Detail Types = [Purchase])
  -> Add Pattern Prefix Filter (Field Path = detail.sku, Prefix = "gem_")
  -> {"source":["com.mygame"],"detail-type":["Purchase"],"detail":{"sku":[{"prefix":"gem_"}]}}

Event Pattern Matches evaluates exact values, prefix, suffix, equals-ignore-case, exists, anything-but (values or prefix) and numeric ranges, on nested fields and array values. It is meant for client-side routing and tests; Test Event Pattern asks the service for the authoritative answer (it needs a complete event with id, account, time, region, source, detail-type and resources).

Schedule expressions

ExpressionMeaning
at(2026-12-24T18:00:00)Once, at that time in the schedule's time zone (Schedule Event always uses UTC).
rate(30 minutes)Every 30 minutes (singular unit for 1: rate(1 hour)).
cron(0 9 ? * MON-FRI *)09:00 on weekdays. Exactly one of day-of-month / day-of-week is ?.

Options: time zone (IANA name), state, flexible window (the scheduler may fire up to N minutes late to spread load), start and end dates for recurring schedules, and Action After Completion = Delete for one-off schedules.

Credentials

ModeUse forHow
Cognito Identity PoolGame clientsGuests get unauthenticated credentials; after Set Login Token the player gets the authenticated role. Credentials refresh automatically.
Static KeysDevelopment, dedicated servers, live-ops toolsSettings keys or Set Static Credentials.
Default Credential ChainServers and toolsEnvironment variables, ~/.aws profile, ECS and EC2 roles.

C++ API

// Build.cs: PublicDependencyModuleNames.Add("BridgeBus");
#include "BridgeBusLibrary.h"

TArray<FBridgeBusEventEntry> Entries;
Entries.Add(UBridgeBusLibrary::MakeEventEntry(TEXT("MatchFinished"), TEXT("{\"matchId\":\"42\"}"),
    FString(), FString(), TArray<FString>(), FDateTime(0)));
UBridgeBusLibrary::PutEventsNative(Entries, FBridgeBusNativeDelegate::CreateLambda(
    [](const TArray<FBridgeBusPutResult>& Results, int32 FailedCount)
    {
        // runs on the game thread
    }));

All latent node classes (UBridgeBusPutEventAction and the others) can be created from C++ through their static factory functions; bind the delegates, then call Activate().

Types

TypeKindMembers
FBridgeBusEventEntryStructSource, Detail Type, Detail, Event Bus Name, Resources, Time, Trace Header
FBridgeBusPutResultStructIndex, Success, Event Id, Error Code, Error Message
FBridgeBusEventStructId, Version, Source, Detail Type, Detail, Time, Region, Account, Resources, Replay Name
FBridgeBusEventBusInfo / PageStructName, Arn, Description, Policy, Dead Letter Arn, Creation / Last Modified Time; Buses, Next Token
FBridgeBusRuleInfo / PageStructName, Arn, Event Bus Name, Event Pattern, Schedule Expression, State, Description, Role Arn, Managed By, Created By
FBridgeBusTarget / PageStructId, Arn, Role Arn, Input, Input Path, Input Paths Map, Input Template, Dead Letter Arn, Max Retry Attempts, Max Event Age Seconds, Sqs Message Group Id
FBridgeBusTargetsResult / FBridgeBusTargetErrorStructFailed Entries (Target Id, Error Code, Error Message), Failed Entry Count
FBridgeBusNamePageStructNames, Next Token
FBridgeBusArchiveInfo / PageStructName, Arn, Event Source Arn, Description, Event Pattern, State, State Reason, Retention Days, Event Count, Size Bytes, Creation Time
FBridgeBusReplayInfo / PageStructName, Arn, Event Source Arn, Description, State, State Reason, Event Start / End / Last Replayed Time, Replay Start / End Time, Destination Arn, Filter Arns
FBridgeBusScheduleTargetStructArn, Role Arn, Input, Event Bridge Source / Detail Type, Sqs Message Group Id, Dead Letter Arn, Max Retry Attempts, Max Event Age Seconds
FBridgeBusScheduleOptionsStructDescription, Group Name, Timezone, State, Flexible Window Mode / Minutes, Start Date, End Date, Action After Completion
FBridgeBusScheduleInfo / PageStructName, Arn, Group Name, Schedule Expression, Timezone, State, Description, Target, window, dates
FBridgeBusScheduleGroupInfo / PageStructName, Arn, State, Creation / Last Modification Date
FBridgeBusEmitterStatsStructQueued, Sent, Failed, Dropped totals, Flush Count, Last Flush Time
FBridgeBusErrorStructCode, Message, Http Status, Retryable
EnumsEnumEBridgeBusCredentialMode, EBridgeBusRuleState, EBridgeBusArchiveState, EBridgeBusReplayState, EBridgeBusRateUnit, EBridgeBusScheduleState, EBridgeBusFlexibleWindowMode, EBridgeBusActionAfterCompletion

Settings

Project Settings > Plugins > BridgeBus (saved to DefaultGame.ini). Changes apply to the next request.

SettingDefaultDescription
Regionus-east-1Region of your buses, schedules and identity pool.
Credential ModeCognito Identity PoolCognito Identity Pool, Static Keys or Default Credential Chain.
Identity Pool Id(empty)For example us-east-1:01234567-89ab-cdef-0123-456789abcdef.
Allow Guest AccessOnUnauthenticated identities before Set Login Token.
Access Key Id / Secret Access Key(empty)Static Keys mode - development and servers only.
Allow Static Keys In ShippingOffSettings keys are refused in Shipping builds unless enabled.
Endpoint Override(empty)Custom endpoint such as a local emulator.
Request Timeout Ms / Connect Timeout Ms30000 / 5000Time limits per request.
Max Retries3Automatic retries with exponential back-off.
Worker Threads4Background threads that run requests.
Verify SSL / Log Sdk WarningsOn / OnTLS verification; SDK warnings to LogBridgeBus.
Default Event Bus NamedefaultBus used when a node leaves Event Bus Name empty.
Default Sourcecom.mygameSource used when an event leaves Source empty.
Default Schedule GroupdefaultGroup used when a scheduler node leaves Group Name empty.
Default Scheduler Role Arn(empty)Role the scheduler assumes to invoke targets.
Default TimezoneUTCIANA time zone of schedule expressions.

Troubleshooting

Error codeCause and fix
NotConfiguredIdentity Pool Id or Default Scheduler Role Arn missing in Project Settings > Plugins > BridgeBus.
AccessDeniedExceptionThe role lacks the permission (for example events:PutEvents on the bus, or the source condition does not match). See Setting up AWS.
ResourceNotFoundExceptionWrong bus, rule, archive, replay or schedule name, or a different region.
ValidationExceptionInvalid schedule expression, time zone or role. Check with Validate Schedule Expression.
InvalidEventPatternExceptionThe pattern is not valid JSON or uses an unsupported filter.
PartialFailureSome events / targets were rejected: check each result's Error Code. Throttled events can simply be resent.
UnavailableThe SDK library could not be loaded or the engine is shutting down. See the Output Log (LogBridgeBus).

Credits

© 2026 Alpha XP — alphaxp.net · Support: support@alphaxp.net. Includes the AWS SDK for C++ and the AWS Common Runtime (Apache License 2.0). Built for Unreal Engine 4.27 and 5.8.