해당 포스팅은 리소스 그래프에 대해 학습을 하며 작성 중인 글입니다.
부정확 내용이 존재할 수 있습니다.
Resource Graph
TF 코드
출처 : https://github.com/SkeltonThatcher/aws-vpc-terraform
파일 구조
| provider.tf
| vars.tf
L vpc.tf
## provider.tf
provider "aws" {
access_key = "${var.aws_access_key}"
secret_key = "${var.aws_secret_key}"
region = "${var.aws_region}"
}
## vars.tf
variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "aws_region" {
default = "eu-west-1"
}
variable "cidr_prefix" {
default = "10.50"
}
## vpc.tf
## VPC + Subnets + IGW
resource "aws_vpc" "main" {
cidr_block = "${var.cidr_prefix}.0.0/16"
enable_dns_support = "true"
enable_dns_hostnames = "true"
tags {
Name = "${var.cidr_prefix}-vpc"
}
}
resource "aws_subnet" "pub_a" {
vpc_id = "${aws_vpc.main.id}"
cidr_block = "${var.cidr_prefix}.1.0/24"
availability_zone = "${var.aws_region}a"
map_public_ip_on_launch = "true"
tags {
Name = "${var.cidr_prefix}.1-pub-a"
}
}
resource "aws_subnet" "pub_b" {
vpc_id = "${aws_vpc.main.id}"
cidr_block = "${var.cidr_prefix}.2.0/24"
availability_zone = "${var.aws_region}b"
map_public_ip_on_launch = "true"
tags {
Name = "${var.cidr_prefix}.2-pub-b"
}
}
resource "aws_subnet" "priv_a" {
vpc_id = "${aws_vpc.main.id}"
cidr_block = "${var.cidr_prefix}.3.0/24"
availability_zone = "${var.aws_region}a"
tags {
Name = "${var.cidr_prefix}.3-priv-a"
}
}
resource "aws_subnet" "priv_b" {
vpc_id = "${aws_vpc.main.id}"
cidr_block = "${var.cidr_prefix}.4.0/24"
availability_zone = "${var.aws_region}b"
tags {
Name = "${var.cidr_prefix}.4-priv-b"
}
}
resource "aws_internet_gateway" "igw" {
vpc_id = "${aws_vpc.main.id}"
}
resource "aws_route_table" "pub" {
vpc_id = "${aws_vpc.main.id}"
route {
cidr_block = "0.0.0.0/0"
gateway_id = "${aws_internet_gateway.igw.id}"
}
tags {
Name = "${var.SERVICE_NAME}-publicRT"
}
}
resource "aws_route_table_association" "pub_a" {
subnet_id = "${aws_subnet.pub_a.id}"
route_table_id = "${aws_route_table.pub.id}"
}
resource "aws_route_table_association" "pub_b" {
subnet_id = "${aws_subnet.pub_b.id}"
route_table_id = "${aws_route_table.pub.id}"
}
Resource Graph 해석
- Resource Node(사각형)
- 개념
- Resource Meta Node는 여러 리소스를 그룹화하는 역할
- 리소스 그래프 해석
- aws_route_table_association.pub_a: 퍼블릭 서브넷 A의 라우트 테이블 연결을 나타냅니다.
- aws_route_table_association.pub_b: 퍼블릭 서브넷 B의 라우트 테이블 연결을 나타냅니다.
- aws_subnet.priv_a: 프라이빗 서브넷 A를 나타냅니다.
- aws_subnet.priv_b: 프라이빗 서브넷 B를 나타냅니다.
- aws_route_table.pub: 퍼블릭 라우트 테이블을 나타냅니다.
- aws_subnet.pub_a: 퍼블릭 서브넷 A를 나타냅니다.
- aws_subnet.pub_b: 퍼블릭 서브넷 B를 나타냅니다.
- aws_internet_gateway.igw: 인터넷 게이트웨이를 나타냅니다.
- aws_vpc.main: 메인 VPC를 나타냅니다.
- 개념
- Resource Meta Node(타원형)
- 개념
- Resource Meta Node는 여러 리소스를 그룹화하는 역할
- 리소스 그래프 해석
- [root] root
- 테라폼 구성의 최상위 노드
- 전체 인프라의 시작점
- [root] meta.count-boundary (count boundary fixup)
- 테라폼에서 count 파라미터가 사용되는경우,
count 파라미터가 변경될 때 이를 처리하기 위해 존재하는 노드 - count 파리미터를 사용되지 않더라도, 자동으로 생성됨.
https://github.com/hashicorp/terraform/issues/20063
- 테라폼에서 count 파라미터가 사용되는경우,
- [root] provider.aws (close)
- 프로바이더 설정 종료
- Terraform이 프로바이더와 연결을 종료하는 시점
- [root] var.cidr_prefix
- [root] var.aws_access_key
- [root] var.aws_region
- [root] var.aws_secret_key
- [root] root
- 개념
- Provider Configuration Node(다이아몬드형)