diff --git a/.config/.terraform-docs.yml b/.config/.terraform-docs.yml index 384d1b8..3a1d5ed 100644 --- a/.config/.terraform-docs.yml +++ b/.config/.terraform-docs.yml @@ -153,6 +153,7 @@ content: |- - [Dack Busch](https://github.com/dackbusch) - Co-creator - [Gokul Kupparaj](https://github.com/gokulku) - Co-creator - [Wesley Kirkland](https://github.com/wesleykirklandsg) - Added Terraform automatic documentation + - [Travis Cunningham](https://github.com/travcunn) - Added automated tests sections: show: diff --git a/README.md b/README.md index 079f6a4..9b63213 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ - [![Qumulo Logo](https://qumulo.com/wp-content/uploads/2021/06/CloudQ-Logo_OnLight.png)](http://qumulo.com) # aws-terraform-cloud-q [![Latest Release](https://img.shields.io/github/release/qumulo/aws-terraform-cloud-q.svg)](https://github.com/qumulo/aws-terraform-cloud-q/releases) ![Test Workflow Status](https://github.com/Qumulo/aws-terraform-cloud-q/actions/workflows/tests.yaml/badge.svg) @@ -21,64 +20,62 @@ Reference Architecture: For help planning the deployment see the table of documents below. -| Documentation | Description | -| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| [DNS options in AWS: IP failover & client distribution](https://qumulo.com/resources/qumulo-dns-options-in-aws/) | Details on the DNS options in AWS. | -| [Terraform: Supported AWS Regions](./docs/tf-supported-regions.pdf) | Details on supported AWS Regions for Cloud Q with Terraform. | -| [Terraform: Deploying in a VPC with no outbound internet access](./docs/tf-deploying-without-inet.pdf) | Details on deploying with Terraform into a VPC that has no outbound internet access. | -| [Terraform: Deploying using an AWS Custom IAM role](./docs/tf-deploying-with-custom-iam-role.pdf) | Details on deploying with Terraform using a custom IAM role. | -| [Terraform: AWS resources & EBS Service Quota planning](./docs/tf-resources-ebs-quota-planning.pdf) | Details on service-quota planning for Amazon EBS, including EC2 instance types and EBS volume types. | -| [Terraform: Qumulo sizing & performance on AWS](./docs/tf-qumulo-sizing-performance.pdf) | Details on Qumulo cluster performance and scalability on AWS. | -| [Terraform: Qumulo distributed multi-AZ deployment on AWS](./docs/tf-qumulo-multi-az-deployment.pdf) | Details on deploying a distributed multi-AZ cluster on AWS. | +|Documentation|Description| +|-------------|-----------| +|[DNS options in AWS: IP failover & client distribution](https://qumulo.com/resources/qumulo-dns-options-in-aws/) | Details on the DNS options in AWS.| +|[Terraform: Supported AWS Regions](./docs/tf-supported-regions.pdf) | Details on supported AWS Regions for Cloud Q with Terraform.| +|[Terraform: Deploying in a VPC with no outbound internet access](./docs/tf-deploying-without-inet.pdf) | Details on deploying with Terraform into a VPC that has no outbound internet access.| +|[Terraform: Deploying using an AWS Custom IAM role](./docs/tf-deploying-with-custom-iam-role.pdf) | Details on deploying with Terraform using a custom IAM role.| +|[Terraform: AWS resources & EBS Service Quota planning](./docs/tf-resources-ebs-quota-planning.pdf) | Details on service-quota planning for Amazon EBS, including EC2 instance types and EBS volume types.| +|[Terraform: Qumulo sizing & performance on AWS](./docs/tf-qumulo-sizing-performance.pdf) | Details on Qumulo cluster performance and scalability on AWS.| +|[Terraform: Qumulo distributed multi-AZ deployment on AWS](./docs/tf-qumulo-multi-az-deployment.pdf) | Details on deploying a distributed multi-AZ cluster on AWS.| ## Deploying with Terraform ### Deployment Considerations -- You may deploy this as a module pinned to this repo or clone this repo and deploy in your local Terraform environment as a module or directly. -- Pinning Example: git::https://github.com/Qumulo/aws-terraform-cloud-q.git?ref=v3.3 -- Cloning Example: git clone https://github.com/Qumulo/aws-terraform-cloud-q.git --branch v3.3 --single-branch -
+* You may deploy this as a module pinned to this repo or clone this repo and deploy in your local Terraform environment as a module or directly. +* Pinning Example: git::https://github.com/Qumulo/aws-terraform-cloud-q.git?ref=v3.3 +* Cloning Example: git clone https://github.com/Qumulo/aws-terraform-cloud-q.git --branch v3.3 --single-branch +
**IMPORTANT:** When pinning or cloning this repository specify the tagged release version because there may be breaking changes between releases. If you want the latest, reference 'main' realizing there may be breaking changes for your deployment. ### Terraform Naming Guidance - -There are a multitude of Terraform workflows from those that just use a default local workspace to those using Terraform Cloud with remote state. The very first variable in the example files provided is **deployment_name**. Some users may choose to make this the workspace name. Other users may want the same deployment name in multiple workspaces. Regardless, a **deployment_unique_name** is generated that consists of the deployment name appended with an 11 digit random alphanumeric. All resources are tagged with the **deployment_unique_name**. The **deployment_unique_name** will never change on subsequent Terraform applies. All subsequent changes to **deployment_name** are ingored. No matter your naming convention or how you choose to use Terraform, you will have your chosen name and uniquely named resources so no conflicts occur between NLBs, resource groups, cross-regional CloudWatch views, etc. +There are a multitude of Terraform workflows from those that just use a default local workspace to those using Terraform Cloud with remote state. The very first variable in the example files provided is **deployment_name**. Some users may choose to make this the workspace name. Other users may want the same deployment name in multiple workspaces. Regardless, a **deployment_unique_name** is generated that consists of the deployment name appended with an 11 digit random alphanumeric. All resources are tagged with the **deployment_unique_name**. The **deployment_unique_name** will never change on subsequent Terraform applies. All subsequent changes to **deployment_name** are ingored. No matter your naming convention or how you choose to use Terraform, you will have your chosen name and uniquely named resources so no conflicts occur between NLBs, resource groups, cross-regional CloudWatch views, etc.
-**IMPORTANT:** If you are spinning up multiple clusters, define unique values for the **q_cluster_name** variable. If using the optional Route53 PHZ, also define a unique value for **q_fqdn_name** for each cluster. +**IMPORTANT:** If you are spinning up multiple clusters, define unique values for the **q_cluster_name** variable. If using the optional Route53 PHZ, also define a unique value for **q_fqdn_name** for each cluster. ### Inputs Comparison - -Select between the minimalist **examples/standard.tf** or the fully featured **examples/advanced.tf**. The file **terraform.tfvars** is a copy of the input values from **examples/advanced.tf** in this repository. These files all have extensive comments providing guidance on each variable. The standard version makes many decisions for you to simplify the input process and deploy a Qumulo cluster with the software version of the Qumulo AMI. The advanced version provides the flexibility that most production environments will require, as seen in the table below. - -| | examples/standard.tf | examples/advanced.tf | -| ----------------------------------------------- | :------------------: | :------------------: | -| Deploy in a Local Zone | | ✅ | -| Deploy on Outposts | | ✅ | -| Deploy with a Custom AMI-ID | | ✅ | -| Deploy a distributed multi-AZ cluster | | ✅ | -| Customize Qumulo Admin Password | ✅ | ✅ | -| Customize EC2 Instance Type | ✅ | ✅ | -| Customize EC2 Instance Count | ✅ | ✅ | -| Customize Termination Protection | ✅ | ✅ | -| Customize EBS gp3 IOPS/Throughput | | ✅ | -| Customize Qumulo Cluster Name | | ✅ | -| Customize Qumulo Software Version | | ✅ | -| Customize Qumulo Sidecar Deployment | | ✅ | -| Customize Qumulo # of Floating IPs | | ✅ | -| Optional: Add SNS Topics for EC2 & EBS Recovery | | ✅ | -| Optional: Add R53 PHZ DNS for Floating IPs | | ✅ | -| Optional: Add CIDRS to Qumulo Security Group | | ✅ | -| Optional: Add SG IDs to Qumulo Cluster | | ✅ | -| Optional: Deploy with an NLB | | ✅ | -| Optional: Add Qumulo Public Management | | ✅ | -| Optional: Add Qumulo Public Replication Port | | ✅ | -| Optional: Enable CloudWatch Audit Log Messages | | ✅ | -| Optional: Apply KMS CMK for EBS Encryption | | ✅ | -| Optional: Set IAM Permissions Boundary | | ✅ | -| Optional: Set Environment Type | | ✅ | +Select between the minimalist **examples/standard.tf** or the fully featured **examples/advanced.tf**. The file **terraform.tfvars** is a copy of the input values from **examples/advanced.tf** in this repository. These files all have extensive comments providing guidance on each variable. The standard version makes many decisions for you to simplify the input process and deploy a Qumulo cluster with the software version of the Qumulo AMI. The advanced version provides the flexibility that most production environments will require, as seen in the table below. + +| | examples/standard.tf | examples/advanced.tf | +|--|:---------------:|:---------------:| +| Deploy in a Local Zone || ✅ | +| Deploy on Outposts || ✅ | +| Deploy with a Custom AMI-ID || ✅ | +| Deploy a distributed multi-AZ cluster || ✅ | +| Customize Qumulo Admin Password | ✅ | ✅ | +| Customize EC2 Instance Type | ✅ | ✅ | +| Customize EC2 Instance Count | ✅ | ✅ | +| Customize Termination Protection | ✅ | ✅ | +| Customize EBS gp3 IOPS/Throughput || ✅ | +| Customize Qumulo Cluster Name || ✅ | +| Customize Qumulo Software Version || ✅ | +| Customize Qumulo Sidecar Deployment || ✅ | +| Customize Qumulo # of Floating IPs || ✅ | +| Optional: Add SNS Topics for EC2 & EBS Recovery || ✅ | +| Optional: Add R53 PHZ DNS for Floating IPs || ✅ | +| Optional: Add CIDRS to Qumulo Security Group || ✅ | +| Optional: Add SG IDs to Qumulo Cluster || ✅ | +| Optional: Deploy with an NLB || ✅ | +| Optional: Add Qumulo Public Management || ✅ | +| Optional: Add Qumulo Public Replication Port || ✅ | +| Optional: Enable CloudWatch Audit Log Messages || ✅ | +| Optional: Apply KMS CMK for EBS Encryption || ✅ | +| Optional: Set IAM Permissions Boundary || ✅ | +| Optional: Set Environment Type || ✅ | --- @@ -90,7 +87,7 @@ module "qumulo_cloud_q" { # ****************************** Required ************************************************************* # ***** Terraform Variables ***** - # deployment_name - Any <=32 character name for the deployment. Set on first apply. Changes are ignored after that to prevent unintended resource destruction. + # deployment_name - Any <=32 character name for the deployment. Set on first apply. Changes are ignored after that to prevent unintended resource destruction. # - All infrastructure will be tagged with the Deployment Name and a unique 11 digit alphanumeric suffix. deployment_name = "my-deployment-name" # ***** S3 Bucket Variables ***** @@ -138,7 +135,7 @@ module "qumulo_cloud_q" { # tags - Additional tags to add to all created resources. Often used for billing, departmental tracking, chargeback, etc. # If you add an additional tag with the key 'Name' it will be ignored. All infrastructure is tagged with the 'Name=deployment_unique_name'. # Example: tags = { "key1" = "value1", "key2" = "value2" } - tags = null + tags = null } output "outputs_qumulo_cloud_q" { @@ -154,7 +151,7 @@ module "qumulo_cloud_q" { # ****************************** Required ************************************************************* # ***** Terraform Variables ***** - # deployment_name - Any <=32 character name for the deployment. Set on first apply. Changes are ignored after that to prevent unintended resource destruction. + # deployment_name - Any <=32 character name for the deployment. Set on first apply. Changes are ignored after that to prevent unintended resource destruction. # - All infrastructure will be tagged with the Deployment Name and a unique 11 digit alphanumeric suffix. deployment_name = "my-deployment-name" # ***** S3 Bucket Variables ***** @@ -192,8 +189,8 @@ module "qumulo_cloud_q" { q_marketplace_type = "1TB-Usable-All-Flash" # ***** Qumulo Sidecar Variables ***** # q_local_zone_or_outposts - true if deploying the cluster in a local zone or on Outposts. - # q_sidecar_private_subnet_id - Subnet in the Parent Region for the Sidecar Lambdas if deploying in a local zone or on Outposts. - # q_sidecar_provision - true to deploy the Sidecar Lambdas. + # q_sidecar_private_subnet_id - Subnet in the Parent Region for the Sidecar Lambdas if deploying in a local zone or on Outposts. + # q_sidecar_provision - true to deploy the Sidecar Lambdas. # q_sidecar_version - The software verison for the sidecar must match the cluster. This variable can be used to update the sidecar software version post deployment. q_local_zone_or_outposts = false q_sidecar_private_subnet_id = null @@ -206,7 +203,7 @@ module "qumulo_cloud_q" { # 600GiB-AF, 1TB-AF, 5TB-AF, 8TiB-AF, 13TiB-AF, 20TiB-AF, 30TB-AF, 35TiB-AF, 55TiB-AF # 5TB-Hybrid-st1, 8TiB-Hybrid-st1, 13TiB-Hybrid-st1, 20TB-Hybrid-st1, 35TiB-Hybrid-st1, 55TiB-Hybrid-st1, 90TiB-Hybrid-st1, 160TiB-Hybrid-st1, 256TiB-Hybrid-st1, 320TiB-Hybrid-st1 # 8TiB-Hybrid-sc1, 13TiB-Hybrid-sc1, 20TB-Hybrid-sc1, 35TiB-Hybrid-sc1, 55TiB-Hybrid-sc1, 90TiB-Hybrid-sc1, 160TiB-Hybrid-sc1, 256TiB-Hybrid-sc1, 320TiB-Hybrid-sc1 - # q_flash_type - Specify gp2 or gp3. Default is gp3. + # q_flash_type - Specify gp2 or gp3. Default is gp3. # q_flash_tput - Specify gp3 throughput in MB/s 125 to 1000. Default is 250. Not applicable to gp2. # q_flash_iops - Specify gp3 iops between 3000 to 16000. Default is 3000. Not applicable to gp2. # q_node_count - Single AZ only & ignored for multi-AZ. Total # of EC2 Instances in the cluster (4-20). Specify if growing the cluster or using Marketplace types of 'Custom-' or 'Specified-AMI-ID'. 0 implies marketplace config lookup. @@ -279,20 +276,19 @@ output "outputs_qumulo_cloud_q" { ``` ## Post-Deployment - If you're using Qumulo Core version 4.3.0 or newer, you can populate data on your Qumulo cluster by copying data from an Amazon S3 bucket using [Qumulo Shift for Amazon S3](https://qumulo.com/wp-content/uploads/2020/06/ShiftForAWS_DataSheet.pdf). For more information on Qumulo SHIFT, custom CloudWatch Dashboards, adding nodes, the provisioning instance, and destroying the cluster see the documents in the table below. -| Documentation | Description | -| ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| [Qumulo SHIFT: Copy from Amazon S3](https://github.com/Qumulo/docs/blob/gh-pages/shift-from-s3.md) | Copy data from S3 with the Qumulo GUI/CLI/API. | -| [Qumulo SHIFT: Copy to Amazon S3](https://github.com/Qumulo/docs/blob/gh-pages/shift-to-s3.md) | Copy data to S3 with the Qumulo GUI/CLI/API. | -| [Terraform: Using the Custom CloudWatch Dashboard](./docs/tf-cloudwatch-dashboard.pdf) | Details on viewing the CloudWatch dashboard and resource groups that are created for the Qumulo cluster. | -| [Terraform: Using Qumulo EC2 & EBS type change scripts](./docs/tf-using-qumulo-ec2-ebs-change-scripts.pdf) | Details on how to change EC2 instance types and EBS volume types in production. | -| [Terraform: Supported Updates](./docs/tf-update-deployment.pdf) | Details on Terraform update options and examples, including adding instances (nodes) to the cluster and upgrading the Qumulo Sidecar. | -| [Terraform: Provisioning Instance Functions](./docs/tf-provisioning-instance-functions.pdf) | Details on the functions of the provisioner instance. | -| [Terraform: Destroying the Cluster](./docs/tf-destroy-deployment.pdf) | Details on backing up data, termination protection, and on cleaning up an AWS KMS customer managed key policy. | +|Documentation|Description| +|-------------|-----------| +|[Qumulo SHIFT: Copy from Amazon S3](https://github.com/Qumulo/docs/blob/gh-pages/shift-from-s3.md)| Copy data from S3 with the Qumulo GUI/CLI/API. | +|[Qumulo SHIFT: Copy to Amazon S3](https://github.com/Qumulo/docs/blob/gh-pages/shift-to-s3.md)| Copy data to S3 with the Qumulo GUI/CLI/API. | +|[Terraform: Using the Custom CloudWatch Dashboard](./docs/tf-cloudwatch-dashboard.pdf)| Details on viewing the CloudWatch dashboard and resource groups that are created for the Qumulo cluster.| +|[Terraform: Using Qumulo EC2 & EBS type change scripts](./docs/tf-using-qumulo-ec2-ebs-change-scripts.pdf)| Details on how to change EC2 instance types and EBS volume types in production. | +|[Terraform: Supported Updates](./docs/tf-update-deployment.pdf)| Details on Terraform update options and examples, including adding instances (nodes) to the cluster and upgrading the Qumulo Sidecar.| +|[Terraform: Provisioning Instance Functions](./docs/tf-provisioning-instance-functions.pdf)| Details on the functions of the provisioner instance.| +|[Terraform: Destroying the Cluster](./docs/tf-destroy-deployment.pdf)| Details on backing up data, termination protection, and on cleaning up an AWS KMS customer managed key policy. | --- @@ -302,77 +298,79 @@ This repo is self documenting via Terraform-Docs. ## Requirements -| Name | Version | -| ------------------------------------------------------------------------ | -------- | -| [terraform](#requirement_terraform) | >= 1.1.2 | -| [aws](#requirement_aws) | ~> 3.7 | -| [null](#requirement_null) | ~> 3.1 | -| [random](#requirement_random) | ~> 3.1 | +| Name | Version | +|------|---------| +| [terraform](#requirement\_terraform) | >= 1.1.2 | +| [aws](#requirement\_aws) | ~> 3.7 | +| [null](#requirement\_null) | ~> 3.1 | +| [random](#requirement\_random) | ~> 3.1 | ## Inputs -| Name | Description | Type | Default | Required | -| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | --------------- | :------: | -| [aws_region](#input_aws_region) | AWS region | `string` | n/a | yes | -| [aws_vpc_id](#input_aws_vpc_id) | AWS VPC identifier | `string` | n/a | yes | -| [deployment_name](#input_deployment_name) | Name for this Terraform deployment. This name plus 11 random hex digits will be used for all resource names where appropriate. | `string` | n/a | yes | -| [dev_environment](#input_dev_environment) | Enables the use of m5.xlarge instance type. NOT recommended for production and overridden when not a development environment. | `bool` | `false` | no | -| [ec2_key_pair](#input_ec2_key_pair) | AWS EC2 key pair | `string` | n/a | yes | -| [kms_key_id](#input_kms_key_id) | OPTIONAL: AWS KMS encryption key identifier | `string` | `null` | no | -| [private_subnet_id](#input_private_subnet_id) | AWS private subnet identifier | `string` | n/a | yes | -| [public_subnet_id](#input_public_subnet_id) | OPTIONAL: Public Subnet ID for management NLB. | `string` | `null` | no | -| [q_ami_id](#input_q_ami_id) | OPTIONAL: Qumulo AMI-ID | `string` | `null` | no | -| [q_audit_logging](#input_q_audit_logging) | OPTIONAL: Configure a CloudWatch Log group to store Audit logs from Qumulo | `bool` | `false` | no | -| [q_cluster_additional_sg_cidrs](#input_q_cluster_additional_sg_cidrs) | OPTIONAL: AWS additional security group CIDRs for the Qumulo cluster | `string` | `null` | no | -| [q_cluster_additional_sg_ids](#input_q_cluster_additional_sg_ids) | OPTIONAL: AWS additional security groups IDs for the Qumulo cluster | `string` | `null` | no | -| [q_cluster_admin_password](#input_q_cluster_admin_password) | Qumulo cluster admin password | `string` | n/a | yes | -| [q_cluster_name](#input_q_cluster_name) | Qumulo cluster name | `string` | `"Cloud-Q"` | no | -| [q_cluster_version](#input_q_cluster_version) | Qumulo cluster software version | `string` | `"5.1.0.1"` | no | -| [q_disk_config](#input_q_disk_config) | OPTIONAL: Qumulo disk config | `string` | `null` | no | -| [q_flash_iops](#input_q_flash_iops) | OPTIONAL: Specify the iops for gp3 | `number` | `3000` | no | -| [q_flash_tput](#input_q_flash_tput) | OPTIONAL: Specify the throughput, in MB/s, for gp3 | `number` | `250` | no | -| [q_flash_type](#input_q_flash_type) | OPTIONAL: Specify the type of EBS flash | `string` | `"gp3"` | no | -| [q_floating_ips_per_node](#input_q_floating_ips_per_node) | Qumulo floating IP addresses per node | `number` | `3` | no | -| [q_fqdn_name](#input_q_fqdn_name) | OPTIONAL: The Fully Qualified Domain Name (FQDN) for Route 53 Private Hosted Zone | `string` | `null` | no | -| [q_instance_recovery_topic](#input_q_instance_recovery_topic) | OPTIONAL: AWS SNS topic for Qumulo instance recovery | `string` | `null` | no | -| [q_instance_type](#input_q_instance_type) | Qumulo EC2 instance type | `string` | `"m5.2xlarge"` | no | -| [q_local_zone_or_outposts](#input_q_local_zone_or_outposts) | Is the Qumulo cluster being deployed in a local zone or on Outposts? | `bool` | `false` | no | -| [q_marketplace_type](#input_q_marketplace_type) | Qumulo AWS marketplace type | `string` | n/a | yes | -| [q_nlb_cross_zone](#input_q_nlb_cross_zone) | OPTIONAL: AWS NLB Enable cross-AZ load balancing | `bool` | `false` | no | -| [q_nlb_override_subnet_id](#input_q_nlb_override_subnet_id) | OPTIONAL: Private Subnet ID for NLB if deploying in subnet(s) other than subnet(s) the cluster is deployed in | `string` | `null` | no | -| [q_nlb_provision](#input_q_nlb_provision) | OPTIONAL: Provision an AWS NLB in front of the Qumulo cluster for load balancing and client failover | `bool` | `false` | no | -| [q_nlb_stickiness](#input_q_nlb_stickiness) | OPTIONAL: AWS NLB sticky sessions | `bool` | `true` | no | -| [q_node_count](#input_q_node_count) | Single AZ Qumulo cluster - node count | `number` | `0` | no | -| [q_nodes_per_az](#input_q_nodes_per_az) | Multi-AZ Qumulo cluster - nodes per AZ. | `number` | `0` | no | -| [q_permissions_boundary](#input_q_permissions_boundary) | OPTIONAL: Apply an IAM Permissions Boundary Policy to the Qumulo IAM roles that are created for the Qumulo cluster and provisioning instance. This is an account based policy and is optional. Qumulo's IAM roles conform to the least privilege model. | `string` | `null` | no | -| [q_public_mgmt_provision](#input_q_public_mgmt_provision) | OPTIONAL: Provision an AWS NLB in front of the Qumulo cluster for a public managment interface. Not for production, test environments only. | `bool` | `false` | no | -| [q_public_replication_provision](#input_q_public_replication_provision) | OPTIONAL: Enable port 3712 for replication from on-prem Qumulo systems using the public IP of the NLB for Qumulo Managment. Requires q_public_management_provision=true above. | `bool` | `false` | no | -| [q_record_name](#input_q_record_name) | OPTIONAL: The record name for the Route 53 Private Hosted Zone. This will add a prefix to the q_fqdn_name above | `string` | `null` | no | -| [q_route53_provision](#input_q_route53_provision) | OPTIONAL: Configure Route 53 DNS for Floating IPs. | `bool` | `false` | no | -| [q_sidecar_ebs_replacement_topic](#input_q_sidecar_ebs_replacement_topic) | AWS SNS topic for Qumulo Sidecar replacement of a failed EBS volume. | `string` | `null` | no | -| [q_sidecar_private_subnet_id](#input_q_sidecar_private_subnet_id) | OPTIONAL: Private Subnet ID for Sidecar Lambdas if the cluster is being deployed in a local zone or on Outpost | `string` | `null` | no | -| [q_sidecar_provision](#input_q_sidecar_provision) | Provision Qumulo Sidecar | `bool` | `true` | no | -| [q_sidecar_user_name](#input_q_sidecar_user_name) | Qumulo Sidecar username | `string` | `"SideCarUser"` | no | -| [q_sidecar_version](#input_q_sidecar_version) | Qumulo Sidecar software version | `string` | `"5.1.0.1"` | no | -| [s3_bucket_name](#input_s3_bucket_name) | AWS S3 bucket name | `string` | n/a | yes | -| [s3_bucket_prefix](#input_s3_bucket_prefix) | AWS S3 bucket prefix (path). Include a trailing slash (/) | `string` | n/a | yes | -| [s3_bucket_region](#input_s3_bucket_region) | AWS region the S3 bucket is hosted in | `string` | n/a | yes | -| [tags](#input_tags) | OPTIONAL: Additional global tags | `map(string)` | `null` | no | -| [term_protection](#input_term_protection) | Enable Termination Protection | `bool` | `true` | no | +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [aws\_region](#input\_aws\_region) | AWS region | `string` | n/a | yes | +| [aws\_vpc\_id](#input\_aws\_vpc\_id) | AWS VPC identifier | `string` | n/a | yes | +| [deployment\_name](#input\_deployment\_name) | Name for this Terraform deployment. This name plus 11 random hex digits will be used for all resource names where appropriate. | `string` | n/a | yes | +| [dev\_environment](#input\_dev\_environment) | Enables the use of m5.xlarge instance type. NOT recommended for production and overridden when not a development environment. | `bool` | `false` | no | +| [ec2\_key\_pair](#input\_ec2\_key\_pair) | AWS EC2 key pair | `string` | n/a | yes | +| [kms\_key\_id](#input\_kms\_key\_id) | OPTIONAL: AWS KMS encryption key identifier | `string` | `null` | no | +| [private\_subnet\_id](#input\_private\_subnet\_id) | AWS private subnet identifier | `string` | n/a | yes | +| [public\_subnet\_id](#input\_public\_subnet\_id) | OPTIONAL: Public Subnet ID for management NLB. | `string` | `null` | no | +| [q\_ami\_id](#input\_q\_ami\_id) | OPTIONAL: Qumulo AMI-ID | `string` | `null` | no | +| [q\_audit\_logging](#input\_q\_audit\_logging) | OPTIONAL: Configure a CloudWatch Log group to store Audit logs from Qumulo | `bool` | `false` | no | +| [q\_cluster\_additional\_sg\_cidrs](#input\_q\_cluster\_additional\_sg\_cidrs) | OPTIONAL: AWS additional security group CIDRs for the Qumulo cluster | `string` | `null` | no | +| [q\_cluster\_additional\_sg\_ids](#input\_q\_cluster\_additional\_sg\_ids) | OPTIONAL: AWS additional security groups IDs for the Qumulo cluster | `string` | `null` | no | +| [q\_cluster\_admin\_password](#input\_q\_cluster\_admin\_password) | Qumulo cluster admin password | `string` | n/a | yes | +| [q\_cluster\_name](#input\_q\_cluster\_name) | Qumulo cluster name | `string` | `"Cloud-Q"` | no | +| [q\_cluster\_version](#input\_q\_cluster\_version) | Qumulo cluster software version | `string` | `"5.1.0.1"` | no | +| [q\_disk\_config](#input\_q\_disk\_config) | OPTIONAL: Qumulo disk config | `string` | `null` | no | +| [q\_flash\_iops](#input\_q\_flash\_iops) | OPTIONAL: Specify the iops for gp3 | `number` | `3000` | no | +| [q\_flash\_tput](#input\_q\_flash\_tput) | OPTIONAL: Specify the throughput, in MB/s, for gp3 | `number` | `250` | no | +| [q\_flash\_type](#input\_q\_flash\_type) | OPTIONAL: Specify the type of EBS flash | `string` | `"gp3"` | no | +| [q\_floating\_ips\_per\_node](#input\_q\_floating\_ips\_per\_node) | Qumulo floating IP addresses per node | `number` | `3` | no | +| [q\_fqdn\_name](#input\_q\_fqdn\_name) | OPTIONAL: The Fully Qualified Domain Name (FQDN) for Route 53 Private Hosted Zone | `string` | `null` | no | +| [q\_instance\_recovery\_topic](#input\_q\_instance\_recovery\_topic) | OPTIONAL: AWS SNS topic for Qumulo instance recovery | `string` | `null` | no | +| [q\_instance\_type](#input\_q\_instance\_type) | Qumulo EC2 instance type | `string` | `"m5.2xlarge"` | no | +| [q\_local\_zone\_or\_outposts](#input\_q\_local\_zone\_or\_outposts) | Is the Qumulo cluster being deployed in a local zone or on Outposts? | `bool` | `false` | no | +| [q\_marketplace\_type](#input\_q\_marketplace\_type) | Qumulo AWS marketplace type | `string` | n/a | yes | +| [q\_nlb\_cross\_zone](#input\_q\_nlb\_cross\_zone) | OPTIONAL: AWS NLB Enable cross-AZ load balancing | `bool` | `false` | no | +| [q\_nlb\_internal](#input\_q\_nlb\_internal) | OPTIONAL: Makes the NLB for the cluster internal, setting this to false will allow anyone to reach the cluster. Will only work in a dev environment. | `bool` | `true` | no | +| [q\_nlb\_override\_subnet\_id](#input\_q\_nlb\_override\_subnet\_id) | OPTIONAL: Private Subnet ID for NLB if deploying in subnet(s) other than subnet(s) the cluster is deployed in | `string` | `null` | no | +| [q\_nlb\_provision](#input\_q\_nlb\_provision) | OPTIONAL: Provision an AWS NLB in front of the Qumulo cluster for load balancing and client failover | `bool` | `false` | no | +| [q\_nlb\_stickiness](#input\_q\_nlb\_stickiness) | OPTIONAL: AWS NLB sticky sessions | `bool` | `true` | no | +| [q\_node\_count](#input\_q\_node\_count) | Single AZ Qumulo cluster - node count | `number` | `0` | no | +| [q\_nodes\_per\_az](#input\_q\_nodes\_per\_az) | Multi-AZ Qumulo cluster - nodes per AZ. | `number` | `0` | no | +| [q\_permissions\_boundary](#input\_q\_permissions\_boundary) | OPTIONAL: Apply an IAM Permissions Boundary Policy to the Qumulo IAM roles that are created for the Qumulo cluster and provisioning instance. This is an account based policy and is optional. Qumulo's IAM roles conform to the least privilege model. | `string` | `null` | no | +| [q\_public\_mgmt\_provision](#input\_q\_public\_mgmt\_provision) | OPTIONAL: Provision an AWS NLB in front of the Qumulo cluster for a public managment interface. Not for production, test environments only. | `bool` | `false` | no | +| [q\_public\_replication\_provision](#input\_q\_public\_replication\_provision) | OPTIONAL: Enable port 3712 for replication from on-prem Qumulo systems using the public IP of the NLB for Qumulo Managment. Requires q\_public\_management\_provision=true above. | `bool` | `false` | no | +| [q\_record\_name](#input\_q\_record\_name) | OPTIONAL: The record name for the Route 53 Private Hosted Zone. This will add a prefix to the q\_fqdn\_name above | `string` | `null` | no | +| [q\_route53\_provision](#input\_q\_route53\_provision) | OPTIONAL: Configure Route 53 DNS for Floating IPs. | `bool` | `false` | no | +| [q\_sidecar\_ebs\_replacement\_topic](#input\_q\_sidecar\_ebs\_replacement\_topic) | AWS SNS topic for Qumulo Sidecar replacement of a failed EBS volume. | `string` | `null` | no | +| [q\_sidecar\_private\_subnet\_id](#input\_q\_sidecar\_private\_subnet\_id) | OPTIONAL: Private Subnet ID for Sidecar Lambdas if the cluster is being deployed in a local zone or on Outpost | `string` | `null` | no | +| [q\_sidecar\_provision](#input\_q\_sidecar\_provision) | Provision Qumulo Sidecar | `bool` | `true` | no | +| [q\_sidecar\_user\_name](#input\_q\_sidecar\_user\_name) | Qumulo Sidecar username | `string` | `"SideCarUser"` | no | +| [q\_sidecar\_version](#input\_q\_sidecar\_version) | Qumulo Sidecar software version | `string` | `"5.1.0.1"` | no | +| [s3\_bucket\_name](#input\_s3\_bucket\_name) | AWS S3 bucket name | `string` | n/a | yes | +| [s3\_bucket\_prefix](#input\_s3\_bucket\_prefix) | AWS S3 bucket prefix (path). Include a trailing slash (/) | `string` | n/a | yes | +| [s3\_bucket\_region](#input\_s3\_bucket\_region) | AWS region the S3 bucket is hosted in | `string` | n/a | yes | +| [tags](#input\_tags) | OPTIONAL: Additional global tags | `map(string)` | `null` | no | +| [term\_protection](#input\_term\_protection) | Enable Termination Protection | `bool` | `true` | no | ## Outputs -| Name | Description | -| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| [deployment_unique_name](#output_deployment_unique_name) | The unique name for this deployment. | -| [qumulo_cluster_provisioned](#output_qumulo_cluster_provisioned) | If the qprovisioner module completed secondary provisioning of the cluster = Success/Failure | -| [qumulo_floating_ips](#output_qumulo_floating_ips) | Qumulo floating IPs for IP failover & load distribution. If using an alternate source for DNS, use these IPs for the A-records. | -| [qumulo_knowledge_base](#output_qumulo_knowledge_base) | Qumulo knowledge base | -| [qumulo_private_NFS](#output_qumulo_private_NFS) | Private NFS path for the Qumulo cluster | -| [qumulo_private_SMB](#output_qumulo_private_SMB) | Private SMB UNC path for the Qumulo cluster | -| [qumulo_private_url](#output_qumulo_private_url) | Private URL for the Qumulo cluster | -| [qumulo_private_url_node1](#output_qumulo_private_url_node1) | Link to private IP for Qumulo Cluster - Node 1 | -| [qumulo_public_url](#output_qumulo_public_url) | Link to public IP for Qumulo Cluster | +| Name | Description | +|------|-------------| +| [deployment\_unique\_name](#output\_deployment\_unique\_name) | The unique name for this deployment. | +| [qumulo\_cluster\_provisioned](#output\_qumulo\_cluster\_provisioned) | If the qprovisioner module completed secondary provisioning of the cluster = Success/Failure | +| [qumulo\_floating\_ips](#output\_qumulo\_floating\_ips) | Qumulo floating IPs for IP failover & load distribution. If using an alternate source for DNS, use these IPs for the A-records. | +| [qumulo\_knowledge\_base](#output\_qumulo\_knowledge\_base) | Qumulo knowledge base | +| [qumulo\_nlb\_dns](#output\_qumulo\_nlb\_dns) | The DNS name of the NLB, if provisioned | +| [qumulo\_private\_NFS](#output\_qumulo\_private\_NFS) | Private NFS path for the Qumulo cluster | +| [qumulo\_private\_SMB](#output\_qumulo\_private\_SMB) | Private SMB UNC path for the Qumulo cluster | +| [qumulo\_private\_url](#output\_qumulo\_private\_url) | Private URL for the Qumulo cluster | +| [qumulo\_private\_url\_node1](#output\_qumulo\_private\_url\_node1) | Link to private IP for Qumulo Cluster - Node 1 | +| [qumulo\_public\_url](#output\_qumulo\_public\_url) | Link to public IP for Qumulo Cluster | --- @@ -380,7 +378,7 @@ This repo is self documenting via Terraform-Docs. Please post all feedback via the AWS GitHub repository feedback link. -**Note:** This project is provided as a public service to the AWS/Terraform +__Note:__ This project is provided as a public service to the AWS/Terraform community and is not directly supported by Qumulo's paid enterprise support. It is intended to be used by expert users only. @@ -403,4 +401,5 @@ All other trademarks referenced herein are the property of their respective owne - [Dack Busch](https://github.com/dackbusch) - Co-creator - [Gokul Kupparaj](https://github.com/gokulku) - Co-creator - [Wesley Kirkland](https://github.com/wesleykirklandsg) - Added Terraform automatic documentation - +- [Travis Cunningham](https://github.com/travcunn) - Added automated tests + \ No newline at end of file