End-to-End AWS-Terraform complete Automation
Hello guys, today i am going to show a great setup of Automated AWS and Terraform integration.
What is Terraform?
Terraform is a multi-cloud (IaC) Infrastructure as Code software by HashiCorp written in Go Language using (HCL) HashiCorp Config Language. An open source command line tool that can be used to provide an infrastructure on many different platforms and services such as IBM, AWS, GCP, Azure, OpenStack, VMware and more. By using a plugin-based model to support providers and provisioners, giving it the ability to support almost any service that exposes APIs. It is a cloud-agnostic tool that elegantly defines your IaC, simple and yet powerful; Terraform allows you to build complex, version controlled, collaborative, heterogeneous and disposable systems with very high productivity. It provides built-in dependencies between each tier that handle automatic provisioning of infrastructure, both in the public and private cloud.
Through this, we have a plan to make AWS services automated through Terraform. The services which we are going to create and automate are s3, EC2, CloudFront, Key-Pair, Security Groups, EBS volume ,Snapshots and some operations on these services.
To have a basic about these services please refer the below link :
Today’s our plan is to create such a environment that will integrate GitHub, AWS and Terraform, to create a complete automation. Our Task is :
Step 1: Create the key and security group which allow the port 80.
Step 2: Launch EC2 instance.
Step 3: In this Ec2 instance use the key and security group which we have created in step 1.
Step 4: Launch one Volume (EBS) and mount that volume into /var/www/html
Step 5: Developer have uploded the code into github repo also the repo has some images.
Step 6: Copy the github repo code into /var/www/html
Step 7: Create S3 bucket, and copy/deploy the images from github repo into the s3 bucket and change the permission to public readable.
Step 8: Create a Cloudfront using s3 bucket(which contains images) and use the Cloudfront URL to update in code in /var/www/html .
So lets start the automation integration process. We will create each and every service using terraform.
- Creating the profile of the AWS account, the code will be :
2. Specifying the Provider,
3. Creating a Key-Pair, through Terraform :
4. Creating a Security group, with rules that allow ssh and http traffic.
Here, ingress is specifying the Inbound Rules or we can simply say the traffic input.
5. Creating S3 bucket, with terraform :
6. Cloning the Github images to the local system :
7. Uploading the Images to S3 bucket :
8. Creating a CloudFront distribution :
Hence we have created a cloud front distribution, now we can access our images through this CloudFront domain_name globally.
9. Creating an EC2 Instance,
We have created an instance and now we will create a EBS volume.
10. Creating an EBS volume, in the same Availability Zone in which our instance has been launched.
11. Attaching this external volume to the Instance, as soon as the volume is attached , I have created a null resource that will mount the volume on a particular folder so that the data will be secure even if the instance get terminated.
12. Creating the Snapshot, so that we can create any image or volume from this snapshot, we can think it as a backup file of the volume.
13. Now at last we will automatically launch the Web Page through the link of the web-server , i.e.,
Hence we have created an environment that with a single command it will start all the services mentioned above, a fully automated Environment.
14. We will use terraform command to deploy this web-server. Firstly we will Initialize the terraform or we can say we are adding some necessary plug-ins that are required.
15. We will validate our code , through terraform validate (this command will check the syntax of our code):
16. Finally to start the services, we use terraform apply wuth -auto-approve option so that it will not ask for confirmation, and it will be automatically approved.
17. Now it will automatically open the static web server in the chrome with the start chrome command.
Hence we get our web server with a single command of terraform. Also we have successfully accessed the image that we have uploaded in the S3 bucket.
18. Even the beauty of terraform is it destroy all the services also with a single command, i.e., terraform destroy -auto-approve, again -auto-approve is for automatic approval of destroy command.
The code is Available at my Github Repository in the below link :
Terraform is a great technology, with which we can work on multiple cloud like Azure, OpenStack etc. This was just AWS but we can work on multiple cloud Environment with this single tool and not require the hands-on for each and every cloud’s CLI commands. With single set of commands of Terraform we can work on multiple clouds.
Hence, this was an Exciting and a successful implementation of such a great integration of AWS with Terraform with GitHub.
Thank you !!