반응형
이 글은 Terraform을 활용한 AWS 환경 구축 가이드 3탄
11_inst.tf
EC2 인스턴스 설정 및 고정 IP 연결
data "aws_ami" "main_ami" {
most_recent = true # 가장 최신의 AMI를 반환
filter {
name = "name"
# "amzn2-ami-kernel-5.10*-hvm-*-x86_64-gp2" 패턴에 맞는 이름을 가진 AMI들을 검색
values = ["amzn2-ami-kernel-5.10*-hvm-*-x86_64-gp2"]
}
filter {
name = "virtualization-type"
# 가상화 유형 필터
values = ["hvm"]
# 하드웨어 가상화 방식(HVM) 사용
}
owners = ["amazon"]
# 아마존 공식 소유의 AMI만 검색
}
# - VPC 내에서 사용할 수 있는 고정 퍼블릭 IP 주소를 할당
resource "aws_eip" "main_eip1" {
domain = "vpc"
}
# - 앞서 생성한 EIP를 특정 EC2 인스턴스에 연결
resource "aws_eip_association" "main_eassoc" {
instance_id = aws_instance.main_web1.id
allocation_id = aws_eip.main_eip1.id
}
# AWS EC2 인스턴스 생성
resource "aws_instance" "main_web1" {
ami = data.aws_ami.main_ami.id
instance_type = "t2.micro"
key_name = "main-key"
vpc_security_group_ids = [aws_security_group.main-sg.id]
availability_zone = "ap-northeast-2a"
subnet_id = aws_subnet.main-pub-sub.id
private_ip = "10.0.0.11"
user_data = file("userdata.sh")
}
# 출력 변수: 할당된 Elastic IP의 퍼블릭 IP 주소를 출력
output "instance_ip" {
value = aws_eip.main_eip1.public_ip
}
- 최신 Amazon Linux AMI를 조회하여 EC2 인스턴스에 할당한다
- Elastic IP를 생성하고 EC2 인스턴스와 연결하여 고정 IP를 부여한다
- 사용자 데이터를 통해 인스턴스 초기 설정을 자동화할 수 있다
📌 12_rds.tf
RDS(MySQL) 데이터베이스 설정
# AWS RDS 인스턴스 생성에 필요한 주문 가능한 DB 인스턴스 정보를 조회
data "aws_rds_orderable_db_instance" "main_rds" {
engine = "mysql"
# 사용할 데이터베이스 엔진: MySQL
engine_version = "8.0.40"
# MySQL 엔진 버전: 8.0.40
license_model = "general-public-license"
# 라이선스 모델: 일반 공개 라이선스
storage_type = "gp2"
# 스토리지 타입: gp2 (일반 목적 SSD)
instance_class = "db.t3.micro"
# 인스턴스 클래스: db.t3.micro (소규모 인스턴스)
}
# AWS DB 서브넷 그룹 리소스 정의
resource "aws_db_subnet_group" "main-db-subnet" {
name = "main-db-subnet"
subnet_ids = [aws_subnet.main-pria.id, aws_subnet.main-pric.id, aws_subnet.main-puba.id, aws_subnet.main-pubc.id, aws_subnet.main-dba.id, aws_subnet.main-dbc.id]
# RDS 인스턴스가 위치할 서브넷들의 ID
tags = {
Name = "main-db-subnet"
}
}
# AWS RDS 인스턴스 리소스 생성
resource "aws_db_instance" "main-db" {
identifier = "main-db"
db_name = "wordpress"
allocated_storage = 20
storage_type = data.aws_rds_orderable_db_instance.main_rds.storage_type
engine = data.aws_rds_orderable_db_instance.main_rds.engine
engine_version = data.aws_rds_orderable_db_instance.main_rds.engine_version
license_model = data.aws_rds_orderable_db_instance.main_rds.license_model
instance_class = data.aws_rds_orderable_db_instance.main_rds.instance_class
username = "root"
password = "It12345!"
parameter_group_name = "default.mysql8.0"
availability_zone = "ap-northeast-2a"
publicly_accessible = true
# 퍼블릭 접근 허용 여부 (외부에서 접근 가능)
skip_final_snapshot = true
# 인스턴스 삭제 시 최종 스냅샷 생성을 건너뜀
vpc_security_group_ids = [aws_security_group.main-sg.id]
# 연결할 VPC 보안 그룹 ID 리스트
db_subnet_group_name = aws_db_subnet_group.main-db-subnet.name
performance_insights_enabled = false
# 성능 인사이트 기능 비활성화
storage_encrypted = false
# 스토리지 암호화 사용 여부 (암호화 없음)
auto_minor_version_upgrade = false
# 마이너 버전 자동 업그레이드 기능 비활성화
monitoring_interval = 0
# 모니터링 간격 (0: 모니터링 비활성화)
backup_retention_period = 0
# 백업 보존 기간 (0: 백업 비활성화)
tags = {
Name = "main-db"
}
}
- MySQL 기반 RDS 데이터베이스를 구성하며, 데이터베이스는 프라이빗과 퍼블릭 서브넷 환경에서 구성된 서브넷 그룹에 속한다
- 데이터베이스 엔진 버전, 인스턴스 클래스, 스토리지 타입 등의 정보를 데이터 소스에서 가져와 구성
**userdata.sh**
#! /bin/bash
# Amazon Linux Extras를 사용하여 PHP 8.0 활성화
amazon-linux-extras enable php8.0
yum install -y wget tar httpd php php-cli php-pdo php-fpm php-mysqlnd
wget https://ko.wordpress.org/wordpress-6.7.2-ko_KR.tar.gz
tar xvfz wordpress-6.7.2-ko_KR.tar.gz -C /root/
cp -ar /root/wordpress/* /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,wp-config.php}
sed -i "s/database_name_here/wordpress/g" /var/www/html/wp-config.php
sed -i "s/username_here/root/g" /var/www/html/wp-config.php
sed -i "s/password_here/It12345\!/g" /var/www/html/wp-config.php
sed -i "s/localhost/자신의 RDS에서 엔드포인트값/g" /var/www/html/wp-config.php
# 간단한 헬스 체크 페이지 생성 (health.html)
cat > /var/www/html/health.html <<eof
<html><body><h1>health-testpage</h1></body></html>
eof
systemctl enable --now httpd
여기서 포인트는 자신의 데이터베이스 RDS들어가서 엔드포인트 확인해서 잘 대입
wordpress를 아예 서버에 올려두고싶다면 1편부터 쭉 따라하기
Terraform을 통해 AWS 클라우드 환경에서 EC2 및 RDS 인프라 구성을 자동화하여 효율적으로 관리할 수 있다
반응형