** Terraform 실행 시 현 디렉토리 내 모든 tf 파일 참조됨
=> 리소스 별 분리 관리 시 편함
최종 목표 아키텍처
STEP 1: DB인스턴스에 사용할 Amazon VPC 생성
0. Terraform 구성 (main.tf)
#Provider 구성
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
#provider 구성
provider "aws" {
region = "ap-northeast-2" # 리전 선택
}
Terraform provider 참고 링크
https://registry.terraform.io/providers/hashicorp/aws/latest/docs
1. VPC 및 서브넷 생성 ( vpc.tf , publicSubnet.tf , privateSubnet.tf )
- 프라이빗 서브넷과 퍼블릭 서브넷 각각 2개 생성
#VPC 생성
# vpc 생성
resource "aws_vpc" "vpc"{
cidr_block = "10.0.0.0/16" # 10.0.x.x
tags = {
Name = "vpc" # 리소스 네임 할당
}
}
VPC 생성 참고 링크
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc
# 서브넷 생성
- 추후 EC2 생성 시 t2.micro를 사용할 예정이므로 선택 가능한 가용영역인 ap-northeast-2a, 2c 설정
#퍼블릭 서브넷 생성
resource "aws_subnet" "pub_subnet1" {
vpc_id = aws_vpc.vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-2a"
tags = {
Name = "public_subnet1"
}
}
resource "aws_subnet" "pub_subnet2" {
vpc_id = aws_vpc.vpc.id
cidr_block = "10.0.2.0/24"
availability_zone = "ap-northeast-2c"
tags = {
Name = "public_subnet2"
}
}
#프라이빗 서브넷 생성
#subnet 생성 - Private Subnet
resource "aws_subnet" "prv_subnet1" {
vpc_id = aws_vpc.vpc.id
cidr_block = "10.0.3.0/24"
availability_zone = "ap-northeast-2a"
tags = {
Name = "private_subnet1"
}
}
resource "aws_subnet" "prv_subnet2" {
vpc_id = aws_vpc.vpc.id
cidr_block = "10.0.4.0/24"
availability_zone = "ap-northeast-2c"
tags = {
Name = "private_subnet2"
}
}
서브넷 생성 참고 링크
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/subnet
2. VPC 보안 그룹 생성 (securityGroup.tf)
- 퍼블릭 웹 서버가 사용할 VPC 보안 그룹 생성
- 프라이빗 DB 웹 서버가 사용할 VPC 보안 그룹 생성
#퍼블릭 VPC 보안 그룹 생성
#Public Security Group
resource "aws_security_group" "publicsg" {
vpc_id = aws_vpc.vpc.id
name = "Terraform-PublicSG"
description = "Terraform-PublicSG"
ingress {
description = "http tcp 80"
protocol = "tcp"
from_port = 80
to_port = 80
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "http tcp 8080"
protocol = "tcp"
from_port = 8080
to_port = 8080
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "http ssh 8080"
protocol = "tcp"
from_port = 22
to_port = 22
cidr_blocks = ["0.0.0.0/0"]
}
egress {
protocol = "-1" #모든 트래픽 허용 (프로토콜 -1, from과 to port 0 설정 시)
from_port = 0
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
}
#프라이빗 DB 보안 그룹 생성
#Private Security Group
resource "aws_security_group" "prvSg" {
vpc_id = aws_vpc.vpc.id
name = "Terraform-PrivateSG"
description = "Terraform-PrivateSG"
ingress {
description = "mysql ssh port"
protocol = "tcp"
from_port = 3306
to_port = 3306
cidr_blocks = ["0.0.0.0/0"]
}
egress {
protocol = "-1" #모든 트래픽 허용
from_port = 0
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
}
보안그룹 생성 참고 링크
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group
3. DB 서브넷 그룹 생성 (RDS.tf)
- RDS 인스턴스가 사용할 VPC 서브넷 그룹을 만들어야 함
# DB서브넷 그룹 생성
resource "aws_db_subnet_group" "DB-prvSg" {
name = "terraform-subnet-group"
subnet_ids = [
aws_subnet.prv_subnet1.id,
aws_subnet.prv_subnet2.id
]
tags = {
"Name" = "terraform-subnet-group"
}
}
RDS 서브넷 그룹 생성 참고 링크
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_instance
'IaC > Terraform' 카테고리의 다른 글
[Mac OS] Terraform 을 이용한 어플리케이션 구성 - Step 3~4 (0) | 2023.02.12 |
---|---|
[Mac OS] Terraform 을 이용한 어플리케이션 구성 - Step 2 (0) | 2023.02.11 |
IaC, Terraform 기초 (Infrastructure as Code, 코드형 인프라, Terraform) (0) | 2023.02.07 |
YAML 이란 (0) | 2023.01.04 |