Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/abrar-2510/aws-terraform-jenkins
This repository provides Terraform code for building a basic AWS infrastructure. It includes setting up a virtual network with public and private subnets, launching EC2 servers in both types of subnets, and configuring database (RDS) and in-memory data store (ElastiCache) services.
https://github.com/abrar-2510/aws-terraform-jenkins
ansible aws awslamda awss3 jenkins terraform
Last synced: 4 months ago
JSON representation
This repository provides Terraform code for building a basic AWS infrastructure. It includes setting up a virtual network with public and private subnets, launching EC2 servers in both types of subnets, and configuring database (RDS) and in-memory data store (ElastiCache) services.
- Host: GitHub
- URL: https://github.com/abrar-2510/aws-terraform-jenkins
- Owner: Abrar-2510
- Created: 2024-08-14T20:15:46.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2024-08-17T18:41:44.000Z (6 months ago)
- Last Synced: 2024-10-11T04:40:15.781Z (4 months ago)
- Topics: ansible, aws, awslamda, awss3, jenkins, terraform
- Language: HCL
- Homepage:
- Size: 85.9 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Deploying AWS Infrastructure with Terraform and Jenkins
====
![infra](./assets/draw.svg)
----## Overview
**Networking**
- create vpc
- create internet gateway
- create public route table
- create private route table
- create public route
- attach public route table to subnets
**Computing**
- create security group which allow ssh from 0.0.0.0/0
- create security group that allow ssh and port 3000 from vpc cidr only
- create ec2(bastion) in public subnet with security group from 7
- create ec2(application) private subnet with security group from 8
- create two workspaces terraform and production
- create two variable definition files(.tfvars) for the two environments
- separate network resources into network module
- apply your code to create two environments one in us-east-1 and eu-central-1
- run local-exec provisioner to print the public_ip of bastion ec2
- upload infrastructure code on github project
- create jenkins image with terraform installed inside it
- create pipeline that takes env-param to apply terraform code on certain env
- verify your email in ses service
- create lambda function to send email
- create trigger to detect changes in state file and send the email
**Database**
## Development
Configure your AWS access keys.
```bash
[default]
aws_access_key_id =
aws_secret_access_key =
```
Create the 2 workspaces
```bash
$ terraform workspace new production
$ terraform workspace new terraform
```
Initialize working directory to download the necessary Terraform plugins..
```bash
[default]
terraform init
```
to create the Bastion host and security group run:
```bash
[default]
terraform apply
```
Once the Bastion host has been created, you can connect to it using SSH. The Bastion host will be assigned a public IP address, which you can use to connect to it from the public internet. For example:
```bash
ssh -i /path/to/private/key ec2-user@
```
Replace /path/to/private/key with the path to your private SSH key, and with the public IP address of the Bastion host.
## using jenkins
build the custom image that contains ansible and docker client
```bash
cd jenkins
docker build -t -f jenkins_master.dockerfile .
```
run the image
```bash
docker run --name -p8080:8080 -d -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/terraform:/usr/bin/terraform
```
for jenkins master at http://localhost:8080/
## Jenkins Pipeline Process
1- Add AWS Credentials to Jenkins
Navigate to "Manage Jenkins".
Select "Manage Credentials".
Add a new "AWS Credentials" entry with the necessary access key and secret key.
2- Create a Parameterized Pipeline
Go to "New Item".
Enter a name for your pipeline and select "Pipeline".
In the pipeline configuration, check "This project is parameterized".
Add a choice parameter named ACTION with options like apply and destroy.
3- Build the Infrastructure (Choose Apply)
In the pipeline script, include logic to handle the apply action using Terraform or any relevant tool.
Trigger the build and select "apply" when prompted.
4- Create a New Node
Navigate to "Manage Nodes and Clouds".
Click on "New Node".
Enter a name for the new node and select the appropriate node type (e.g., "Permanent Agent").
Configure the node settings, including remote root directory and launch method.
5- Create a New Pipeline for the Application
Go to "New Item" again.
Enter a name for the application pipeline and select "Pipeline".
Configure the pipeline as required, including SCM settings and build triggers.
6- Build the Pipeline Again and Choose Destroy
Trigger the application pipeline build.
When prompted, select "destroy" to tear down the infrastructure.