Unreal Horde¶
Unreal Engine Horde is a set of services supporting workflows Epic uses to develop Fortnite, Unreal Engine, and other titles. This module deploys the Unreal Engine Horde server on AWS Elastic Container Service using the image available from the Epic Games Github organization.. Unreal Engine Horde relies on a Redis cache and a MongoDB compatible database. This module provides these services by provisioning an Amazon Elasticache with Redis OSS Compatibility cluster and an Amazon DocumentDB cluster.
Check out this video from Unreal Fest 2024 to learn more about the Unreal Horde module:
Deployment Architecture¶
Prerequisites¶
Unreal Engine Horde is only available through the Epic Games Github organization's package registry or the Unreal Engine source code. In order to get access to this software you will need to join the Epic Games organization on Github and accept the Unreal Engine EULA.
Examples¶
For example configurations, please see the examples.
Requirements¶
Name | Version |
---|---|
terraform | >= 1.0 |
aws | 5.69.0 |
random | 3.6.3 |
Providers¶
Name | Version |
---|---|
aws | 5.69.0 |
random | 3.6.3 |
Modules¶
No modules.
Resources¶
Inputs¶
Name | Description | Type | Default | Required |
---|---|---|---|---|
admin_claim_type | The claim type for administrators. | string |
null |
no |
admin_claim_value | The claim value for administrators. | string |
null |
no |
agents | Configures autoscaling groups to be used as build agents by Unreal Engine Horde. | map(object({ |
{} |
no |
auth_method | The authentication method for the Horde server. | string |
"Anonymous" |
no |
certificate_arn | The TLS certificate ARN for the Unreal Horde load balancer. | string |
n/a | yes |
cluster_name | The name of the cluster to deploy the Unreal Horde into. Defaults to null and a cluster will be created. | string |
null |
no |
container_api_port | The container port for the Unreal Horde web server. | number |
5000 |
no |
container_cpu | The CPU allotment for the Unreal Horde container. | number |
1024 |
no |
container_grpc_port | The container port for the Unreal Horde GRPC channel. | number |
5002 |
no |
container_memory | The memory allotment for the Unreal Horde container. | number |
4096 |
no |
container_name | The name of the Unreal Horde container. | string |
"unreal-horde-container" |
no |
create_external_alb | Set this flag to true to create an external load balancer for Unreal Horde. | bool |
true |
no |
create_internal_alb | Set this flag to true to create an internal load balancer for Unreal Horde. | bool |
true |
no |
create_unreal_horde_default_policy | Optional creation of Unreal Horde default IAM Policy. Default is set to true. | bool |
true |
no |
create_unreal_horde_default_role | Optional creation of Unreal Horde default IAM Role. Default is set to true. | bool |
true |
no |
custom_unreal_horde_role | ARN of the custom IAM Role you wish to use with Unreal Horde. | string |
null |
no |
database_connection_string | The database connection string that Horde should use. | string |
null |
no |
debug | Set this flag to enable ECS execute permissions on the Unreal Horde container and force new service deployments on Terraform apply. | bool |
false |
no |
desired_container_count | The desired number of containers running Unreal Horde. | number |
1 |
no |
docdb_backup_retention_period | Number of days to retain backups for DocumentDB cluster. | number |
7 |
no |
docdb_instance_class | The instance class for the Horde DocumentDB cluster. | string |
"db.t4g.medium" |
no |
docdb_instance_count | The number of instances to provision for the Horde DocumentDB cluster. | number |
2 |
no |
docdb_master_password | Master password created for DocumentDB cluster. | string |
"mustbeeightchars" |
no |
docdb_master_username | Master username created for DocumentDB cluster. | string |
"horde" |
no |
docdb_preferred_backup_window | The preferred window for DocumentDB backups to be created. | string |
"07:00-09:00" |
no |
docdb_skip_final_snapshot | Flag for whether a final snapshot should be created when the cluster is destroyed. | bool |
true |
no |
docdb_storage_encrypted | Configure DocumentDB storage at rest. | bool |
true |
no |
elasticache_node_count | Number of cache nodes to provision in the Elasticache cluster. | number |
1 |
no |
elasticache_node_type | The type of nodes provisioned in the Elasticache cluster. | string |
"cache.t4g.micro" |
no |
elasticache_snapshot_retention_limit | The number of Elasticache snapshots to retain. | number |
5 |
no |
enable_new_agents_by_default | Set this flag to automatically enable new agents that enroll with the Horde Server. | bool |
false |
no |
enable_unreal_horde_alb_access_logs | Enables access logging for the Unreal Horde ALB. Defaults to true. | bool |
true |
no |
enable_unreal_horde_alb_deletion_protection | Enables deletion protection for the Unreal Horde ALB. Defaults to true. | bool |
false |
no |
environment | The current environment (e.g. Development, Staging, Production, etc.). This will tag ressources and set ASPNETCORE_ENVIRONMENT variable. | string |
"Development" |
no |
existing_security_groups | A list of existing security group IDs to attach to the Unreal Horde load balancer. | list(string) |
[] |
no |
fully_qualified_domain_name | The fully qualified domain name where your Unreal Engine Horde server will be available. This agents will use this to enroll. | string |
n/a | yes |
github_credentials_secret_arn | A secret containing the Github username and password with permissions to the EpicGames organization. | string |
n/a | yes |
name | The name attached to Unreal Engine Horde module resources. | string |
"unreal-horde" |
no |
oidc_audience | The audience used for validating externally issued tokens. | string |
null |
no |
oidc_authority | The authority for the OIDC authentication provider used. | string |
null |
no |
oidc_client_id | The client ID used for authenticating with the OIDC provider. | string |
null |
no |
oidc_client_secret | The client secret used for authenticating with the OIDC provider. | string |
null |
no |
oidc_signin_redirect | The sign-in redirect URL for the OIDC provider. | string |
null |
no |
project_prefix | The project prefix for this workload. This is appeneded to the beginning of most resource names. | string |
"cgd" |
no |
redis_connection_config | The redis connection configuration that Horde should use. | string |
null |
no |
tags | Tags to apply to resources. | map(any) |
{ |
no |
unreal_horde_alb_access_logs_bucket | ID of the S3 bucket for Unreal Horde ALB access log storage. If access logging is enabled and this is null the module creates a bucket. | string |
null |
no |
unreal_horde_alb_access_logs_prefix | Log prefix for Unreal Horde ALB access logs. If null the project prefix and module name are used. | string |
null |
no |
unreal_horde_cloudwatch_log_retention_in_days | The log retention in days of the cloudwatch log group for Unreal Horde. | string |
365 |
no |
unreal_horde_external_alb_subnets | A list of subnets to deploy the Unreal Horde load balancer into. Public subnets are recommended. | list(string) |
[] |
no |
unreal_horde_internal_alb_subnets | A list of subnets to deploy the Unreal Horde internal load balancer into. Private subnets are recommended. | list(string) |
[] |
no |
unreal_horde_service_subnets | A list of subnets to deploy the Unreal Horde service into. Private subnets are recommended. | list(string) |
n/a | yes |
vpc_id | The ID of the existing VPC you would like to deploy Unreal Horde into. | string |
n/a | yes |
Outputs¶
Name | Description |
---|---|
agent_security_group_id | n/a |
external_alb_dns_name | n/a |
external_alb_sg_id | n/a |
external_alb_zone_id | n/a |
internal_alb_dns_name | n/a |
internal_alb_sg_id | n/a |
internal_alb_zone_id | n/a |
service_security_group_id | n/a |