Coder Social home page Coder Social logo

kunduso / add-aws-elb-ec2-terraform Goto Github PK

View Code? Open in Web Editor NEW
14.0 2.0 21.0 59 KB

Add an application load balancer to three Amazon EC2 instances belonging to three separate availability zones in a public subnet using Terraform and GitHub Actions.

Home Page: https://skundunotes.com/2022/07/30/add-an-application-load-balancer-to-aws-ec2-using-terraform/

License: The Unlicense

HCL 95.01% Shell 4.99%
aws-ec2-intances aws-load-balancer aws-vpc github-actions terraform aws-ec2-userdata checkov infracost

add-aws-elb-ec2-terraform's Introduction

License: UnlicenseGitHub pull-requests closedGitHub pull-requests GitHub issues-closedGitHub issues terraform-infra-provisioning checkov-static-analysis-scan infracost Image

Motivation

My objectives was to create an application load balancer and attach that to three Amazon EC2 instances hosted in three different availability zones in a region using Terraform and GitHub Actions.


If you are interested in learning about how to create an external application load balancer with Amazon EC2 instances in a private subnet, check out the code in this repository: add-aws-elb-ec2-private-subnet-terraform
Later, I also automated the process of provisioning the resources using GitHub Actions pipeline and I discussed that in detail at -CI-CD with Terraform and GitHub Actions to deploy to AWS.
If you are interested in learning about how to create an external application load balancer with Amazon EC2 instances in a private subnet, check out the code in this repository: add-aws-elb-ec2-terraform
I also added Infracost estimates to this repository. You can checkout the monthly cost badge at the top of this ReadMe file with the cost details. If you are interested in learning about that, checkout my note on - estimate AWS Cloud resource cost with Infracost, Terraform, and GitHub Actions.


Note: I did not include the concepts of creating the EC2 instances, or installing a certificate, or route53 in this note.

Prerequisites

For this code to function without errors, I created an OpenID connect identity provider in Amazon Identity and Access Management that has a trust relationship with this GitHub repository. You can read about it here to get a detailed explanation with steps.
I stored the ARN of the IAM Role as a GitHub secret which is referred in the terraform.yml file.
As part of the Infracost integration, I also created a INFRACOST_API_KEY and stored that as a GitHub Actions secret. I also managed the cost estimate process using a GitHub Actions variable INFRACOST_SCAN_TYPE where the value is either hcl_code or tf_plan, depending on the type of scan desired.

Usage

Ensure that the policy attached to the IAM role whose credentials are being used in this configuration has permission to create and manage all the resources that are included in this repository.

Review the code including the terraform.yml to understand the steps in the GitHub Actions pipeline. Also review the terraform code to understand all the concepts associated with creating an AWS VPC, subnets, internet gateway, route table, and route table association.
If you want to check the pipeline logs, click on the Build Badge (terrform-infra-provisioning) above the image in this ReadMe.

License

This code is released under the Unlincse License. See LICENSE.

add-aws-elb-ec2-terraform's People

Contributors

kunduso avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

add-aws-elb-ec2-terraform's Issues

Update pipeline command

As part of the aws provider upgrade in PR #29 the pipeline command of terraform init was changed to terraform init -upgrade. The issue is to revert the pipeline command.

Add `tags` for each subnet

Currently, all the subnets get the same tag and I have to navigate to the az to find out which is which. I want to add a count to the subnets tag so that each subnet has a unique tag.

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.