Skip to content

Union.ai Dataplane -- Amazon EKS Blueprints Addon

Union.ai empowers AI development teams to rapidly ship high-quality code to production by offering optimized performance, resource efficiency, and workflow authoring experience. With Union.ai your team can:

  • Run complex AI workloads with performance, scale, and efficiency.
  • Scale out to multiple regions, clusters, and clouds as needed for resource availability, scale, or compliance.

Union.ai’s modular architecture allows for flexibility and control. The customer can decide how many clusters to have, their shape, and who has access to what. All communication is encrypted.

Union Self-managed Architecture

For more information, see Union.ai.

Deployment Process

1. Install uctl

On Mac:

brew tap unionai/homebrew-tap
brew install uctl

With cURL:

curl -sL https://raw.githubusercontent.com/unionai/uctl/main/install.sh | bash

2. Setup Union Credentials

Both the control plane URL and cluster name will be provided by Union. Union will also provide authentication information for your account to access the hosted control plane.

export UNION_CONTROL_PLANE_URL=<YOUR_UNION_CONTROL_PLANE_URL>
export UNION_CLUSTER_NAME=<YOUR_SELECTED_CLUSTER_NAME>

uctl config init --host=$UNION_CONTROL_PLANE_URL
uctl selfserve provision-dataplane-resources --clusterName $UNION_CLUSTER_NAME --provider aws

This command will output the ID, name, and secret used by Union services to communicate with the control plane.

3. Create Union Secrets in AWS Secrets Manager

export UNION_SECRET_NAME=union-secret
export UNION_CLIENT_ID_SECRET_VALUE=<CLUSTERAUTHCLIENTID_FROM_SELFSERVE_COMMAND>
export UNION_SECRET_SECRET_VALUE=<CLUSTERAUTHCLIENTSECRET_FROM_SELFSERVE_COMMAND>

aws secretsmanager create-secret --name $UNION_SECRET_NAME \
  --secret-string "{\"clientId\":\"$UNION_CLIENT_ID_SECRET_VALUE\",\"clientSecret\":\"$UNION_SECRET_SECRET_VALUE\"}"

4. Install Union Add-on

npm i @unionai/union-eks-blueprints-addon

5. Create Union Blueprint

#!/usr/bin/env node
import * as cdk from 'aws-cdk-lib';
import * as blueprints from "@aws-quickstart/eks-blueprints"
import * as union from "@unionai/union-eks-blueprints-addon"

const app = new cdk.App();

const account = process.env.CDK_DEFAULT_ACCOUNT;
const region = process.env.CDK_DEFAULT_REGION;
let props = { env: { account, region } };

const unionBlueprint = blueprints.AutomodeBuilder.builder({})

.resourceProvider('union-bucket', new blueprints.CreateS3BucketProvider({name: 'my-union-bucket-123', id: 'union-bucket'})) // If you have an already existing bucket see @ImportS3BucketProvider
.addOns(
  new blueprints.addons.MetricsServerAddOn(),
  new union.UnionDataplaneCRDsAddOn,
  new union.UnionDataplaneAddOn({
    s3BucketProviderName: 'union-bucket',
    clusterName: process.env.UNION_CLUSTER_NAME!,
    unionSecretName: process.env.UNION_SECRET_NAME!,
    host: process.env.UNION_CONTROL_PLANE_URL!,
    orgName: "<YOUR_ORG_NAME>"
  })
).build(app, "union-blueprint", props)

6. Deploy the Blueprint

For a quick tutorial on EKS Blueprints, visit the Getting Started guide.

7. Validation

Run the command:

kubectl get deploy -A

Output should be:

NAMESPACE     NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   blueprints-addon-metrics-server                       1/1     1            1           57d
kube-system   blueprints-addon-union-dataplane-kube-state-metrics   1/1     1            1           57d
unionai       executor                                              1/1     1            1           57d
unionai       flytepropeller                                        1/1     1            1           57d
unionai       flytepropeller-webhook                                1/1     1            1           57d
unionai       opencost                                              1/1     1            1           57d
unionai       prometheus-operator                                   1/1     1            1           57d
unionai       syncresources                                         1/1     1            1           57d
unionai       union-operator                                        1/1     1            1           57d
unionai       union-operator-proxy                                  1/1     1            1           57d

To validate the cluster has been successfully registered to the Union control plane run the command:

uctl get cluster

Output should be:

 ----------- ------- --------------- -----------
| NAME      | ORG   | STATE         | HEALTH    |
 ----------- ------- --------------- -----------
| <cluster> | <org> | STATE_ENABLED | HEALTHY   |
 ----------- ------- --------------- -----------
1 rows

8. Register and run example workflows

uctl register examples --project=union-health-monitoring --domain=development
uctl validate snacks --project=union-health-monitoring --domain=development
 ---------------------- ----------------------------------- ---------- -------------------------------- -------------- ----------- ---------------
| NAME                 | LAUNCH PLAN NAME                  | VERSION  | STARTED AT                     | ELAPSED TIME | RESULT    | ERROR MESSAGE |
 ---------------------- ----------------------------------- ---------- -------------------------------- -------------- ----------- ---------------
| alskkhcd6wx5m6cqjlwm | basics.hello_world.hello_world_wf | v0.3.341 | 2025-05-09T18:30:02.968183352Z | 4.452440953s | SUCCEEDED |               |
 ---------------------- ----------------------------------- ---------- -------------------------------- -------------- ----------- ---------------
1 rows

Deploy from Pattern

To deploy an already existing sample pattern for Union.ai, please see the Union.ai pattern in the CDK EKS Blueprints Patterns Repository.