yugabyte/yugabytedb-skills/yba-terraform
Claude Code and agent skill by yugabyte/yugabytedb-skills
- community
Checking that the SKILL.md file is still in the repository.
Use when writing, generating, or troubleshooting Terraform that drives YugabyteDB Anywhere (YBA) via the `yugabyte/yba` provider — installing YBA on a VM, registering the first customer, and creating cloud (AWS/GCP/Azure) or on-prem providers, storage configs, universes, backups, schedules, and restores. Also covers the upstream cloud Terraform (IAM user / service account / service principal) that grants YBA its node-deployment permissions, and the CLI commands to discover the VPC/subnet/security-group network info those manifests need. Triggers on `yba_installer`, `yba_customer_resource`, `yba_aws_provider`/`yba_gcp_provider`/`yba_azure_provider`, `yba_universe`, `yba_backup`, `source = "yugabyte/yba"`, or any mention of the YBA Terraform provider. Does NOT cover the YBA REST API directly (use the yba-api skill) or YugabyteDB Aeon.
Install
npx vskill@latest install yugabyte/yugabytedb-skills/yba-terraformSKILL.md
YugabyteDB Anywhere (YBA) Terraform Provider
This skill generates correct Terraform for the `yugabyte/yba` provider — the official provider that installs and drives a self-managed YugabyteDB Anywhere control plane.
- Registry: <https://registry.terraform.io/providers/yugabyte/yba/latest/docs>
- Source: <https://github.com/yugabyte/terraform-provider-yba> (branch
main) - Current version:
1.0.0(Early Access). Requires YBA stable>= 2024.2.0.0or preview>= 2.23.1.0. Kubernetes universes are not supported by this provider — for those use theyb-k8s-operatorskill.
It is not about:
- The YBA REST API directly — use the
yba-apiskill (this provider calls that API for you). - YugabyteDB Aeon (managed DBaaS) or YSQL/YCQL database access.
Reference files (read before generating non-trivial manifests)
references/prereqs-and-network.md— YBA host VM requirements (CPU/RAM/disk/OS/Python/ports), DB-node requirements, and the aws/gcloud/az CLI commands to discover VPC IDs, subnets-per-zone, security groups, and regions. Read this first when sizing a VM or filling in network IDs.references/cloud-iam-setup.md— Terraform (using theaws/google/azurermproviders, not the yba provider) that creates the IAM user / service account / service principal YBA uses to deploy nodes, with the exact delegated permissions from the Yugabyte docs. Read this when the user needs to grant YBA cloud access.references/install-bootstrap.md— theyba_installerandyba_customer_resourceresources and the two-provider (unauthenticated → authenticated) pattern. Read this when installing YBA or wiring up the API token.references/providers-universe.md— full HCL foryba_aws_provider/yba_gcp_provider/yba_azure_provider/yba_onprem_provider, the four storage-config resources,yba_universe, andyba_backup/yba_backup_schedule/yba_restore. Read this when generating any provider, universe, or backup resource.
The end-to-end workflow
A complete "from nothing to a running universe with backups" deployment is two Terraform stages because the API token does not exist until YBA is installed and the customer is registered.
Run Stage 1 and Stage 2 as separate applys (or separate root modules / -target), because the api_token produced by yba_customer_resource must be known before the authenticated provider can be configured. Passing a provider api_token that is computed in the same apply is fragile — split the state.
Provider configuration (the two-provider pattern)
The provider block accepts exactly three arguments — all optional, all env-var backed:
| Argument | Env var (preferred → legacy) | Notes | |
|---|---|---|---|
host | YBA_HOST → YB_HOST | IP/DNS, optionally with :port. | |
api_token | YBA_API_TOKEN / YBA_API_KEY → YB_API_KEY | Customer API token. Omit for the unauthenticated provider. | |
enable_https | YBA_ENABLE_HTTPS → YB_ENABLE_HTTPS | `true` by default. Set false for HTTP-only YBA (then put the HTTP port in host). |
There is no `api_key` provider argument — YBA_API_KEY is only an env-var alias for api_token. With env vars set, the authenticated block can be empty (provider "yba" {}).
Resource cheat-sheet (use the per-cloud resources, not the deprecated generics)
| Purpose | Resource | Notes | |
|---|---|---|---|
| Install YBA on a VM | yba_installer | SSH-based; unauthenticated provider. | |
| Register first customer | yba_customer_resource | Outputs api_token, cuuid. destroy is a no-op. | |
| Cloud provider | yba_aws_provider, yba_gcp_provider, yba_azure_provider | Prefer these. yba_cloud_provider is deprecated (removed in v2.0.0). | |
| On-prem / VM provider | yba_onprem_provider + yba_onprem_node_instance | v1.0.0 has known on-prem issues — see reference file. | |
| Backup storage | yba_s3_storage_config, yba_gcs_storage_config, yba_azure_storage_config, yba_nfs_storage_config | yba_storage_config_resource is deprecated. | |
| Universe | yba_universe | References provider via provider, region_list, plus yba_provider_key + yba_release_version data sources. | |
| Backups | yba_backup (on-demand), yba_backup_schedule (cron/frequency) | yba_backups is deprecated → use yba_backup_schedule. | |
| Restore | yba_restore | Uses backup_storage_info { keyspace = ... } (singular). |
Useful data sources: yba_provider_key, yba_release_version, yba_universe_schema (keyspace/table discovery for backups), yba_storage_configs, yba_provider_regions, yba_backup_info.
Getting the network info a cloud provider needs
yba_aws_provider / yba_azure_provider need VPC/vnet IDs, subnet IDs per zone, and a security group; yba_gcp_provider needs the network and a regional subnet (GCP zones auto-discover). Before generating a provider manifest:
- Check memory / the conversation for already-known VPC, subnet, region, and project/subscription IDs.
- If unknown, run the discovery CLI commands in
references/prereqs-and-network.md(aws ec2 describe-subnets …,gcloud compute networks subnets list …,az network vnet subnet list …) and read the IDs from the output. - If the user has no cloud CLI configured and the info isn't in memory, ask the user for the region(s), VPC/vnet ID, subnet ID per availability zone, and security-group ID — list exactly what's missing rather than inventing placeholder IDs that will fail at apply.
Never invent real-looking IDs (vpc-0123…, subnet-…). Use clearly-templated placeholders (<aws-vpc-id>) only when explicitly producing a template the user will fill in.
Prerequisites (always state these when planning an install)
The YBA host VM (official minimums, from the Yugabyte docs):
- 4 vCPU, 8 GB RAM, x86_64 only (ARM is not supported for the YBA host).
- Disk: 215 GB minimum. Provision a 250 GB root volume (or a dedicated filesystem mounted at YBA's data dir, default `/opt/yugabyte/data`) to leave headroom — a too-small root volume is the most common install failure.
- A supported Linux OS (AlmaLinux 8/9, RHEL 8/9, Rocky 8/9, Oracle Linux 8, Ubuntu 20/22, Amazon Linux 2023, SLES 15 SP5). AlmaLinux 8 / RHEL 8 recommended for production.
- Python 3.10–3.12, with both
pythonandpython3resolving to Python 3. - A YBA license file from Yugabyte, and sudo access for the SSH user (YBA Installer also supports non-root mode).
Full host + DB-node requirements and the port list are in references/prereqs-and-network.md.
Anti-patterns
| Anti-pattern | Consequence | Do instead | |
|---|---|---|---|
Configuring the authenticated provider with an api_token computed in the same apply | Provider config can't depend on a not-yet-known value; flaky/failed apply | Split into Stage 1 (install + customer) and Stage 2 (everything else); pass the token between states/modules. | |
Using yba_cloud_provider / yba_storage_config_resource / yba_backups | Deprecated; removed in v2.0.0 | Use yba_aws_provider/…, the per-backend *_storage_config, and yba_backup_schedule. | |
Adding a nested zones {} block to yba_gcp_provider | Schema error — GCP has no per-zone block | GCP: regions { code, shared_subnet }; zones auto-discover. AWS/Azure use zones { code, subnet }. | |
Putting AMI IDs in region_overrides for GCP/Azure | Wrong field | AWS uses image_bundles.details.region_overrides (map); GCP/Azure use details.global_yb_image (string). Or use yba_managed_image_bundles. | |
| Hard-coding a 215 GB / smaller root volume | Install runs out of space mid-deploy | Provision 250 GB; YBA data lives in /opt/yugabyte/data. | |
Using keyspaces on yba_restore | Schema error | Restore uses repeatable backup_storage_info { keyspace = ... } (singular); backups/schedules use keyspaces (list). | |
device_info with storage_type = "GP3" but no disk_iops/throughput | Passes `validate`, fails `plan` — GP3 requires both (IO1/IO2 require disk_iops) | Set disk_iops and throughput for GP3 (baseline 3000 / 125). See the device_info table in providers-universe.md. | |
Trusting a clean terraform validate | The yba provider enforces many cross-field rules only at plan time | Always run terraform plan — validate checks schema shape, not the provider's conditional requirements. | |
| Granting YBA broad cloud admin | Over-privileged credentials | Apply the scoped policy/role in references/cloud-iam-setup.md (AWS JSON policy, GCP roles/compute.admin, Azure Network + VM Contributor). | |
Committing state with api_token/password in plaintext | Credential leak — token does not expire | Use an encrypted remote backend; mark vars sensitive. | |
Expecting terraform destroy to remove the customer | yba_customer_resource destroy is a no-op (no delete-customer API) | Understand it only drops from state; the YBA customer persists. |
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/yba-terraform/SKILL.md
Popularity
- Repository stars
- 8
- Repository forks
- 7
- 7-day trend score
- 16
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/yugabyte/yugabytedb-skills/yba-terraform)