Crossplay Integration Kit

AWS GameLift

Complete GameLift service API and provider-neutral hosting and FlexMatch

AWS GameLift

AWSIKGameLift wraps all 120 operations in the pinned AWS SDK for C++ 1.11.878. Every operation has a C++/Blueprint async action, a typed request and result, generated nested model types, validation, cancellation-safe lifetime handling, and normalized errors. The Win64 service library is packaged independently from AWS Core and the GameLift Servers SDK.

The raw API and unified providers are separate surfaces:

  • Use Blueprint nodes under AWS Integration Kit|GameLift|... for provider-specific GameLift, FleetIQ, FlexMatch, fleet, container, Anywhere, build, alias, and session workflows.
  • Use IUCIKHostingProvider and IIMIK_MatchmakingProvider when gameplay should switch between GameLift, Edgegap, or another provider without rewiring.

SDK coverage

Source/AWSIKGameLift/GameLiftCoverage.json is the generated coverage manifest. Scripts/awsik-sdk/validate_gamelift_coverage.py compares it with both GameLiftClient.h and the pinned AWS service model. The check fails if an SDK upgrade adds an operation without a wrapper or if generated declarations drift.

All 27 token-paginated operations expose bRetrieveAllPages. Leave it disabled to receive one page and its NextToken, or enable it to aggregate every page. Repeated tokens fail instead of looping forever.

AWS optional fields have adjacent bSet... properties. A value is sent only when its presence flag is enabled, preserving the difference between omitted, empty, zero, and false. The 526-value EC2InstanceType model is represented as a string because Unreal Blueprint enums cannot losslessly contain that many entries.

Configuration and credentials

Common region, endpoint, proxy, retry, timeout, logging, and credential-chain settings remain in AWS Integration Kit. AWS GameLift settings contain only GameLift provider defaults:

  • fleet ID, alias ID, queue name, location, and maximum players for hosting;
  • FlexMatch configuration, default team, and optional matchmaking region override;
  • registration switches for the hosting and FlexMatch providers, read once at startup so they need an editor restart.

Do not ship long-lived IAM access keys in a game client. Fleet administration, builds, queues, aliases, scaling, container management, and most control-plane operations are classified trusted-backend in the coverage manifest. The small player-facing set is classified separately, but still requires a correctly scoped temporary credential source such as Cognito. Dedicated servers should use workload credentials or an IAM role.

Unified hosting

The GameLift hosting provider supports direct CreateGameSession and queue-backed StartGameSessionPlacement through one interface. A configured queue takes precedence; omit it to use exactly one fleet or alias. The provider supports polling, termination, session search, region enumeration, UDP latency beacons, player reservations, and PlayerSessionId join tokens.

Provider-specific overrides use namespaced FUCIK_ServerRequest::Metadata keys:

KeyMeaning
aws.gamelift.fleet_idFleet ID or ARN for direct placement
aws.gamelift.alias_idAlias ID or ARN for direct placement
aws.gamelift.queue_nameGame session queue name or ARN
aws.gamelift.locationGameLift location
aws.gamelift.session_nameGame session name
aws.gamelift.session_dataOpaque game session data

Queue placement handles can be passed directly to the unified Request Player Slots node; after fulfillment the adapter resolves the produced game session and creates player sessions. Each returned FUCIK_ConnectInfo::Token is the corresponding PlayerSessionId.

FlexMatch

The GameLift matchmaking provider implements ticket creation, describe, cancellation, acceptance, start backfill, and cancel backfill. MIK attributes and latency hints map to GameLift player attributes and per-region latency maps.

Set Matchmaking Region Override when FlexMatch is unavailable in the AWS Core region. AWSIK then keeps hosting calls on the core-region client and routes every raw and unified FlexMatch call through a second regional client. A FlexMatch configuration in that region can target a game session queue ARN from the hosting region.

Managed FlexMatch allocation returns bServerProvidedByService = true with portable connection information. Standalone FlexMatch returns bServerProvidedByService = false and a server request hint, allowing MIK to select GameLift hosting, Edgegap, or another host independently. Managed matches preserve every per-player session token under aws.gamelift.player_session.<player-id> metadata while exposing the first token through the portable connection field.

Use aws.gamelift.matchmaking_configuration and aws.gamelift.game_session_arn metadata to override the configured FlexMatch values.

GameLift Servers SDK

AWSIKGameLiftServers packages Amazon GameLift Servers C++ Server SDK 5.6.0 separately from the GameLift control-plane SDK. It is available only to Editor and dedicated Server targets on Win64, Linux x64, and Linux ARM64. Player-client and ordinary Game targets cannot link or stage either server module.

Get UAWSIKGameLiftServersSubsystem from the game instance. Its Blueprint functions under AWS Integration Kit|GameLift Servers|... cover all 19 public SDK actions, including both managed-fleet and Anywhere initialization, metrics, custom logging, process readiness, activation, player-session acceptance/removal, session queries, FlexMatch backfill, compute certificates, fleet-role credentials, container network information, ending, and destruction. Source/AWSIKGameLiftServers/GameLiftServersCoverage.json and Scripts/awsik-sdk/validate_gamelift_servers_coverage.py fail when the pinned SDK and wrapper surface drift.

The normal managed-fleet lifecycle is:

  1. Optionally call InitMetrics and InitCustomLogger.
  2. Call InitSdk for managed EC2, or InitSdkForAnywhere with a short-lived compute authentication token. The AWS access-key initialization overload remains available to trusted C++ server bootstrap code for complete SDK coverage, but access keys are deliberately absent from Blueprint pins.
  3. Bind OnStartGameSession, OnUpdateGameSession, and OnProcessTerminate before calling ProcessReady.
  4. Load the assigned map and session configuration in OnStartGameSession, then call ActivateGameSession when gameplay can accept players.
  5. Call AcceptPlayerSession after validating a connecting player's PlayerSessionId; call RemovePlayerSession when that player leaves.
  6. On termination, stop accepting players, persist required state, call ProcessEnding, and exit. Unreal shutdown invokes the idempotent ProcessEnding/Destroy fallback if gameplay did not.

SDK callbacks may originate on SDK threads. The integration copies their data and dispatches every Blueprint event on the game thread. Health checks never touch a UObject: SetHealthy updates the atomic value returned synchronously to the SDK. ProcessEnding and Destroy are guarded so repeated Blueprint, subsystem, and module shutdown paths still execute each native teardown action at most once.

OnSdkLog receives raw SDK text and is opt-in through InitCustomLogger; do not forward it to public telemetry without applying your own data policy. Fleet-role credential results are intentionally lossless so trusted server code can use them, but must never be printed or replicated.

The server SDK participates in the same GameLift deployment selected through IUCIKHostingProvider and the same FlexMatch workflow selected through IIMIK_MatchmakingProvider. It does not register another hosting or matchmaking provider: the control-plane adapter allocates the server, while this server-only module implements the process running inside that allocation.

Platform boundary

The GameLift control-plane service module currently packages Win64. Its other native service packages remain separate deliverables. GameLift Servers is independently pinned and source-packaged for Win64, Linux x64, and Linux ARM64 because its release cadence, lifecycle, and target boundary differ from the service SDK.

On this page