This section explains how to deploy Cloud Native Qumulo (CNQ) on AWS by preparing your infrastructure, environment, and authentication; deploying and configuring your Qumulo cluster; mounting the Qumulo file system; and performing post-deployment actions such as adding and removing nodes
For an overview of CNQ on AWS, its prerequisites, and limits, see How Cloud Native Qumulo Works.
Prerequisites
This section explains the prerequisites to deploying CNQ on AWS.
Qumulo Core
-
Deployment Version: This deployment requires Qumulo Core 7.9.2 (or higher), which includes the required Ubuntu kernel and software upgrades and fixes.
Tip
To deploy the latest release, leave thecluster_versionvariable empty. -
Metrics: To allow your Qumulo cluster to report metrics to Qumulo, your AWS VPC must have outbound Internet connectivity through a NAT gateway or a firewall. Your cluster shares no file data during this process.
Important
Connectivity to the following endpoints is required to successfully deploy a Qumulo cluster and form a quorum:api.missionq.qumulo.comapi.nexus.qumulo.com
AWS
-
VPC: Configure your VPC to use the S3 gateway VPC endpoint, attached to the route table that serves your cluster subnet.
Important
It isn’t possible to complete deployment without this configuration. -
AWS Region: Your Region must have a sufficient EC2 On-Demand vCPU quota for your node count and for a temporary Provisioner instance.
Tip
Because a quota shortage can look identical to a capacity shortage, we recommend checking your service quotas before beginning deployment.
Tools and authentication
- Install the following tools:
- Terraform 1.11 (or higher)
- Git CLI
- AWS CLI
-
Authenticate to the AWS API
Important
Unless you use theAdministratorAccessmanaged IAM policy for your user or role, your custom IAM role or user must include the following AWS services:ec2:*elasticloadbalancing:*iam:*kms:*logs:*s3:*secretsmanager:*ssm:*sts:*
Working with the Qumulo-terraform-aws Repository
Existing clusters that used the previous deployment provisioning remain operational. For information about migrating your cluster to the new Terraform deployment method, see the Import Guide in the Qumulo Terraform Provider documentation.
The Qumulo-terraform-aws repository contains Terraform configurations that let you deploy S3 buckets and a CNQ cluster with 1 or 3–24 nodes that adhere to the AWS Well-Architected Framework and have fully elastic compute and capacity.
This deployment uses the Qumulo Terraform Provider, which greatly simplifies Terraform operations by ensuring that:
- Persistent storage and compute deploy together in a single Terraform workspace
- Node operations use a single variable and a single
terraform applycommand
Working With the terraform apply Command
This section explains the most common scenarios that cause the terraform apply command to fail.
| Symptom | Potential Resolution |
|---|---|
| The command waits for a long time for EC2 capacity | This is normal behavior. For more information, see Create the Necessary Resources. |
| The command fails early in the process with an S3 access error |
The cluster subnet has no S3 gateway VPC endpoint. Add a VPC endpoint and then associate it with the subnet's route table.
Note
It isn’t possible to use a NAT gateway in this scenario. |
| The command fails completely and removes the resources that it has created | This is expected cleanup behavior. To resolve the issue, inspect the Provisioner's logs, make any changes, and then run the terraform apply command again. |
If the
terraform apply command fails for a reason not listed in this section, contact the Qumulo Care Team and include the following items with your request:
- AWS Region
- Terraform version
Qumulo-terraform-awsrepository release version- Any relevant CloudWatch logs
Working with the Provisioner
The Provisioner is a temporary EC2 instance (m5.xlarge by default) that configures your Qumulo cluster. The Terraform Provider launches it during cluster creation, scaling, and node replacement operations, and stops it when an operation completes.
To monitor the Provisioner’s status, watch the Terraform operations in your terminal or inspect the Provisioner’s entries in your CloudWatch Logs, for your deployment’s AWS Region.
The logs remain available after the Provisioner terminates. To find the log group, filter for your deployment’s unique name or use the link in the Terraform command’s output.
Part 1: Deploying Your Qumulo Cluster
This section explains how to prepare the required files, configure your deployment, and create the resources necessary for your Qumulo cluster.
Step 1: Prepare the Required Files
During the following process, Terraform downloads the Qumulo Terraform Provider from Qumulo’s registry. Later, the Provider installs Qumulo Core on your cluster’s nodes.
-
To clone the
Qumulo-terraform-awsrepository and check out a specific release, run the following commands.git clone https://github.com/Qumulo/Qumulo-terraform-aws.git cd Qumulo-terraform-aws git checkout v7.0 -
To understand the deployment variables, review the
terraform.tfvars.exampleandREADMEfiles.
Step 2: Configure the Deployment
-
Edit the
backend.tffile, add the name of an S3 bucket for the Terraform state, and specify the Region for the deployment. For example:terraform { backend "s3" { bucket = "my-bucket-for-tf-state" key = "tf-state/cnq/terraform.tfstate" region = "us-west-2" use_lockfile = true workspace_key_prefix = "tf-state-workspace" } }Important
- We don't recommend making further changes to this part of the configuration.
- For production deployments, we don't recommend storing the Terraform state locally. Instead, use the S3 backend and enable versioning on the state bucket. This configuration makes it possible to recover a previous state file if a particular state becomes corrupted or gets overwritten.
-
Run the
terraform initcommand.Terraform prepares the environment, downloads the Qumulo Terraform Provider from Qumulo’s registry, verifies its GPG-signed checksums, and displays the message
Terraform has been successfully initialized!Note
- The
terraform initcommand reports that the Qumulo provider is self-signed. This is expected for providers hosted outsideregistry.terraform.ioand isn't a security issue; Terraform still performs full signature and checksum verification. For more information, see Installation and Trust in the Qumulo Terraform Provider documentation. - If the
terraform initcommand can't reach the Provider registry, allow outbound HTTPS toqumulo-terraform-registry.s3.us-east-1.amazonaws.com.
- The
-
Edit the
terraform.tfvarsfile and specify the following required values for your deployment:-
Basic Details:
deployment_name,ec2_key_pair, and theregionfor your cluster -
Networking:
vpc_idandsubnet_ids-
Single-AZ (Availability Zone) Deployment: Specify 1 private subnet
-
Multi-AZ Deployment: Specify 3 subnets, one for each AZ
-
-
Cluster Configuration:
instance_typeandnode_count(1, or 3–24)Note
A 4-node cluster can support only a single-AZ deployment. -
Soft Capacity Limit: If you don’t use the default limit, specify
soft_capacity_limit_tbto set the initial capacity limit of your Qumulo cluster (in TB).Note
It is possible to increase this limit at any time, but not to decrease it. -
Cluster / Active Directory Name:
cluster_name -
Qumulo Core Version:
cluster_version-
Specific Release: Specify
7.9.2.1(or higher) -
Latest Release: Don’t enter a value
-
-
-
Specify the administrator password. The password variable accepts a plain-text value or an AWS Secrets Manager ARN.
Important
- The system treats the administrator password as sensitive: It never writes it to Terraform states and reads it anew for every Terraform run.
- We strongly recommend passing a Secrets Manager ARN by rotating the secret in your store and allowing the next Terraform run to pick it up. Because secret handling functionality is located outside the Provider, you can also source the password from a HashiCorp Vault or another pipeline-integrated secrets store.
Step 3: Create the Necessary Resources
If EC2 capacity is unavailable in your Availability Zone, you can select a different Availability Zone, deploy multi-AZ, or increase the create timeout and let the provider keep retrying.
-
To authenticate to your AWS account, use the
awsCLI. -
Run the
terraform applycommand. -
Review the Terraform execution plan and then enter
yes.Terraform creates resources according to the execution plan and displays:
-
The names of the created S3 buckets
-
Your deployment’s unique name
-
The floating IP addresses for your Qumulo cluster (single-AZ deployments)
-
The primary (static) IP addresses
-
The Qumulo Core Web UI endpoint
For example:
cluster_soft_capacity_limit_tb = 500 cluster_uuid = "12345a6b-7c89-0d12-3456-78fe9012f345" deployment_unique_name = "myname-deployment-ABCDE01EG2H" endpoint_ips = tolist([ "203.0.113.1", "203.0.113.2", "203.0.113.3", ]) endpoints = { "api" = "https://203.0.113.1:8000" "nfs" = "203.0.113.1:/<NFS Export Name>" "smb" = "\\\\203.0.113.1\\<SMB Share Name>" "web_ui" = "https://203.0.113.1" } primary_ips = tolist([ "203.0.113.5", "203.0.113.6", "203.0.113.7", ]) provisioner_log = "https://us-west-2.console.aws.amazon.com/cloudwatch/..." -
Part 2: Mounting the Qumulo File System
-
To log in to your cluster’s Web UI, use the endpoint from the Terraform output and the username and password that you have configured.
Important
- The system treats the administrator password as sensitive: It never writes it to Terraform states and reads it anew for every Terraform run.
- If you change the administrator password by using the Qumulo Core Web UI, Qumulo REST API, or
qqCLI after deployment, although Terraform configuration remains unaffected, we recommend keeping your secrets store up to date with your cluster's settings, so that future redeployments use the correct value.
You can use the Qumulo Core Web UI to create and manage the following:
You can also join your cluster to Active Directory and configure LDAP.
-
Mount your Qumulo file system by using NFS or SMB and your cluster’s DNS name or an IP address from the Terraform output.
Part 3: Performing Post-Deployment Actions
This section describes the common actions you can perform on a CNQ cluster after deploying it: adding and removing nodes, increasing the soft capacity limit for a cluster, changing the EC2 instance type and deleting a cluster.
- After you create your Qumulo cluster, the deployed version (and the
cluster_versionvariable) becomes immutable in the Terraform configuration. It isn't possible to upgrade Qumulo Core by changing this variable or by performing a Terraform operation. - To upgrade Qumulo Core, use the Qumulo Core Web UI or the
qqCLI. For more information, see Performing Upgrades. - For all node addition and EC2 instance type change operations, the Qumulo Terraform Provider deploys the same Qumulo Core version as the one that your cluster is currently running.
Adding Nodes to an Existing CNQ on AWS Cluster
-
Edit the
terraform.tfvarsfile and setnode_countto a higher value. -
Run the
terraform applycommand. -
Review the Terraform execution plan, confirm that it shows an in-place update, and then enter
yes.
Terraform adds the nodes to your cluster and displays the additional primary (static) IP addresses.
Removing Nodes from an Existing CNQ on AWS Cluster
Removing nodes is a single Terraform operation. The Qumulo Terraform Provider handles the separate quorum removal and resource cleanup steps.
-
Edit the
terraform.tfvarsfile and setnode_countto a lower value. -
Run the
terraform applycommand. -
Review the Terraform execution plan and then enter
yes.
The specified nodes are removed from your cluster.
Increasing the Soft Capacity Limit for an Existing CNQ on AWS Cluster
- A single operation can increase the soft capacity limit by less than 5,000 TB.
- We recommend applying larger increases in incremental steps.
- It isn't possible to decrease the soft capacity limit.
-
Edit the
terraform.tfvarsfile and setsoft_capacity_limit_tbto a higher value. -
Run the
terraform applycommand. -
Review the Terraform execution plan and then enter
yes.
Terraform creates new S3 buckets as necessary, updates the IAM roles and S3 bucket policies, and increases the soft capacity limit.
Changing the EC2 Instance Type of a CNQ on AWS Cluster
The Qumulo Terraform Provider performs the replacement natively within the existing deployment.
Changing the EC2 instance type creates new instances of the specified type, joins them to the cluster quorum, then removes the existing instances.
-
Edit the
terraform.tfvarsfile and specify the newinstance_type. -
Run the
terraform applycommand. -
Review the Terraform execution plan, and then enter
yes.
Deleting an Existing CNQ on AWS Cluster
- When you no longer need your cluster, you must back up all important data on the cluster safely before deleting the cluster. Deleting the cluster deletes its compute and cache resources and its persistent storage.
- The system won't run the
terraform destroycommand unless you disable deletion protection and then apply this change.
-
After you back up your data safely, edit your
terraform.tfvarsfile and set the deletion protection variable tofalse. -
Run the
terraform applycommand, review the Terraform execution plan, and then enteryes. -
Run the
terraform destroycommand. -
Review the Terraform execution plan and then enter
yes.Terraform deletes all of your cluster’s resources, including the persistent storage, and displays the
Destroy complete!message with a count of destroyed resources.