Spin up a GoodData.CN deployment in the cloud in just a few minutes.
This deployment is for evaluation only – not production. It can be used as a source of inspiration for a production-level setup, but this project is not versioned and is not officially supported by GoodData in production.
Terraform provisions:
- Cloud network with public & private subnets across multiple zones
- Managed PostgreSQL for GoodData metadata
- Object storage for cache, data sources, and exports
- Managed Kubernetes cluster
- GoodData.CN
- Apache Pulsar (for messaging)
- Ingress controller
- Other cloud-specific prerequisites
- Install the following CLI utilities:
- Have your GoodData.CN license key handy (your GoodData contact can help you with this)
Note: If you want to skip the installation of all of the CLI utilities, a VS Code Dev Containers configuration is provided in this repo. Just install the extension into any compatible IDE and the repo will reopen with all utilities installed.
By default Terraform creates a new VPC. If your IT team has already provisioned a VPC for the PoC, you can deploy into it instead by setting three variables in aws/settings.tfvars:
existing_vpc_id = "vpc-0123456789abcdef0"
existing_private_subnet_ids = ["subnet-aaa", "subnet-bbb"]
existing_public_subnet_ids = ["subnet-ccc", "subnet-ddd"]Requirements:
- The VPC must have DNS hostnames and DNS support enabled.
- Provide at least 2 private and 2 public subnet IDs, spanning at least 2 availability zones.
- Private subnets are used for EKS nodes and RDS; public subnets are used for load balancers.
- Subnets must carry the following tags for the AWS Load Balancer Controller and EKS to discover them:
- Public subnets:
kubernetes.io/role/elb = 1andkubernetes.io/cluster/<deployment_name> = shared - Private subnets:
kubernetes.io/role/internal-elb = 1andkubernetes.io/cluster/<deployment_name> = shared
- Public subnets:
-
Clone the repo:
git clone https://github.com/gooddata/gooddata-cn-terraform.git -
Copy the sample variables file for your provider and customize it:
cp aws/settings.tfvars.example aws/settings.tfvars # or (for azure) cp azure/settings.tfvars.example azure/settings.tfvars # or (for local) cp local/settings.tfvars.example local/settings.tfvarsThe example file has good defaults but you may want to modify it based on your needs.
-
Choose your provider and
cdinto its directory:cd aws,cd azure, orcd local -
Authenticate to your cloud provider's CLI:
- For AWS:
aws login/aws sso login(or otherwise configure your AWS credentials) - For Azure:
az login - Azure note: Terraform's Kubernetes authentication uses
kubeloginwith your Azure CLI session.
- For AWS:
-
Initialize Terraform:
terraform init -
Review what Terraform will deploy:
terraform plan -var-file=settings.tfvars -
Run Terraform:
-
For cloud deployments:
terraform apply -var-file=settings.tfvars -
For local deployments, first create the cluster, then apply everything else:
terraform apply -target=null_resource.k3d_cluster -var-file=settings.tfvars terraform apply -var-file=settings.tfvars
-
-
Once everything has been deployed, configure kubectl:
../scripts/configure-kubectl.sh -
If you set
gdcn_orgs, Terraform already created the organizations. Otherwise, you can create those manually now. -
Configure authentication according to your needs:
- To use an external OIDC provider (recommended for anything beyond local testing), follow the Set Up Authentication guide.
- For quick testing with the default IdP (Dex), create one or more users by staying in the provider directory (
aws,azure, orlocal) and running../scripts/create-user.sh. If Terraform created the organization, the script will automatically read the admin credentials from the Secretgooddata-cn/gdcn-org-admin-<org_id>.
-
(Optional) If you enabled the observability stack (
enable_observability = true), create Grafana users by running../scripts/create-grafana-user.shfrom your provider directory. The script creates a Grafana user and optionally promotes them to admin. It automatically reads the Grafana admin credentials from the Kubernetes secret. -
Finally, open your GoodData.CN URL and log in.
- For cloud deployments: open
https://<gdcn_org_hostname>(exact address in Terraform output). - For local deployments: open
https://gooddata.localhost(you will see a browser warning because the certificate is self-signed).
- For cloud deployments: open
To upgrade GoodData.CN to the latest version, follow these steps:
-
Check for any updates to this repo and pull them.
-
Open
settings.tfvarsand change thehelm_gdcn_versionvariable to the latest value. -
Run Terraform:
terraform apply -var-file=settings.tfvars
To delete all resources associated with the GoodData POC, follow these steps:
- Run Terraform:
terraform destroy -var-file=settings.tfvars
Reach out to your GoodData contact and they'll point you in the right direction!