안녕하세요!
하씨가문의 영광입니다!
지난 시간에 Azure Terraform에서 Script 파일을 통해서 웹 어플리케이션을 만들어봤는데요!
이번 시간에는 AWS Terraform의 Script 파일을 이용하여 웹 어플리케이션을 띄어보도록 하겠습니다!!
Don't have a good day, Have a great day!
▶ 목차
1. AWS Terraform 리소스 사전 작업
- 사전 작업은 지~~난번 시간에 세팅 작업을 한번 구성해보아서 스킵하고 넘어가겠습니다.
- 사전 작업의 내용은 이렇게 구성되어 있습니다.
- AWS IAM 계정 생성
- VSCode 워크스페이스 생성
- AWS CLI 설치
- AWS CLI 사용자 설정
- 테라폼 초기화
참조 문서 : https://btcd.tistory.com/244?category=927626
2. Terraform 리소스 배포
- 앞선 사전 작업을 마쳤다면 지금부터는 리소스 배포를 시작하겠습니다.
2.1 main.tf
- 먼저 Main.tf에서는 aws provider가 설정되어야 합니다.
- 되도록이면 Terraform은 최신버전을 권장합니다.
2.2 VPC
- VPC 구성 목록은 다음과 같습니다.
- VPC
- Subnet
- Internet-gateway
- Route-table
- Route-table-assosiation
# VPC
resource "aws_vpc" "dana-vpc" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "dana-vpc"
}
}
# VPC의 Subnet
resource "aws_subnet" "dana-subnet-1" {
vpc_id = aws_vpc.dana-vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-2a"
tags = {
Name = "dana-subnet-01"
}
}
# 인터넷 게이트웨이
resource "aws_internet_gateway" "dana-ig" {
vpc_id = aws_vpc.dana-vpc.id
tags = {
Name = "dana-ig"
}
}
# 라우팅 테이블
resource "aws_route_table" "dana-rt" {
vpc_id = aws_vpc.dana-vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.dana-ig.id
}
tags = {
"Name" = "dana-rt"
}
}
# 라우팅 테이블에 서브넷 연결
resource "aws_route_table_association" "dana-rta" {
subnet_id = aws_subnet.dana-subnet-1.id
route_table_id = aws_route_table.dana-rt.id
}
2.3 Security Group
- 다음은 보안 그룹입니다.
- Inbound-Rule - HTTP(Web), SSH(원격접속), ICMP(Ping)
- Outbound-Rule
# 보안 그룹
resource "aws_security_group" "jinwoo-sg" {
name = "Allow Basic"
description = "Allow HTTP,SSH"
vpc_id = aws_vpc.dana-vpc.id
# HTTP 허용
ingress = [
{
description = "Allow HTTP"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
prefix_list_ids = null
security_groups = null
self = null
},
# SSH 허용
{
description = "Allow SSH"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["211.205.9.172/32"]
ipv6_cidr_blocks = ["::/0"]
prefix_list_ids = null
security_groups = null
self = null
},
# ICMP 허용
{
description = "Allow ICMP"
from_port = 0
to_port = 0
protocol = "icmp"
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
prefix_list_ids = null
security_groups = null
self = null
}
]
# 아웃바운드
egress = [
{
description = "ALL"
from_port = 0
to_port = 0
protocol = -1
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
prefix_list_ids = null
security_groups = null
self = null
}
]
tags = {
"Name" = "web-sg"
}
}
2.4 EC2
- 다음은 인스턴스의 구성 목록과 리소스 구성입니다.
- Network-interface
- instance
- Key-pair
- Eip
# 네트워크 인터페이스
resource "aws_network_interface" "dana-ni" {
subnet_id = aws_subnet.dana-subnet-1.id
security_groups = [aws_security_group.jinwoo-sg.id]
tags = {
"Name" = "dana-web-ni"
}
}
# 인스턴스
resource "aws_instance" "dana-web" {
ami = "ami-0e4a9ad2eb120e054" # 기존 프리티어 이미지입니다.
instance_type = "t2.small" # 프리티어
key_name = "dana_key" # 키는 로컬에서 발급받은 키입니다.
availability_zone = "ap-northeast-2a"
# 위에서 만든 네트워크 인터페이스를 부착하는 부분입니다.
network_interface {
network_interface_id = aws_network_interface.dana-ni.id
device_index = 0
}
# 중요!! 오늘의 주제에 해당하는 스크립트 파일입니다.
# 원래는 파일을 생성하여 파일경로를 추가해야 하는 데 그 작업은 다음 시간에 알려드리겠습니다.
# 설명하자면 인스턴스를 업데이트 아파치를 설치하고 시작하는 부분입니다.
user_data = <<EOF
#!/bin/bash
sudo yum update -y
sudo yum install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd
EOF
tags = {
"Name" = "dana-web"
}
}
# 로컬에서 만든 PUB키를 AWS에 등록하는 부분입니다.
resource "aws_key_pair" "dana_key" {
key_name = "dana_key"
public_key = "${file("./dana.key.pub")}"
}
# Elastic IP
resource "aws_eip" "dana-eip" {
vpc = true
instance = aws_instance.dana-web.id # 원하는 인스턴스에 부착
depends_on = [
aws_internet_gateway.dana-ig
]
}
2.5 파일 구성
- 파일은 main, ec2, sg, vpc로 구성하였고, 각 파일에 만들어둔 테라폼 코드를 입력하시면 됩니다!!
3. 웹 어플리케이션
- 모든 작업이 끝났다면 지~~~난 시간에 배웠던 PowerShell에서 apply를 실행시킵니다!
terraform apply --auto-approve
- 적용이 완료되면 다음과 같이 리소스 배포가 다되었다는 화면을 출력합니다!
- 그리고 웹 어플리케이션에 접속하여 웹 화면이 잘 나오는지 확인해봅시다!!
다음과 같이 나왔다면 성공입니다!
만약에 오류가 발생한다면 키를 생성하는 부분, 스크립트 파일을 확인해보시길 바랍니다!
추가적으로 다음 주제는 테라폼안에서 각 리소스들에 대한 설명과 역할에 대해서 설명드리겠습니다..!
이렇게 테라폼에서 script 파일을 적용시켜 웹 어플리케이션을 띄어봤는데요!
간단하면서 세밀한 작업이 필요한 거 같아요!
인스턴스에 접속해서 커멘드를 날릴 필요없이 테라폼내에서 바로 적용하여 웹을 띄우는 작업은
실질적으로 굉장히 편리한 거 같습니다!
오늘도 읽어주셔서 감사합니다!
'INFRA > Operation' 카테고리의 다른 글
Terraform 리소스에 대한 이해 - Azure 1편 (0) | 2022.08.21 |
---|---|
쿠버네티스 이론 STEP5 Service (3) Ingress - 1 (0) | 2022.08.18 |
쿠버네티스 이론 STEP4 Service (2) LB, ExternalName (0) | 2022.08.05 |
쿠버네티스 STEP3 Service, NodePort, ClusterIP (0) | 2022.08.05 |
Terraform Script.sh 사용 설치 방법 - Azure (0) | 2022.08.04 |
댓글