아키텍처
- 단일 EC2 인스턴스 : 웹 서버, 데이터베이스, 파일 저장 등을 처리
- 단일 Elastic IP : 한대의 EC2 인스턴스가 사용하는 고정 public IP (사용 지양)
- Route 53 : Elastic IP를 등록하고 DNS name을 제공하는 AWS의 DNS 서비스
문제점
- 페일오버 없음
- 이중화 없음
→ 한 바구니에 계란을 모두 담지 말자
구현 사항
- EC2 인스턴스 생성
- Elastic IP 할당
- EC2를 웹 서버로 만들기
콘솔 구현
자료
- EC2 Web Server with User Data : https://www.geeksforgeeks.org/create-an-ec2-instance-with-ec2-user-data-script-to-launch-website/
- EIP 할당 : https://goddaehee.tistory.com/192
1. EC2 인스턴스 생성
- 이름 : step1-ec2-console
- AMI : AMI 2 (HVM)
- 인스턴스 유형 : t2.micro
- 네트워크 설정 : 보안 그룹 생성, SSH 및 인터넷 HTTP 트래픽 허용
- 사용자 데이터 (user data) - 아래 참고
- 나머지는 디폴트 설정, 인스턴스 SSH 접속 확인 안할거라 로그인 키 페어 생성할 필요 없음
#!/bin/bash
# Use this for your user data (script from top to bottom)
# install httpd (Linux 2 version)
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
2. Elastic IP 할당
3. Elastic IP와 EC2 연결
4. Elastic IP로 접속한 결과
테라폼 구현
자료
- AWS Provider Credential : https://iamjjanga.tistory.com/20
1. AWS CLI key를 환경변수로 추출
환경변수로 credential을 할당하는 것은 AWS_SHARED_CREDENTIALS_FILE 과 AWS_PROFILE 을 재정의하는 것이다.
export AWS_ACCESS_KEY_ID=^^
export AWS_SECRET_ACCESS_KEY=^^
export AWS_DEFAULT_REGION=ap-northeast-2
provider "aws" {}
2. 테라폼 코드 작성
필요한 설정
- aws provider : zone, access key, secret access key가 필요한데 환경변수에서 가져옴
- ami : ami-0f0cc846201190547 (Amazon Linux 2 AMI)
- instance_type : t2.micro
- user_data
- http 허용 보안그룹 생성 및 인스턴스 할당
- elastic ip 생성 및 인스턴스 할당
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
}
resource "aws_instance" "step1-ec2-terraform" {
ami = "ami-0f0cc846201190547"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.step1-sg-terraform.id]
user_data = <<EOF
#!/bin/bash
# Use this for your user data (script from top to bottom)
# install httpd (Linux 2 version)
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
EOF
tags = {
Name = "step1-ec2-terraform"
}
}
resource "aws_eip" "step1-eip-terraform" {
instance = aws_instance.step1-ec2-terraform.id
vpc = true
}
resource "aws_security_group" "step1-sg-terraform" {
name = "allow HTTP"
ingress {
from_port = 80
to_port = 80
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"]
}
}
3. 프로비저닝 결과 확인
EC2 인스턴스
SG
Elastic IP
생성된 리소스 관계 확인
'Cloud > AWS' 카테고리의 다른 글
EC2 생성하고 Spring Boot 프로젝트 도커로 배포하기 (0) | 2023.10.29 |
---|---|
[AWS Session 기록] 12가지 디자인 패턴으로 알아보는 클라우드 네이티브 마이크로서비스 아키텍처 - 김형일, AWS / 박진현, AWS :: AWS Summit Seoul 2023 (0) | 2023.10.27 |
[AWS Session 기록] 가상 데이터 센터 만들기 - VPC 기본 및 연결 옵션 - 양승도 솔루션즈 아키텍트(AWS 코리아) (1) | 2023.10.27 |
[콘솔과 테라폼 구현] 사용자 > 1000 : 서버와 RDS 이중화, ALB, Read Replica 추가 (1) | 2023.10.22 |
테라폼 실습 : 천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 (1) | 2023.10.22 |