How to install AWS EC2 install Jenkins with Terraform
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 :)
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
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.
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 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 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 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 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.
- Şimdi AWS Konsolumuzu kontrol ediyoruz, Jenkins EC2 ve SG’miz Terraform aracılığıyla oluşturuldu.
- 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.
- User ve password bilgilerini belirledikten sonra Jenkins kurulumunu tamamlamış olacağız
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.
- Ş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
…
:)