├── .gitignore ├── dev └── main.tf ├── modules ├── ec2 │ ├── instances.tf │ └── vars.tf └── vpc │ ├── networking.tf │ └── vars.tf └── prod ├── main.tf └── vars.tf /.gitignore: -------------------------------------------------------------------------------- 1 | # Local .terraform directories 2 | **/.terraform/* 3 | 4 | # .tfstate files 5 | *.tfstate 6 | *.tfstate.* 7 | 8 | # Crash log files 9 | crash.log 10 | 11 | # Ignore any .tfvars files that are generated automatically for each Terraform run. Most 12 | # .tfvars files are managed as part of configuration and so should be included in 13 | # version control. 14 | # 15 | # example.tfvars 16 | -------------------------------------------------------------------------------- /dev/main.tf: -------------------------------------------------------------------------------- 1 | provider "aws" { 2 | region = "ap-south-1" 3 | } 4 | 5 | module "my_vpc" { 6 | source = "../modules/vpc" 7 | vpc_cidr = "192.168.0.0/16" 8 | tenancy = "default" 9 | vpc_id = "${module.my_vpc.vpc_id}" 10 | subnet_cidr = "192.168.1.0/24" 11 | } 12 | 13 | module "my_ec2" { 14 | source = "../modules/ec2" 15 | ec2_count = 1 16 | ami_id = "ami-5a8da735" 17 | instance_type = "t2.micro" 18 | subnet_id = "${module.my_vpc.subnet_id}" 19 | } 20 | -------------------------------------------------------------------------------- /modules/ec2/instances.tf: -------------------------------------------------------------------------------- 1 | resource "aws_instance" "web" { 2 | count = "${var.ec2_count}" 3 | ami = "${var.ami_id}" 4 | instance_type = "${var.instance_type}" 5 | subnet_id = "${var.subnet_id}" 6 | 7 | tags { 8 | Name = "HelloWorld" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /modules/ec2/vars.tf: -------------------------------------------------------------------------------- 1 | variable "ec2_count" { 2 | default = "1" 3 | } 4 | 5 | variable "ami_id" {} 6 | 7 | variable "instance_type" { 8 | default = "t2.micro" 9 | } 10 | 11 | variable "subnet_id" {} 12 | -------------------------------------------------------------------------------- /modules/vpc/networking.tf: -------------------------------------------------------------------------------- 1 | resource "aws_vpc" "main" { 2 | cidr_block = "${var.vpc_cidr}" 3 | instance_tenancy = "${var.tenancy}" 4 | 5 | tags { 6 | Name = "main" 7 | } 8 | } 9 | 10 | resource "aws_subnet" "main" { 11 | vpc_id = "${var.vpc_id}" 12 | cidr_block = "${var.subnet_cidr}" 13 | 14 | tags { 15 | Name = "Main" 16 | } 17 | } 18 | 19 | output "vpc_id" { 20 | value = "${aws_vpc.main.id}" 21 | } 22 | 23 | output "subnet_id" { 24 | value = "${aws_subnet.main.id}" 25 | } 26 | -------------------------------------------------------------------------------- /modules/vpc/vars.tf: -------------------------------------------------------------------------------- 1 | variable "vpc_cidr" { 2 | default = "10.0.0.0/16" 3 | } 4 | 5 | variable "tenancy" { 6 | default = "dedicated" 7 | } 8 | 9 | variable "vpc_id" {} 10 | 11 | variable "subnet_cidr" { 12 | default = "10.0.1.0/24" 13 | } 14 | -------------------------------------------------------------------------------- /prod/main.tf: -------------------------------------------------------------------------------- 1 | provider "aws" { 2 | region = "ap-south-1" 3 | } 4 | 5 | module "my_vpc" { 6 | source = "../modules/vpc" 7 | vpc_cidr = "192.168.0.0/16" 8 | tenancy = "default" 9 | vpc_id = "${module.my_vpc.vpc_id}" 10 | subnet_cidr = "192.168.1.0/24" 11 | } 12 | 13 | module "my_ec2" { 14 | source = "../modules/ec2" 15 | ec2_count = 1 16 | ami_id = "ami-5a8da735" 17 | instance_type = "t2.micro" 18 | subnet_id = "${module.my_vpc.subnet_id}" 19 | } 20 | -------------------------------------------------------------------------------- /prod/vars.tf: -------------------------------------------------------------------------------- 1 | 2 | --------------------------------------------------------------------------------