├── backend.tf ├── jenkins-server-script.sh ├── jenkins-server.tf ├── outputs.tf ├── provider.tf ├── terraform.tfvars ├── variables.tf └── vpc.tf /backend.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | backend "s3" { 3 | bucket = "primuslearning-app" 4 | region = "us-east-1" 5 | key = "jenkins-server/terraform.tfstate" 6 | } 7 | } -------------------------------------------------------------------------------- /jenkins-server-script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # install jenkins 4 | 5 | sudo yum update 6 | sudo wget -O /etc/yum.repos.d/jenkins.repo \ 7 | https://pkg.jenkins.io/redhat-stable/jenkins.repo 8 | sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key 9 | sudo yum upgrade -y 10 | sudo amazon-linux-extras install java-openjdk11 -y 11 | sudo yum install jenkins -y 12 | sudo systemctl enable jenkins 13 | sudo systemctl start jenkins 14 | 15 | # install git 16 | sudo yum install git -y 17 | 18 | # install terraform 19 | 20 | sudo yum install -y yum-utils 21 | sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo 22 | sudo yum -y install terraform 23 | 24 | # install kubectl 25 | 26 | sudo curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.23.6/bin/linux/amd64/kubectl 27 | sudo chmod +x ./kubectl 28 | sudo mkdir -p $HOME/bin && sudo cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin -------------------------------------------------------------------------------- /jenkins-server.tf: -------------------------------------------------------------------------------- 1 | data "aws_ami" "latest-amazon-linux-image" { 2 | most_recent = true 3 | owners = ["amazon"] 4 | filter { 5 | name = "name" 6 | values = ["amzn2-ami-hvm-*-x86_64-gp2"] 7 | } 8 | filter { 9 | name = "virtualization-type" 10 | values = ["hvm"] 11 | } 12 | } 13 | 14 | resource "aws_instance" "myapp-server" { 15 | ami = data.aws_ami.latest-amazon-linux-image.id 16 | instance_type = var.instance_type 17 | key_name = "jenkins-server" 18 | subnet_id = aws_subnet.myapp-subnet-1.id 19 | vpc_security_group_ids = [aws_default_security_group.default-sg.id] 20 | availability_zone = var.avail_zone 21 | associate_public_ip_address = true 22 | user_data = file("jenkins-server-script.sh") 23 | tags = { 24 | Name = "${var.env_prefix}-server" 25 | } 26 | } -------------------------------------------------------------------------------- /outputs.tf: -------------------------------------------------------------------------------- 1 | output "ec2_public_ip" { 2 | value = aws_instance.myapp-server.public_ip 3 | } -------------------------------------------------------------------------------- /provider.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | aws = { 4 | source = "hashicorp/aws" 5 | version = "4.52.0" 6 | } 7 | } 8 | } 9 | 10 | provider "aws" { 11 | region = "us-east-1" 12 | } -------------------------------------------------------------------------------- /terraform.tfvars: -------------------------------------------------------------------------------- 1 | vpc_cidr_block = "10.0.0.0/16" 2 | subnet_cidr_block = "10.0.10.0/24" 3 | avail_zone = "us-east-1a" 4 | env_prefix = "dev" 5 | instance_type = "t2.small" -------------------------------------------------------------------------------- /variables.tf: -------------------------------------------------------------------------------- 1 | variable "vpc_cidr_block" {} 2 | variable "subnet_cidr_block" {} 3 | variable "avail_zone" {} 4 | variable "env_prefix" {} 5 | variable "instance_type" {} -------------------------------------------------------------------------------- /vpc.tf: -------------------------------------------------------------------------------- 1 | resource "aws_vpc" "myapp-vpc" { 2 | cidr_block = var.vpc_cidr_block 3 | tags = { 4 | Name = "${var.env_prefix}-vpc" 5 | } 6 | } 7 | 8 | resource "aws_subnet" "myapp-subnet-1" { 9 | vpc_id = aws_vpc.myapp-vpc.id 10 | cidr_block = var.subnet_cidr_block 11 | availability_zone = var.avail_zone 12 | tags = { 13 | Name = "${var.env_prefix}-subnet-1" 14 | } 15 | } 16 | 17 | resource "aws_internet_gateway" "myapp-igw" { 18 | vpc_id = aws_vpc.myapp-vpc.id 19 | tags = { 20 | Name = "${var.env_prefix}-igw" 21 | } 22 | } 23 | 24 | resource "aws_default_route_table" "main-rtb" { 25 | default_route_table_id = aws_vpc.myapp-vpc.default_route_table_id 26 | route { 27 | cidr_block = "0.0.0.0/0" 28 | gateway_id = aws_internet_gateway.myapp-igw.id 29 | } 30 | tags = { 31 | Name = "${var.env_prefix}-main-rtb" 32 | } 33 | } 34 | 35 | resource "aws_default_security_group" "default-sg" { 36 | vpc_id = aws_vpc.myapp-vpc.id 37 | ingress { 38 | from_port = 22 39 | to_port = 22 40 | protocol = "tcp" 41 | cidr_blocks = ["0.0.0.0/0"] 42 | } 43 | ingress { 44 | from_port = 8080 45 | to_port = 8080 46 | protocol = "tcp" 47 | cidr_blocks = ["0.0.0.0/0"] 48 | } 49 | egress { 50 | from_port = 0 51 | to_port = 0 52 | protocol = "-1" 53 | cidr_blocks = ["0.0.0.0/0"] 54 | } 55 | tags = { 56 | Name = "${var.env_prefix}-default-sg" 57 | } 58 | } --------------------------------------------------------------------------------