All the module calls made from this folder from dev.tf file.
- This folder contains following files
- dev.tf (modules file )
- backend.tf ( contains backend configuration of the terraform, which contains terraform state files).
- outputs.tf ( output's of the resource attributes after terraform apply)
- version.tf ( contains terraform version and cloud provider version)
- variables.tf (all the variable which required by the terraform modules.)
A Terraform Module is a canonical, reusable, best-practices definition for how to run a single piece of infrastructure, such as a database or server cluster. Each Module is written using a combination of Terraform and scripts (mostly bash) and include automated tests, documentation, and examples.
- Every module has:
- Input variables: to accept values from the calling module.
- Output values: to return results to the calling module, which it can then use to populate arguments elsewhere.
- Resources: to define one or more infrastructure objects that the module will manage.
- Source: A source can be any local folder path or remote module located in source control systems like git.
Usage: The following module call will create EKS cluster and cluster node pool resources. Resources will be configured by using the following input variables on this module.
# Create Elastic Kubernetes Service
module "eks" {
source = "../modules/eks"
name = local.name_prefix
region = var.region
environment = var.environment
desired_capacity = var.desired_capacity
max_size = var.max_size
min_size = var.min_size
instance_type = var.instance_type
role_arn = module.iam.role_arn
worker_role_arn = module.iam.worker_role_arn
subnet_ids = module.vpc.aws_subnet_private_ids
security_group_id = module.vpc.security_group_id
public_subnets = module.vpc.aws_subnet_public_ids
instance_profile_name = module.iam.iam_instance_profile
tags = local.tags
}
Usage: The following module call will create IAM resources. Resources will be configured using the following input variables on this modules.
# Create Identity Access Management
module "iam" {
source = "../modules/iam"
name = local.name_prefix
region = var.region
environment = var.environment
tags = local.tags
}
Usage: The following module call will create AWS virtual private network(VPC), subnets, firewall rules, security groups, NAT Gateway's, Internet Gateway, Elastic IP's, route tables, route table associations.
# Create Virtual Private Cloud
module "vpc" {
source = "../modules/vpc"
name = local.name_prefix
environment = var.environment
region = var.region
public_cidr_block = var.public_cidr_block
private_cidr_block = var.private_cidr_block
tags = local.tags
}
Usage: The following module call will create Amazon s3 bucket. Resources will be configured using following input variables on this module.
# Create S3 bucket
module "s3" {
source = "../modules/s3"
name = local.name_prefix
environment = var.environment
tags = local.tags
}
Name | Version |
---|---|
terraform | >= 0.12 |
aws | ~> 3.0 |
Name | Version |
---|---|
aws | ~> 3.0 |
Name | Source | Version |
---|---|---|
eks | ../modules/eks | |
iam | ../modules/iam | |
s3 | ../modules/s3 | |
vpc | ../modules/vpc |
Name | Type |
---|---|
aws_caller_identity.current | data source |
Name | Description | Type | Default | Required |
---|---|---|---|---|
desired_capacity | Desired capacity for the auto scaling Group. | number |
"3" |
no |
environment | Name of the environment where infrastructure is being built. | string |
n/a | yes |
instance_type | Type of instance to be used for the Kubernetes cluster. | string |
"r5d.2xlarge" |
no |
max_size | Maximum number of the instances in autoscaling group | number |
"5" |
no |
min_size | Minimum number of the instances in autoscaling group | nunmber |
"3" |
no |
name | Name is the prefix to use for resources that needs to be created. | string |
n/a | yes |
private_cidr_block | List of private subnet cidr blocks | list(string) |
[ |
no |
public_cidr_block | List of public subnet cidr blocks | list(string) |
[ |
no |
region | The AWS region where terraform builds resources. | string |
"us-east-1" |
no |
resource_owner | The name of the Project Owner | string |
"Datastax" |
no |
Name | Description |
---|---|
bucket_id | Bucket Name (aka ID) |
cluster_Endpoint | The endpoint for your EKS Kubernetes API |
cluster_name | Name of the EKS cluster |
cluster_version | Version of the EKS cluster |