Deploy an AWS cluster from a custom AMI¶
When you finish, a three-node Qumulo cluster runs on your own Ubuntu or RHEL image instead of the default Ubuntu 24.04 image.
Before you start¶
- An x86_64 AMI with cloud-init, running Ubuntu 24.04 or RHEL 8, 9, or 10, in the region you deploy to
- A VPC and subnet that meet the AWS network prerequisites
- AWS credentials with the AWS IAM permissions the provider needs
- Terraform 1.11 or later
1. Choose the AMI¶
- To run the nodes on your image, use its ID as
ami_id. The short-lived provisioner instance runs the same image. - To run the provisioner on a different image, pick a second AMI for
provisioner_ami_id. Changing it later never touches the nodes. - For RHEL, use the RHEL 8, 9, or 10 AMI ID for your region.
aws ec2 describe-imageslists them. - For an AMI owned by another account, have the owner grant your account cross-account AMI access first.
- For an AMI registered in another region, copy it into your region with
aws ec2 copy-imageand use the copy's ID.
You now have one AMI ID for the nodes, and optionally a second one for the provisioner.
Warning
Changing ami_id on a running cluster replaces every node while the cluster stays in service, and every node IP address changes.
2. Copy the configuration¶
Save this as main.tf in an empty directory.
terraform {
required_version = ">= 1.11"
required_providers {
qumulo = {
source = "qumulo-terraform-registry.s3.us-east-1.amazonaws.com/qumulo/qumulo"
version = "~> 1.0"
}
}
}
provider "qumulo" {
aws {}
}
resource "qumulo_filesystem_aws" "cluster" {
cluster_name = "qumulo"
deployment_name = "qumulo"
region = "us-east-1" # <-- Replace with your region
subnet_ids = ["subnet-0123456789abcdef0"] # <-- Replace with your subnet ID
ami_id = "ami-0123456789abcdef0" # <-- Replace with your AMI ID
node_count = 3
instance_type = "m6idn.2xlarge"
cluster_product_type = "HOT"
admin_password = "YourSecurePassword123!" # <-- Replace with your admin password
allow_cidrs = ["10.0.0.0/8"] # <-- Replace with your client networks
deletion_protection = true
}
output "endpoint_ips" {
value = qumulo_filesystem_aws.cluster.endpoint_ips
}
output "web_ui" {
value = "https://${qumulo_filesystem_aws.cluster.endpoint_ips[0]}"
}
Replace the five values marked <-- Replace, and leave the rest as written. If you chose a separate provisioner image, add this line to the qumulo_filesystem_aws block.
3. Apply¶
The plan ends with Plan: 1 to add, 0 to change, 0 to destroy. The apply typically runs 60 to 80 minutes and ends with Apply complete! Resources: 1 added, 0 changed, 0 destroyed., followed by the endpoint_ips and web_ui outputs.
4. Check the cluster¶
Open the web_ui address in a browser on a network inside allow_cidrs, and accept the cluster's self-signed certificate. Sign in as admin with the password you set, and the web UI shows the cluster named qumulo.
Next¶
Combine your image with multi-AZ, KMS, and a permissions boundary in Deploy a production AWS cluster. The qumulo_filesystem_aws reference lists every attribute, including ami_id and provisioner_ami_id.