AWS/Terraform / / 2023. 7. 15. 23:52

[AWS Terraform]Wordpress EC2 인스턴스 생성

반응형

 


사전 작업: 프로바이더 설정, VPC, 키페어, 서브넷, 인터넷 게이트웨이, 라우트 테이블, 보안그룹, 로드발란서, RDS 생성

(퍼블릭 서브넷에 인스턴스를 올릴것이기 때문에 NAT 게이트웨이는 제외)

(서브넷은 가용영역별로 애플리케이션용 퍼블릭 하나, RDS용 프라이빗 하나 생성)

 

생성 방법은 이전 포스팅 참조

 

1. Wordpress 실행 파일 작성

# wordpress.sh
#! /bin/bash
yum install -y httpd
amazon-linux-extras enable php7.4
yum install -y php php-cli php-pdo php-fpm php-json php-mysqlnd mariadb
wget https://ko.wordpress.org/wordpress-5.7.8-ko_KR.tar.gz
tar xvfz wordpress-5.7.8-ko_KR.tar.gz
cp -a ./wordpress/* /var/www/html/
chown apache.apache /var/www/html/*
sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php/g' /etc/httpd/conf/httpd.conf
cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
sed -i 's/database_name_here/데이터베이스이름/g' /var/www/html/wp-config.php
sed -i 's/username_here/사용자이름/g' /var/www/html/wp-config.php
sed -i 's/password_here/비밀번호/g' /var/www/html/wp-config.php
sed -i 's/localhost/데이터베이스 엔드포인트/g' /var/www/html/wp-config.php
cat > /var/www/html/index.html << EOF
<html><body><h1>AWS-WEBSERVER</h1></body></html>
EOF

systemctl enable httpd
systemctl start httpd

 

#! /bin/bash

스크립트를 Bash 셸에서 실행


yum install -y httpd

Apache HTTP 서버 설치


amazon-linux-extras enable php7.4

Amazon Linux에서 PHP 7.4를 사용할 수 있도록 설정

(워드프레스에서는 현재 PHP 7.4 이상 버전을 권장)


yum install -y php php-cli php-pdo php-fpm php-json php-mysqlnd mariadb

PHP 및 관련 패키지 설치


wget https://ko.wordpress.org/wordpress-5.7.8-ko_KR.tar.gz

WordPress 5.7.8 다운로드


tar xvfz wordpress-5.7.8-ko_KR.tar.gz

다운로드한 WordPress 아카이브 압축 해제


cp -a ./wordpress/* /var/www/html/

압축 해제된 WordPress 파일을 /var/www/html 로 복사


chown apache.apache /var/www/html/*

웹 서버가 파일에 대해 쓰기 및 실행 권한을 가질 수 있도록 소유자를 설정


sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php/g' /etc/httpd/conf/httpd.conf

Apache 구성 파일에서 디렉토리 인덱스를 index.html 대신 index.php로 변경


cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php

WordPress 구성 파일 템플릿을 복사하여 구성 파일 생성


sed -i 's/database_name_here/wordpress/g' /var/www/html/wp-config.php

WordPress 구성 파일에서 데이터베이스 이름을 'wordpress'로 설정


sed -i 's/username_here/root/g' /var/www/html/wp-config.php

WordPress 구성 파일에서 사용자 이름을 'root'로 설정


sed -i 's/password_here/12341234/g' /var/www/html/wp-config.php

WordPress 구성 파일에서 비밀번호를 '12341234'로 설정


sed -i 's/localhost/mydb.어쩌구저쩌구.ap-northeast-2.rds.amazonaws.com/g' /var/www/html/wp-config.php

WordPress 구성 파일에서 데이터베이스 호스트를 Amazon RDS 엔드포인트로 변경


cat > /var/www/html/index.html << EOF <html><body><h1>AWS-WEBSERVER</h1></body></html>

index.html 파일 생성

 

systemctl enable httpd

HTTP 서버 부팅시 자동으로 시작되도록 설정


systemctl start httpd

HTTP 서버 시작

 

 

2.Terraform 코드 작성

 

변수 파일 작성

이 포스팅에서는 tag 변수만 사용하지만, VPC 및 서브넷 생성 시 필요한 변수까지 같이 작성함

# var.tf
variable "region" {
  type        = string
  description = "region name"
  default     = "ap-northeast-2"
}

variable "cidr" {
  type        = string
  default     = "10.0.0.0/16"
}

variable "tag" {
  type        = string
  default     = "pmh"
}

 

시작 템플릿 작성

기존 포스팅과 달라진 점:

1. user_data 추가(wordpress 설치)

2. network_interfaces 추가

   - 없으면 퍼블릭 네트워크 설정이 안돼서 접속 불가

   - 보안 그룹을 설정해주지 않으면 오토스케일링 생성 시 오류 발생

# 16_lantemp.tf
resource "aws_launch_template" "pmh_lantemp" {
  name = "${var.tag}-lantemp"
  image_id = "ami-0ea4d4b8dc1e46212"
  instance_type = "t2.micro"
  key_name = "${var.tag}-key"
  network_interfaces {
    associate_public_ip_address = true
    security_groups = [aws_security_group.pmh_sg.id]
  }
  tag_specifications {
    resource_type = "instance"
    tags = {
        Name = "${var.tag}-temp"
    }
  }
  user_data = filebase64("./wordpress.sh")
}

 

오토스케일링 그룹 작성

# 17_autosg.tf
resource "aws_autoscaling_group" "pmh_autosg" {
  name                      = "${var.tag}-autosg"
  min_size                  = 2
  max_size                  = 6
  desired_capacity          = 2
  health_check_grace_period = 60
  health_check_type         = "EC2"
  force_delete              = false
  vpc_zone_identifier       = concat(aws_subnet.pmh_pub[*].id)
  launch_template {
    id      = aws_launch_template.pmh_lantemp.id
    version = "$Latest"
  }
}

 

오토스케일링 그룹과 로드 발란서 연결

# 18_autosgatt
resource "aws_autoscaling_attachment" "pmh-autosgatt" {
  autoscaling_group_name = aws_autoscaling_group.pmh_autosg.id
  lb_target_group_arn = aws_lb_target_group.pmh_albtg.arn
}

 

 

 

3. Terraform 분석 및 적용

 

terraform 파일이 있는 위치에서 아래 명령어 실행

 

# 변경 사항 검토 및 확인
terraform plan

# (대화형 승인 없이)변경 사용항 적용
terraform apply -auto-approve

 

4. 결과

ALB 테스트

 

오토 스케일링 테스트

 

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유