아래는 AWS EC2 인스턴스를 HTTPS로 연결하기 위해 필요한 리소스들(ACM, Route 53, EC2 등)을 Terraform을 사용하여 Infrastructure as Code(IaC)로 설정하는 예제
이 예제에서는 다음을 포함합니다:
- ACM 인증서: 도메인에 대한 SSL 인증서 발급
- Route 53: 도메인에 대한 DNS 레코드 생성
- EC2 인스턴스: 웹 서버로 사용할 EC2 인스턴스 생성
- 보안 그룹: HTTPS 및 HTTP 트래픽을 허용하는 보안 그룹 설정
Terraform 구성 예제
provider "aws" {
region = "us-east-1" # 원하는 리전을 설정합니다.
}
# Route 53 Hosted Zone 생성
resource "aws_route53_zone" "main_zone" {
name = "example.com" # 사용할 도메인을 입력합니다.
}
# ACM 인증서 발급
resource "aws_acm_certificate" "cert" {
domain_name = aws_route53_zone.main_zone.name
validation_method = "DNS"
subject_alternative_names = [
"*.example.com" # 서브도메인을 추가할 수 있습니다.
]
tags = {
Name = "ACM Certificate for example.com"
}
}
# Route 53 인증서 검증을 위한 DNS 레코드 생성
resource "aws_route53_record" "cert_validation" {
count = length(aws_acm_certificate.cert.domain_validation_options)
zone_id = aws_route53_zone.main_zone.zone_id
name = aws_acm_certificate.cert.domain_validation_options[count.index].resource_record_name
type = aws_acm_certificate.cert.domain_validation_options[count.index].resource_record_type
ttl = 60
records = [aws_acm_certificate.cert.domain_validation_options[count.index].resource_record_value]
}
# ACM 인증서 검증 후 인증서 상태 업데이트
resource "aws_acm_certificate_validation" "cert_validation" {
certificate_arn = aws_acm_certificate.cert.arn
validation_record_fqdns = aws_route53_record.cert_validation[*].fqdn
}
# EC2 인스턴스에 사용할 보안 그룹 생성
resource "aws_security_group" "web_sg" {
vpc_id = aws_vpc.main_vpc.id # 기존에 생성한 VPC ID를 입력합니다.
ingress {
from_port = 80 # HTTP 포트
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443 # HTTPS 포트
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
# EC2 인스턴스 생성
resource "aws_instance" "web_instance" {
ami = "ami-0c55b159cbfafe1f0" # Amazon Linux 2 AMI
instance_type = "t2.micro"
subnet_id = aws_subnet.public_subnet_az1.id # 기존에 생성한 서브넷 ID를 입력합니다.
security_groups = [aws_security_group.web_sg.name]
tags = {
Name = "WebServer"
}
# EC2 인스턴스가 시작될 때 웹 서버를 설정하기 위한 userdata
user_data = <<-EOF
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello, HTTPS from EC2!</h1>" > /var/www/html/index.html
EOF
}
# Route 53 A 레코드 생성 (EC2 인스턴스 IP로 연결)
resource "aws_route53_record" "www" {
zone_id = aws_route53_zone.main_zone.zone_id
name = "www" # www 서브도메인
type = "A"
alias {
name = aws_instance.web_instance.public_ip
zone_id = aws_instance.web_instance.id
evaluate_target_health = false
}
}
설명
- Route 53 Hosted Zone: 도메인을 관리하기 위한 호스팅 영역을 생성
- ACM 인증서: HTTPS를 사용할 도메인에 대한 SSL 인증서를 생성합니다. DNS 검증을 통해 인증서를 발급
- EC2 인스턴스: Apache 웹 서버가 설치된 EC2 인스턴스를 생성하고, 기본 HTML 페이지를 설정
- 보안 그룹: HTTP와 HTTPS 트래픽을 허용하는 보안 그룹을 생성합
- Route 53 A 레코드: EC2 인스턴스의 공인 IP로 접근할 수 있도록 A 레코드를 생성
이 코드를 실행하기 위해서는 AWS CLI와 Terraform이 설정되어 있어야 하며, 도메인(example.com)을 자신의 도메인으로 변경해야 합니다. ACM 인증서 발급과 Route 53 레코드 생성에는 시간이 소요될 수 있다.
'AWS' 카테고리의 다른 글
Lambda 대상 추가 (0) | 2024.11.11 |
---|---|
AWS terraform data 사용법 (0) | 2024.10.25 |
AWS Lambda 에 HTTPS 인증서 적용하기 (0) | 2024.10.24 |
AWS Route53 records, alias_records, subject_alternative_names 설명 (0) | 2024.10.24 |
AWS VPC, 2개 AZ, Subnet, Internet G/W, Application LB, Route53, DirectConnect, Transit G/W 연결 IaC 테스트 방법 (0) | 2024.10.23 |