Settings
Every field on the stack form, and how to change one after install.
Every setting is a field on the stack. This page uses each field's name, as shown on the stack's Parameters tab; the form shows a plain label beside it. To change one, select the stack in CloudFormation, choose Update, keep Use current template, change the field and submit.
Every update reruns the installer: it snapshots the database, then restarts the web app and the MCP endpoint, even for a small settings change. Plan changes for a quiet time.
Hostnames and certificates
| Field | Default | What it does |
|---|---|---|
| AppHost | required | The web app's hostname |
| McpHost | empty | The MCP endpoint's hostname. Empty means no MCP endpoint |
| TlsMode | LetsEncrypt | LetsEncrypt for automatic certificates, or AcmCertificate for your own |
| AcmeEmail / AcmCertificateArn | empty | Whichever TlsMode needs |
Sign-in and LLM
| Field | What it does |
|---|---|
| SignInClientId, SignInDomain, SignInApiKey, SignInWebhookSecret | Your sign-in connection, from the eode portal |
| LlmApiKey | Your Anthropic API key. Change it here to rotate it |
Network
| Field | Default | What it does |
|---|---|---|
| VpcMode | CreateNew | UseExisting installs into your VPC (ExistingVpcId, ExistingVpcCidr, ExistingPrivateSubnetIds) |
| VpcCidr, AzCount, NatGateways | 10.40.0.0/16, 2, Single | The shape of a new VPC. With an existing VPC, AzCount must equal the number of subnets |
| ClusterPublicEndpoint, ClusterPublicEndpointCidrs | false | Whether the cluster's API is reachable from outside the VPC, and from where |
| DataConnectionDenyCidrs | the VPC | Internal ranges a user's data connection may never reach |
Capacity
| Field | Default | What it does |
|---|---|---|
| GeneralInstanceType × GeneralNodeCount | m6i.xlarge × 2 | Nodes for the web app and MCP endpoint |
| EngineInstanceType, EngineNodeCount, EngineNodeMax | r6i.2xlarge, 1, 3 | Nodes for the optimization engines. Each active user's engine needs about half a CPU |
| EngineMemoryClasses | 12Gi,24Gi,48Gi | The engine sizes eode may use. Each must fit on EngineInstanceType |
| AppReplicas | 2 | Copies of the web app |
| DbInstanceClass, DbStorageGiB, DbMultiAz, DbBackupDays | db.r6g.large, 100, true, 14 | The PostgreSQL database |
| RedisNodeType | cache.r6g.large | The Redis cache |
| KubernetesVersion | 1.34 | The EKS version |
Security and operations
| Field | Default | What it does |
|---|---|---|
| KmsKeyArn | empty | Your KMS key for the cluster's secrets, the database, cache, file storage and Secrets Manager |
| AdminPrincipalArn | empty | An IAM role or user to make a cluster administrator |
| TelemetryEndpoint | empty | Your OpenTelemetry collector. Empty means no telemetry |
| RestartToken | empty | Change it to any new value to restart eode, for example after rotating a secret |
Release, ArtifactAccount, ArtifactRegion and TemplateBaseUrl are set by the release. Change Release only to upgrade (Upgrades), and leave the other three as they are.
Secrets
The stack keeps every secret in AWS Secrets Manager under eode/, generates the ones nobody needs to know (database
and cache passwords, encryption keys), and never puts a secret in a template or a log. To rotate a generated
secret, put a new value in Secrets Manager and change RestartToken. Don't rotate eode/data-connections: saved
data-connection credentials can't be read after it changes.
Every secret, its format and who can read it: Reference: Secrets.