The following steps will provision AWS resources (compute and storage instances in existing VPC) and configure the IBM Spectrum Scale cloud solution.
-
Change the working directory to
aws_scale_templates/sub_modules/instance_template
.cd ibm-spectrum-scale-cloud-install/aws_scale_templates/sub_modules/instance_template/
-
Create terraform variable definitions file (
terraform.tfvars.json
) and provide infrastructure inputs.Note: In case of multi availability zone, provide 3 AZ values for the vpc_availability_zones
keyword. Ex:"vpc_availability_zones"=["us-east-1a", "us-east-1b", "us-east-1c"]
Minimal Example-1 (create only storage cluster with gp2):
{ "vpc_region": "us-east-1", "vpc_availability_zones": ["us-east-1a"], "resource_prefix": "spectrum-scale", "vpc_id": null, // Use an existing vpc id "vpc_storage_cluster_private_subnets": [], // Use an existing vpc private subnet "vpc_compute_cluster_private_subnets": [], // Use an existing vpc private subnet "total_storage_cluster_instances": 4, "total_compute_cluster_instances": 0, // Make compute nodes count to zero "ebs_block_devices_per_storage_instance": 1, "ebs_block_device_volume_size": 500, "ebs_block_device_volume_type": "gp2", "compute_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_gui_password": "Passw0rd", "compute_cluster_gui_username": "admin", "operator_email": null, // Email address for notification "storage_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_key_pair": null, // Use an existing AWS EC2 key pair "storage_cluster_key_pair": null, // Use an existing AWS EC2 key pair "bastion_ssh_private_key": null, // Use bastion ssh private key path "storage_cluster_gui_username": "admin", "storage_cluster_gui_password": "Passw0rd", "bastion_instance_public_ip": null, // Use null if direct connectivity to vpc exists "bastion_security_group_id": null // Use null if direct connectivity to vpc exists }
Minimal Example-2 (create only storage cluster with gp3):
{ "vpc_region": "us-east-1", "vpc_availability_zones": ["us-east-1a"], "resource_prefix": "spectrum-scale", "vpc_id": null, // Use an existing vpc id "vpc_storage_cluster_private_subnets": [], // Use an existing vpc private subnet "vpc_compute_cluster_private_subnets": [], // Use an existing vpc private subnet "total_storage_cluster_instances": 4, "total_compute_cluster_instances": 0, // Make compute nodes count to zero "ebs_block_devices_per_storage_instance": 1, "ebs_block_device_volume_type": "gp3", "ebs_block_device_iops": 3000, "ebs_block_device_throughput": 125, "compute_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_gui_password": "Passw0rd", "compute_cluster_gui_username": "admin", "operator_email": null, // Email address for notification "storage_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_key_pair": null, // Use an existing AWS EC2 key pair "storage_cluster_key_pair": null, // Use an existing AWS EC2 key pair "bastion_ssh_private_key": null, // Use bastion ssh private key path "storage_cluster_gui_username": "admin", "storage_cluster_gui_password": "Passw0rd", "bastion_instance_public_ip": null, // Use null if direct connectivity to vpc exists "bastion_security_group_id": null // Use null if direct connectivity to vpc exists }
Minimal Example-3 (create only storage cluster with iop1, iop2):
{ "vpc_region": "us-east-1", "vpc_availability_zones": ["us-east-1a"], "resource_prefix": "spectrum-scale", "vpc_id": null, // Use an existing vpc id "vpc_storage_cluster_private_subnets": [], // Use an existing vpc private subnet "vpc_compute_cluster_private_subnets": [], // Use an existing vpc private subnet "total_storage_cluster_instances": 4, "ebs_block_devices_per_storage_instance": 1, "ebs_block_device_volume_type": "gp3", "ebs_block_device_iops": 3000, "total_compute_cluster_instances": 0, "compute_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_gui_password": "Passw0rd", "compute_cluster_gui_username": "admin", "operator_email": "sasikanth.eda@in.ibm.com", "storage_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_key_pair": null, // Use an existing AWS EC2 key pair "storage_cluster_key_pair": null, // Use an existing AWS EC2 key pair "bastion_ssh_private_key": null, // Use bastion ssh private key path "storage_cluster_gui_username": "admin", "storage_cluster_gui_password": "Passw0rd", "bastion_instance_public_ip": null, // Use null if direct connectivity to vpc exists "bastion_security_group_id": null // Use null if direct connectivity to vpc exists }
Minimal Example-4 (create only storage cluster with NVMe/nitro instances):
{ "vpc_region": "us-east-1", "vpc_availability_zones": ["us-east-1a"], "resource_prefix": "spectrum-scale", "vpc_id": null, // Use an existing vpc id "vpc_storage_cluster_private_subnets": [], // Use an existing vpc private subnet "vpc_compute_cluster_private_subnets": [], // Use an existing vpc private subnet "total_storage_cluster_instances": 4, "ebs_block_devices_per_storage_instance": 1, "ebs_block_device_volume_type": "gp3", "ebs_block_device_iops": 3000, "ebs_block_device_throughput": 125, "total_compute_cluster_instances": 0, "compute_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_gui_password": "Passw0rd", "compute_cluster_gui_username": "admin", "operator_email": "sasikanth.eda@in.ibm.com", "storage_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_key_pair": null, // Use an existing AWS EC2 key pair "storage_cluster_key_pair": null, // Use an existing AWS EC2 key pair "bastion_ssh_private_key": null, // Use bastion ssh private key path "storage_cluster_gui_username": "admin", "storage_cluster_gui_password": "Passw0rd", "bastion_instance_public_ip": null, // Use null if direct connectivity to vpc exists "bastion_security_group_id": null // Use null if direct connectivity to vpc exists }
Minimal Example-5 (create only compute cluster):
{ "vpc_region": "us-east-1", "vpc_availability_zones": ["us-east-1a"], "resource_prefix": "spectrum-scale", "vpc_id": null, // Use an existing vpc id "vpc_storage_cluster_private_subnets": [], // Use an existing vpc private subnet "vpc_compute_cluster_private_subnets": [], // Use an existing vpc private subnet "total_storage_cluster_instances": 0, // Make storage nodes count to zero "total_compute_cluster_instances": 3, "compute_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_gui_password": "Passw0rd", "compute_cluster_gui_username": "admin", "operator_email": "sasikanth.eda@in.ibm.com", "storage_cluster_image_id": "ami-0b0af3577fe5e3532", "storage_cluster_key_pair": null, // Use an existing AWS EC2 key pair "compute_cluster_key_pair": null, // Use an existing AWS EC2 key pair "bastion_ssh_private_key": null, // Use bastion ssh private key path "storage_cluster_gui_username": "admin", "storage_cluster_gui_password": "Passw0rd" "bastion_instance_public_ip": null, // Use null if direct connectivity to vpc exists "bastion_security_group_id": null // Use null if direct connectivity to vpc exists }
Minimal Example-6 (create remote mount based compute and storage instances):
{ "vpc_region": "us-east-1", "vpc_availability_zones": ["us-east-1a"], "resource_prefix": "spectrum-scale", "vpc_id": null, // Use an existing vpc id "vpc_storage_cluster_private_subnets": [], // Use an existing vpc private subnet "vpc_compute_cluster_private_subnets": [], // Use an existing vpc private subnet "create_separate_namespaces": false, "total_storage_cluster_instances": 4, "total_compute_cluster_instances": 3, "compute_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_gui_password": "Passw0rd", "compute_cluster_gui_username": "admin", "operator_email": "sasikanth.eda@in.ibm.com", "storage_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_key_pair": null, // Use an existing AWS EC2 key pair "storage_cluster_key_pair": null, // Use an existing AWS EC2 key pair "bastion_ssh_private_key": null, // Use bastion ssh private key path "storage_cluster_gui_username": "admin", "storage_cluster_gui_password": "Passw0rd", "bastion_instance_public_ip": null, // Use null if direct connectivity to vpc exists "bastion_security_group_id": null // Use null if direct connectivity to vpc exists }
Minimal Example-7 (create a single cluster with both compute and storage instances):
{ "vpc_region": "us-east-1", "vpc_availability_zones": ["us-east-1a"], "resource_prefix": "spectrum-scale", "vpc_id": "vpc-0b24596ced49f9407", "vpc_storage_cluster_private_subnets": ["subnet-0d74f55f21106371a"], "vpc_compute_cluster_private_subnets": ["subnet-0e2a0fda0cca020a7"], "create_separate_namespaces": false, "total_storage_cluster_instances": 4, "total_compute_cluster_instances": 3, "compute_cluster_key_pair": null, "compute_cluster_image_id": "ami-0b0af3577fe5e3532", "compute_cluster_gui_password": "Passw0rd", "compute_cluster_gui_username": "admin", "operator_email": "sasikanth.eda@in.ibm.com", "storage_cluster_image_id": "ami-0b0af3577fe5e3532", "storage_cluster_key_pair": null, "bastion_ssh_private_key": null, [[** Use bastion ssh private key path **]] "storage_cluster_gui_username": "admin", "storage_cluster_gui_password": "Passw0rd", "bastion_instance_public_ip": null, // Use null if direct connectivity to vpc exists "bastion_security_group_id": null // Use null if direct connectivity to vpc exists }
-
Run
terraform init
andterraform apply -auto-approve
to provision resources.
Name | Version |
---|---|
terraform | ~> 1.0 |
aws | ~> 5.0 |
Name | Description | Type |
---|---|---|
airgap | If true, instance iam profile, git utils which need internet access will be skipped. | bool |
bastion_instance_public_ip | Bastion instance public ip address. | string |
bastion_instance_ref | Bastion instance ref. | string |
bastion_security_group_ref | Bastion security group reference (id/self-link). | string |
bastion_ssh_private_key | Bastion SSH private key path, which will be used to login to bastion host. | string |
bastion_user | Bastion login username. | string |
client_ip_ranges | List of gateway/client ip/cidr ranges. | list(string) |
client_security_group_ref | Client security group reference (id/self-link). | string |
cluster_type | Cluster type to provision. Examples: Storage-only, Compute-only, Combined-compute-storage. | string |
compute_cluster_boot_disk_type | EBS volume types: standard, gp2, gp3, io1, io2 and sc1 or st1. | string |
compute_cluster_filesystem_mountpoint | Compute cluster (accessingCluster) Filesystem mount point. | string |
compute_cluster_gui_password | Password for Compute cluster GUI. | string |
compute_cluster_gui_username | GUI user to perform system management and monitoring tasks on compute cluster. | string |
compute_cluster_image_ref | ID of AMI to use for provisioning the compute cluster instances. | string |
compute_cluster_instance_type | Instance type to use for provisioning the compute cluster instances. | string |
compute_cluster_key_pair | The key pair to use to launch the compute cluster host. | string |
compute_cluster_tags | Additional tags for the compute cluster. | map(string) |
compute_cluster_volume_tags | Additional tags for the compute cluster volume(s). | map(string) |
create_remote_mount_cluster | Flag to select if separate compute and storage cluster needs to be created and proceed for remote mount filesystem setup. | bool |
create_scale_cluster | Flag to represent whether to create scale cluster or not. | bool |
enable_placement_group | If true, a placement group will be created and all instances will be created with strategy - cluster. | bool |
filesystem_parameters | Filesystem parameters in relationship with disk parameters. | list(object({ |
gateway_instance_type | Instance type to use for provisioning the gateway instances. | string |
gateway_tags | Additional tags for the gateway instances. | map(string) |
gateway_volume_tags | Additional tags for the gateway volume(s). | map(string) |
instances_ssh_user_name | Compute/Storage EC2 instances login username. | string |
inventory_format | Specify inventory format suited for ansible playbooks. Examples: ini, json | string |
marked_vm_names_to_attach_disks | Specify the instance names for which disks needs to be attached | list(string) |
operator_email | SNS notifications will be sent to provided email id. | string |
protocol_instance_type | Instance type to use for provisioning the protocol instances. | string |
protocol_tags | Additional tags for the protocol instances. | map(string) |
protocol_volume_tags | Additional tags for the protocol volume(s). | map(string) |
resource_prefix | Prefix is added to all resources that are created. | string |
root_device_encrypted | Whether to enable volume encryption for root device. | bool |
root_device_kms_key_ref | Amazon Resource Name (ARN) of the KMS Key to use when encrypting the root volume. | string |
scale_ansible_repo_clone_path | Path to clone github.com/IBM/ibm-spectrum-scale-install-infra. | string |
spectrumscale_rpms_path | Path that contains IBM Spectrum Scale product cloud rpms. | string |
storage_cluster_boot_disk_type | EBS volume types: standard, gp2, gp3, io1, io2 and sc1 or st1. | string |
storage_cluster_gui_password | Password for Storage cluster GUI | string |
storage_cluster_gui_username | GUI user to perform system management and monitoring tasks on storage cluster. | string |
storage_cluster_image_ref | ID of AMI to use for provisioning the storage cluster instances. | string |
storage_cluster_instance_type | Instance type to use for provisioning the storage cluster instances. | string |
storage_cluster_key_pair | The key pair to use to launch the storage cluster host. | string |
storage_cluster_tags | Additional tags for the storage cluster. | map(string) |
storage_cluster_tiebreaker_instance_type | Instance type to use for the tie breaker instance (will be provisioned only in Multi-AZ configuration). | string |
storage_cluster_volume_tags | Additional tags for the storage cluster volume(s). | map(string) |
total_compute_cluster_instances | Number of EC2 instances to be launched for compute cluster. | number |
total_gateway_instances | Number of EC2 instances to be launched for gateway nodes. | number |
total_protocol_instances | Number of EC2 instances to be launched for protocol nodes. | number |
total_storage_cluster_instances | Number of EC2 instances to be launched for storage cluster. | number |
using_cloud_connection | This flag is intended to enable ansible related communication between a cloud virtual machine (VM) to cloud existing virtual private cloud (VPC). This mode requires variable client_security_group_ref (make sure it is in the same vpc), as the cloud VM security group reference (id/self-link) will be added to the allowed ingress list of scale (storage/compute) cluster security groups. |
bool |
using_direct_connection | This flag is intended to enable ansible related communication between an on-premise virtual machine (VM) to cloud virtual private cloud (VPC) via a VPN or direct connection. This mode requires variable client_ip_ranges , as the on-premise client ip will be added to the allowed ingress list of scale (storage/compute) cluster security groups. |
bool |
using_jumphost_connection | This flag is intended to enable ansible related communication between an on-premise virtual machine (VM) to cloud existing virtual private cloud (VPC). This mode requires variable bastion_user , bastion_instance_public_ip , bastion_security_group_ref , bastion_ssh_private_key , as the jump host related security group reference (id/self-link) will be added to the allowed ingress list of scale (storage/compute) cluster security groups. |
bool |
using_packer_image | If true, gpfs rpm copy step will be skipped during the configuration. | bool |
using_rest_api_remote_mount | If false, skips GUI initialization on compute cluster for remote mount configuration. | string |
vpc_availability_zones | A list of availability zones names or ids in the region. | list(string) |
vpc_compute_cluster_dns_domain | DNS domain name to be used for compute cluster. | string |
vpc_compute_cluster_private_subnets | List of IDs of compute cluster private subnets. | list(string) |
vpc_forward_dns_zone | DNS zone name to be used for scale cluster (Ex: example-zone). | string |
vpc_protocol_private_subnets | List of IDs of protocol private subnets. | list(string) |
vpc_ref | VPC id were to deploy the bastion. | string |
vpc_region | The region where AWS operations will take place. Examples are us-east-1, us-west-2, etc. | string |
vpc_reverse_dns_domain | DNS reverse domain (Ex: 10.in-addr.arpa). | string |
vpc_reverse_dns_zone | DNS reverse zone lookup to be used for scale cluster (Ex: example-zone-reverse). | string |
vpc_storage_cluster_dns_domain | DNS domain name to be used for storage cluster. | string |
vpc_storage_cluster_private_subnets | List of IDs of storage cluster private subnets. | list(string) |
Name | Description |
---|---|
airgap | Air gap environment |
bastion_user | Bastion OS Login username. |
ces_private_ips | CES/Protocol ENI (secondary private) ips. |
cluster_sns_arn | n/a |
compute_cluster_instance_cidrs | n/a |
compute_cluster_instance_details | Compute cluster instance details (map of id, private_ip, dns) |
compute_cluster_security_group_id | Compute cluster security group id. |
gateway_instance_details | Gateway instance details (map of id, private_ip, dns) |
instance_iam_profile | n/a |
placement_group_id | Placement group id. |
protocol_cluster_security_group_id | Protocol cluster security group id. |
protocol_instance_details | Protocol instance details (map of id, private_ip, dns) |
storage_cluster_dec_instance_details | Storage cluster desc instance details (map of id, private_ip, dns) |
storage_cluster_desc_data_volume_mapping | Mapping of storage cluster desc instance ip vs. device path. |
storage_cluster_instance_cidrs | n/a |
storage_cluster_instance_details | Protocol instance details (map of id, private_ip, dns) |
storage_cluster_security_group_id | Storage cluster security group id. |
storage_cluster_with_data_volume_mapping | Mapping of storage cluster instance ip vs. device path. |