diff --git a/.gitignore b/.gitignore index 4eee092b08..5b685ca11a 100644 --- a/.gitignore +++ b/.gitignore @@ -57,4 +57,39 @@ node_modules coverage typechain cache -artifacts \ No newline at end of file +artifacts + +# Local .terraform directories +**/.terraform/* + +# .tfstate files +*.tfstate +*.tfstate.* + +# Crash log files +crash.log +crash.*.log + +# Exclude all .tfvars files, which are likely to contain sensitive data, such as +# password, private keys, and other secrets. These should not be part of version +# control as they are data points which are potentially sensitive and subject +# to change depending on the environment. +*.tfvars +*.tfvars.json + +# Ignore override files as they are usually used to override resources locally and so +# are not checked in +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Include override files you do wish to add to version control using negated pattern +# !example_override.tf + +# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan +# example: *tfplan* + +# Ignore CLI configuration files +.terraformrc +terraform.rc \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 9f438b20c8..b3352d5a1b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,4 +5,3 @@ services: command: --dev --http --http.addr 0.0.0.0 ports: - 8545:8545 - - 30303:30303 diff --git a/terraform/eks-terraform/0-provider.tf b/terraform/eks-terraform/0-provider.tf new file mode 100644 index 0000000000..b51e434688 --- /dev/null +++ b/terraform/eks-terraform/0-provider.tf @@ -0,0 +1,12 @@ +provider "aws" { + region = "us-east-1" +} + +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 4.56" + } + } +} diff --git a/terraform/eks-terraform/1-vpc.tf b/terraform/eks-terraform/1-vpc.tf new file mode 100644 index 0000000000..7971522345 --- /dev/null +++ b/terraform/eks-terraform/1-vpc.tf @@ -0,0 +1,10 @@ +resource "aws_vpc" "main" { + cidr_block = "10.0.0.0/16" + + enable_dns_support = true + enable_dns_hostnames = true + + tags = { + Name = "main" + } +} diff --git a/terraform/eks-terraform/10-csi-driver-addon.tf b/terraform/eks-terraform/10-csi-driver-addon.tf new file mode 100644 index 0000000000..7e523b9701 --- /dev/null +++ b/terraform/eks-terraform/10-csi-driver-addon.tf @@ -0,0 +1,6 @@ +resource "aws_eks_addon" "csi_driver" { + cluster_name = aws_eks_cluster.demo.name + addon_name = "aws-ebs-csi-driver" + addon_version = "v1.16.0-eksbuild.1" + service_account_role_arn = aws_iam_role.eks_ebs_csi_driver.arn +} diff --git a/terraform/eks-terraform/2-igw.tf b/terraform/eks-terraform/2-igw.tf new file mode 100644 index 0000000000..94eac0a7e9 --- /dev/null +++ b/terraform/eks-terraform/2-igw.tf @@ -0,0 +1,7 @@ +resource "aws_internet_gateway" "igw" { + vpc_id = aws_vpc.main.id + + tags = { + Name = "igw" + } +} diff --git a/terraform/eks-terraform/3-subnets.tf b/terraform/eks-terraform/3-subnets.tf new file mode 100644 index 0000000000..629e941798 --- /dev/null +++ b/terraform/eks-terraform/3-subnets.tf @@ -0,0 +1,49 @@ +resource "aws_subnet" "private_us_east_1a" { + vpc_id = aws_vpc.main.id + cidr_block = "10.0.0.0/19" + availability_zone = "us-east-1a" + + tags = { + "Name" = "private-us-east-1a" + "kubernetes.io/role/internal-elb" = "1" + "kubernetes.io/cluster/demo" = "owned" + } +} + +resource "aws_subnet" "private_us_east_1b" { + vpc_id = aws_vpc.main.id + cidr_block = "10.0.32.0/19" + availability_zone = "us-east-1b" + + tags = { + "Name" = "private-us-east-1b" + "kubernetes.io/role/internal-elb" = "1" + "kubernetes.io/cluster/demo" = "owned" + } +} + +resource "aws_subnet" "public_us_east_1a" { + vpc_id = aws_vpc.main.id + cidr_block = "10.0.64.0/19" + availability_zone = "us-east-1a" + map_public_ip_on_launch = true + + tags = { + "Name" = "public-us-east-1a" + "kubernetes.io/role/elb" = "1" + "kubernetes.io/cluster/demo" = "owned" + } +} + +resource "aws_subnet" "public_us_east_1b" { + vpc_id = aws_vpc.main.id + cidr_block = "10.0.96.0/19" + availability_zone = "us-east-1b" + map_public_ip_on_launch = true + + tags = { + "Name" = "public-us-east-1b" + "kubernetes.io/role/elb" = "1" + "kubernetes.io/cluster/demo" = "owned" + } +} diff --git a/terraform/eks-terraform/4-nat.tf b/terraform/eks-terraform/4-nat.tf new file mode 100644 index 0000000000..0e99235574 --- /dev/null +++ b/terraform/eks-terraform/4-nat.tf @@ -0,0 +1,18 @@ +resource "aws_eip" "nat" { + vpc = true + + tags = { + Name = "nat" + } +} + +resource "aws_nat_gateway" "nat" { + allocation_id = aws_eip.nat.id + subnet_id = aws_subnet.public_us_east_1a.id + + tags = { + Name = "nat" + } + + depends_on = [aws_internet_gateway.igw] +} diff --git a/terraform/eks-terraform/5-routes.tf b/terraform/eks-terraform/5-routes.tf new file mode 100644 index 0000000000..47b2f0fd77 --- /dev/null +++ b/terraform/eks-terraform/5-routes.tf @@ -0,0 +1,45 @@ +resource "aws_route_table" "private" { + vpc_id = aws_vpc.main.id + + route { + cidr_block = "0.0.0.0/0" + nat_gateway_id = aws_nat_gateway.nat.id + } + + tags = { + Name = "private" + } +} + +resource "aws_route_table" "public" { + vpc_id = aws_vpc.main.id + + route { + cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.igw.id + } + + tags = { + Name = "public" + } +} + +resource "aws_route_table_association" "private_us_east_1a" { + subnet_id = aws_subnet.private_us_east_1a.id + route_table_id = aws_route_table.private.id +} + +resource "aws_route_table_association" "private_us_east_1b" { + subnet_id = aws_subnet.private_us_east_1b.id + route_table_id = aws_route_table.private.id +} + +resource "aws_route_table_association" "public_us_east_1a" { + subnet_id = aws_subnet.public_us_east_1a.id + route_table_id = aws_route_table.public.id +} + +resource "aws_route_table_association" "public_us_east_1b" { + subnet_id = aws_subnet.public_us_east_1b.id + route_table_id = aws_route_table.public.id +} diff --git a/terraform/eks-terraform/6-eks.tf b/terraform/eks-terraform/6-eks.tf new file mode 100644 index 0000000000..a60c0d0d51 --- /dev/null +++ b/terraform/eks-terraform/6-eks.tf @@ -0,0 +1,40 @@ +resource "aws_iam_role" "demo" { + name = "eks-cluster-demo" + + assume_role_policy = <