Skip to main content

Get Started

This solutions demonstrates how to configure Upbound control planes to power a streamlined, self-service platform for your engineering teams. Clone and tailor it to your needs to roll out an Internal Developer Platform (IDP). An IDP enables developers to spin up resources that are production-ready, policy-compliant, and governed by Upbound's control mechanisms and proven patterns.

This guide helps you deploy this solution.

Before you begin

This quickstart assumes a basic understanding of Crossplane, Backstage, and ArgoCD concepts. For more information, see their respective documentation pages:

Prerequisites

Before you start to deploy this solution, you need to have the following:

  • An Upbound Account and Organization created
  • AWS credentials stored at /Users/$USER/.aws/aws.json
  • A Unix-like system (macOS/Linux/WSL)
  • Docker Desktop
  • kubectl
  • Upbound CLI up
important

This solution involves deploying backing Kubernetes infrastructure for components of the platform. Only AWS EKS is currently implemented, but the same concepts demonstrated in the solution may be applied to Azure and GCP.

Clone this repository

Building out your Internal Developer Platform (IDP) with Upbound couldn't be easier with the starter kit. To get started, first fork the starter kit implementation found at https://github.com/upbound/solution-idp and clone it.

# Update the repository to your fork
git clone https://github.com/upbound/solution-idp.git
cd solution-idp

Install Task CLI

This project leverages Task for automating setup steps. Install it if you don't have it on your machine.

brew install go-task/tap/go-task

Login to Upbound

The first step in deployment is to authenticate your up CLI. Login with the following command:

up login

Select an Upbound Space for deployment

Select the Upbound Space to the control planes responsible for bootstrapping and managing the IDP. You can either choose a Cloud Space or self-hosted Upbound Space.

This command uses Upbound's AWS US East Cloud Space, but you can choose any other Cloud Space if you like:

up ctx $UPBOUND_ORGANIZATION/upbound-aws-us-east-1/default

Bootstrap your environment

Configure launch variables

Configure the variables defined in /state/solution-idp-non-prod/Taskfile.yaml:

vars:
AWS_CREDENTIALS_PATH:
UPBOUND_ORG:
UPBOUND_ORG_TEAM:
SPACE:
ROOT_GROUP_NAME: "solution-idp-non-prod"
ROOT_CTP_NAME: "bootstrap"
GIT_REPO:
GIT_REVISION: "main"

Here's an explanation for each variable above:

  • AWS_CREDENTIALS_PATH: Path to your AWS credentials used by the bootstrap control plane in a ProviderConfig
  • UPBOUND_ORG: Your Upbound Organization. You can find this by running up org list.
  • UPBOUND_ORG_TEAM: The Upbound organization team to house the robot accounts Backstage uses for authentication.
  • SPACE: Upbound Space that hosts the bootstrap and frontend control planes
  • ROOT_GROUP_NAME: Root Upbound group name to house bootstrap control plane. Default: solution-idp-non-prod
  • ROOT_CTP_NAME: Root control plane responsible for bootstrapping this solution. Default: boostrap
  • GIT_REPO: The Git repository URL of the forked starter kit
  • GIT_REVISION: target branch of GIT_REPO. Default: main

Execute the bootstrap

After you populate the variables, bootstrap your environment:

cd state/solution-idp-non-prod
task bootstrap-all

The bootstrap process takes 3 to 5 minutes. After the command finishes, go to your space and observe the two newly created control plane groups:

starterGroups

Next go to the bootstrap control plane in solution-idp-non-prod group and validate that the frontend composite resource (XR) shows synced and ready:

frontendCtp

Once the frontend XR is ready, go to the frontend control plane group:

controlplaneView

Then validate that all the XRs become synced and ready:

readyResources

Visit the development portal

Once everything gets fully provisioned, visit the development portal for your platform:

backstage

Clean up

To clean up the platform, delete the root Application from the bootstrap control plane, then delete all the XEnvironments from the bootstrap control plane.