How to install AWS EC2 install Jenkins with Terraform

Uğur Duran
5 min readJul 31, 2023

--

Selamlar dostlar. Bugün sizlere workfordreamseries on ikinci sayısında sizlere Terraform kullanarak AWS EC2 instance’a Jenkins kurulumunu adım adım anlatmak üzere kalemi elime alıyorum :)

AWS EC2 with terraform

KURULUMLAR
- Terraform
- AWS Hesabı
- Yerel olarak yapılandırılmış AWS kimlik bilgileriniz
- AWS CLI yüklü
- AWS Key Pairs— EC2 bulut sunucusuna erişmek için

vcode files

version.tf

terraform {
required_version = ">= 1.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
}
provider "aws" {
region = var.region
profile = "default"
}

variables.tf

variable "region" {
description = "Region in which resources will be provisioned"
type = string
default = "eu-central-1"
}
variable "instance_type" {
description = "EC2 Instance Type"
type = string
default = "t3.medium"
}
variable "instance_keypair" {
description = "AWS EC2 Key pair that need to be associated with EC2 Instance"
type = string
default = "ugurdevops"
}

jenkins-sg.tf

# AWS EC2 Security Group Terraform Module
# Security Group for Jenkins EC2 Instance
module "jenkins-sg" {
source = "terraform-aws-modules/security-group/aws"
version = "3.18.0"
name = "jenkins-sg"
vpc_id = null
description = "Security Group with HTTP & SSH port open for entire VPC Block (IPv4 CIDR), egress ports are all world open"
# Ingress Rules & CIDR Blocks
ingress_rules = ["ssh-tcp", "http-8080-tcp"]
ingress_cidr_blocks = ["0.0.0.0/0"]
# Egress Rule - all-all open
egress_rules = ["all-all"]
}

datasource-ami.tf

data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"]
}

jenkins.sh

#!/bin/bash
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5BA31D57EF5975CA
sudo apt update -y
sudo apt install default-jre -y
java -version
sudo apt update -y
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update -y
sudo add-apt-repository universe -y
sudo apt-get install jenkins -y
sudo service jenkins start
cat /var/lib/jenkins/secrets/initialAdminPassword

main.tf

# AWS EC2 Instance  Terraform Module
module "ec2_instance" {
source = "terraform-aws-modules/ec2-instance/aws"
version = "~> 3.0"
name = "jenkins"
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
key_name = var.instance_keypair
vpc_security_group_ids = [module.jenkins-sg.this_security_group_id]
user_data = file("jenkins.sh")
tags = {
Terraform = "true"
}
}

output.tf

output "jenkins-url" {
description = "url of jenkins dashboard"
value = "${module.ec2_instance.public_ip}:8080"
}

Terraform Komutlarını VS Kodunda Çalıştırın
VS Code’dan AWS’ye terraform komutlarını çalıştırmak için Erişim Anahtarı ve Gizli erişim anahtarını kullanarak bağlanın.

AWS CLI’yi Terraform kurulu Makineye kurun
AWS Kullanıcınız için aws yapılandırması kullanarak Erişim Anahtarını ve Gizli erişim anahtarını saklayın.

aws configure

terraform init

Terraform init komutu, Terraform yapılandırma dosyalarını içeren bir çalışma dizinini başlatmak için kullanılır. Bu, yeni bir Terraform yapılandırması yazıldıktan veya sürüm kontrolünden mevcut bir yapılandırma klonlandıktan sonra çalıştırılması gereken ilk komuttur. Bu komutu birden çok kez çalıştırmak güvenlidir.

terraform init

terraform fmt

Terraform fmt komutu, Terraform yapılandırma dosyalarını standart bir biçime ve stile yeniden yazmak için kullanılır. Bu komut, okunabilirlik için diğer küçük ayarlamalarla birlikte Terraform dil stili kurallarının bir alt kümesini uygular.

terraform fmt

terraform validate

Terraform valide komutu, bir dizindeki yapılandırma dosyalarını doğrular, yalnızca yapılandırmaya atıfta bulunur ve uzak durum, sağlayıcı API’leri vb. gibi herhangi bir uzak hizmete erişmez.

terraform validate

terraform plan

Terraform plan komutu, Terraform’un altyapınızda yapmayı planladığı değişiklikleri önizlemenizi sağlayan bir yürütme planı oluşturur. Varsayılan olarak, Terraform bir plan oluşturduğunda: Terraform durumunun güncel olduğundan emin olmak için mevcut herhangi bir uzak nesnenin mevcut durumunu okur.

terraform plan

terraform apply

Terraform Apply komutu, tıpkı terraform planının yaptığı gibi bir plan gerçekleştirir, ancak daha sonra, ilgili altyapı sağlayıcısının API’sini kullanarak her bir kaynakta planlanan değişiklikleri fiilen gerçekleştirir. Açıkça onayı atlaması söylenmediği sürece, herhangi bir değişiklik yapmadan önce kullanıcıdan onay ister.

terraform apply
  • Şimdi AWS Konsolumuzu kontrol ediyoruz, Jenkins EC2 ve SG’miz Terraform aracılığıyla oluşturuldu.
AWS EC2 instance
AWS Security Group
  • Jenkins’i Yapılandırmak için Bağlantı Noktası 8080'i kullanarak EC2 genel IP’sine bağlanın.
  • Daha sonra ilgili public dns:8080 portuna tarayıcadan açalım. Jenkins kurulumunu tamamlayalım.

Bu Jenkins örneğini bağlayın, belirtilen yoldan Yönetici şifresi alın.

cat /var/lin/jenkins/secrets/initialAdminPassword
install plugins
Install plugins view
  • User ve password bilgilerini belirledikten sonra Jenkins kurulumunu tamamlamış olacağız
jenkins ui

terraform destroy

Terraform yok etme komutu, Terraform projeniz tarafından yönetilen kaynakları sonlandırır. Bu komut, Terraform durumunuzda belirtilen tüm kaynakları sonlandırdığı için terraform Apply’ın tersidir. Mevcut Terraform projesi tarafından yönetilmeyen, başka yerde çalışan kaynakları yok etmez.

terraform destroy
terraform destroy result
  • Şimdi Terraform’u kullanarak Jenkins sunucusunu başarılı bir şekilde yok ediyoruz.

Feedback guys.!!

Umarım bu yazım, AWS ve Terraform kullanımında sizlere yardımcı olur.

İçerikleri takip etmek için beni linkedIn hesabımda takip edebilirsiniz..
LinkedIn:
https://www.linkedin.com/in/ugurduran/
Github link : https://github.com/duranugur/AWS-terraform-jenkins/tree/main

#workfordreamseries
Uğur Duran

:)

--

--