사전 작업: 프로바이더 설정, 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 테스트
오토 스케일링 테스트
'AWS > Terraform' 카테고리의 다른 글
[AWS Terraform]EKS 구축 (0) | 2023.07.16 |
---|---|
[AWS Terraform 기초]20. RDS 생성 (0) | 2023.07.14 |
[AWS Terraform 기초]19. AutoScaling Group에 ALB 연결 (0) | 2023.07.13 |
[AWS Terraform 기초]18. AutoScaling Group 생성 (0) | 2023.07.13 |
[AWS Terraform 기초]17. Launch Template(시작 템플릿) 생성 (0) | 2023.07.13 |