GithubHelp home page GithubHelp logo

mayahnaths / terraform-aws-vpc2custom-ecs Goto Github PK

View Code? Open in Web Editor NEW

This project forked from bradwin/terraform-aws-vpc2custom-ecs

0.0 0.0 0.0 31 KB

Terraform a 3-tier AWS VPC with ECS Deployments

License: GNU General Public License v3.0

HCL 100.00%

terraform-aws-vpc2custom-ecs's Introduction

Terraforming 3-Tier VPC on AWS

Author: Bradwin Cruz

This demonstrates how to create a multi-AZ 3-tier VPC on AWS. The architecture is based on AWS VPC Scenario 2 but with 3 subnets:

  • Public subnet for http servers
  • Private subnet for application servers
  • Private subnet for database servers

As per the AWS blueprint, there is a an internet gateway that routes external traffic from the public subnet to the internet. There is a single NAT gateway associated with the 2 private subnets.

VPC is provisioned using Terraform.

ECS clusters are created on each tier and sample off-the-shelf Docker containers are deployed to demonstrate how containers will be deployed to the tiers. if required, the number of EC2 instances per cluster can be tweaked by editing the service definitions in ecs-task-definition.tf.

Installation

To run this, make sure you have setup the following pre-requisites:

  • Terraform v0.11.7 (or latest)
  • AWS keys set as environment variables using TF_VAR_aws_access_key and TF_VAR_aws_secret_key. Optionally, you may add these in terraform.tfvars

Clone the repository from GitHub:

$ git clone https://github.com/bradwin/tf-aws-vpc2-ecs.git
$ cd tf-aws-vpc2-ecs

Use Terraform to run and create the infrastructure:

$ terraform init
$ terraform apply

The default configuration installs nginx on the web servers. Test your configuration by accessing http://<public-load-balancer>, where public-load-balancer is the load balancer's public IP or DNS.

To teardown, use Terraform destroy:

$ terraform destroy -force

Configuration

The source is designed to deploy parallel structures on 2 availability zones. There are a few settings that can be configured via terraform.tfvars.

Note that the current version supports 2 availability zone only. Ensure that availability_zones and the three subnet variables contain 2 list elements.

Variable Default Description
region "eu-west-1" AWS region to create the VPC on
vpc_name "test_vpc" Name of the VPC
vpc_cidr "192.168.0.0/16" CIDR block for the VPC
availability_zones ["eu-west-1a", "eu-west-1b"] AZs to use, these should both be within the region
public_subnet ["192.168.101.0/24", "192.168.102.0/24"] CIDR blocks for the public subnets
private_subnets ["192.168.1.0/24", "192.168.2.0/24"] CIDR blocks for the app server subnets
database_subnets ["192.168.201.0/24", "192.168.202.0/24"] CIDR blocks for the database subnets
ecs_key_pair_name n/a change this to your key pair

By default, a limited set of rules are defined via ingress/egress in the load-balancer and instance security groups. These can be configured at security-groups.tf to match your application requirements.

EC2 AMI Images

AWS maintains a list of ECS-optimized machine images per region. The most current list is defined in terraform.tfvars as:

ecs_ami = {
  us-east-2      = "ami-64300001"
  us-east-1      = "ami-aff65ad2"
  us-west-2      = "ami-40ddb938"
  us-west-1      = "ami-69677709"
  eu-west-2      = "ami-2218f945"
  eu-west-3      = "ami-250eb858"
  eu-west-1      = "ami-2d386654"
  eu-central-1   = "ami-9fc39c74"
  ap-northeast-2 = "ami-9d56f9f3"
  ap-northeast-1 = "ami-a99d8ad5"
  ap-southeast-2 = "ami-efda148d"
  ap-southeast-1 = "ami-846144f8"
  ca-central-1   = "ami-897ff9ed"
  ap-south-1     = "ami-72edc81d"
  sa-east-1      = "ami-4a7e2826"
}

The list above can be modified as needed.

Files and Modules

The source is organized into separate files and modules for easier maintenance.

File Contents
main.tf AWS provider definition
variables.tf Variables
vpc.tf VPC and subnets
security-groups.tf All security groups for ALBs and instances
application-load-balancer.tf Load balancers
launch-configuration.tf Launch configurations
autoscaling-group.tf Auto scaling groups
ecs-cluster.tf ECS clusters
ecs-instance-role.tf ECS instance role definition
ecs-service-role.tf ECS service role definition
ecs-task-definition.tf All ECS task and service definitions

License

This is provided for free, as in free beer. Use/improve/customize as you see fit.

terraform-aws-vpc2custom-ecs's People

Contributors

bradwin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.