Amazon Web Services
Prerequisites
Download and install Terraform.
Verify the installation using the terraform
command.
$ terraform
You should see output similar to the following.
Usage: terraform [--version] [--help] <command> [args]
...
Common commands:
apply Builds or changes infrastructure
console Interactive console for Terraform interpolations
destroy Destroy Terraform-managed infrastructure
env Workspace management
fmt Rewrites config files to canonical format
Create a Terraform configuration file
Create a Terraform configuration file called yugabyte-db-config.tf
and add the following details to it. The Terraform module can be found in the terraform-aws-yugabyte GitHub repository.
provider "aws" {
# Configure your AWS account credentials here.
access_key = "ACCESS_KEY_HERE"
secret_key = "SECRET_KEY_HERE"
region = "us-west-2"
}
module "yugabyte-db-cluster" {
# The source module used for creating AWS clusters.
source = "github.com/Yugabyte/terraform-aws-yugabyte"
# The name of the cluster to be created, change as per need.
cluster_name = "test-cluster"
# Existing custom security group to be passed so that you can connect to the instances.
# Make sure this security group allows your local machine to SSH into these instances.
custom_security_group_id="SECURITY_GROUP_HERE"
# AWS key pair that you want to use to ssh into the instances.
# Make sure this key pair is already present in the noted region of your account.
ssh_keypair = "SSH_KEYPAIR_HERE"
ssh_private_key = "SSH_PRIVATE_KEY_PATH_HERE"
# Existing vpc and subnet ids where the instances should be spawned.
vpc_id = "VPC_ID_HERE"
subnet_ids = ["SUBNET_ID_HERE"]
# Replication factor of the YugabyteDB cluster.
replication_factor = "3"
# The number of nodes in the cluster, this cannot be lower than the replication factor.
num_instances = "3"
# The AWS region for the cluster to be created
region_name = "REGION_NAME_HERE"
# The availability zones for the instances, the length
# of AZs must match num_instances and can contain duplicates.
availability_zones = ["AZ1_HERE", "AZ2_HERE", "AZ3_HERE"]
}
If you do not have a custom security group, you would need to remove the ${var.custom_security_group_id}
variable in main.tf
, so that the aws_instance
looks as follows:
resource "aws_instance" "yugabyte_nodes" {
count = "${var.num_instances}"
...
vpc_security_group_ids = [
"${aws_security_group.yugabyte.id}",
"${aws_security_group.yugabyte_intra.id}",
"${var.custom_security_group_id}"
]
Create a cluster
Init terraform first if you have not already done so.
$ terraform init
Run the following to create the instances and bring up the cluster:
$ terraform apply
After the cluster is created, you can go to the URL http://<node ip or dns name>:7000
to view the UI. You can find the node's IP or DNS by running the following:
$ terraform state show aws_instance.yugabyte_nodes[0]
You can check the state of the nodes at any point by running the following command:
$ terraform show
Verify resources created
The following resources are created by this module:
-
module.yugabyte-db-cluster.aws_instance.yugabyte_nodes
The AWS instances.
For a cluster named
test-cluster
, the instances are namedyb-ce-test-cluster-n1
,yb-ce-test-cluster-n2
,yb-ce-test-cluster-n3
. -
module.yugabyte-db-cluster.aws_security_group.yugabyte
The security group that allows the various clients to access the YugabyteDB cluster.
For a cluster named
test-cluster
, this security group is namedyb-ce-test-cluster
, with the ports 7000, 9000, 9042, and 6379 open to all other instances in the same security group. -
module.yugabyte-db-cluster.aws_security_group.yugabyte_intra
The security group that allows communication internal to the cluster.
For a cluster named
test-cluster
, this security group is namedyb-ce-test-cluster-intra
with the ports 7100, 9100 open to all other instances in the same security group. -
module.yugabyte-db-cluster.null_resource.create_yugabyte_universe
A local script that configures the newly created instances to form a new YugabyteDB universe.
[Optional] Destroy the cluster
To destroy what you just created, you can run the following command:
$ terraform destroy