본문 바로가기
INFRA/DevOps

Terraform으로 Aws Infra 구성하기 (기초)

by HemMu 2022. 7. 13.

여기서 다루는 Terraform은 기초로 폴더 및 파일을 나눠 구분하지 않으며 Backend로 Resource를 불러오지 않겠다.

 

이 글에서 Terraform으로 생성 할 아키텍처는 다음과 같다.

(아키텍처 이미지)

 

Terraform에 Aws 공급자를 등록하는 방법은 여러가지인데 이 방법으로 등록하도록 하겠다.

먼저 IAM 사용자를 생성 해 AceessKey와 SecretKey를 기입한다.

provider "aws" {
  access_key = "access_key"
  secret_key = "secret_key"
  region = "ap-northeast-2"
}

 

Root 사용자를 사용해도 되나 Aws에서는 모든 권한을 IAM사용자에 할당하더라도 IAM을 생성하여 사용하는 것을 권장하고 있다.

계정탈취시에 IAM 사용자 같은경우 삭제해버리면 그만이지만 Root계정을 탈취당하면 답이없다.

여기서는 여러 국가중 서울에서 생성할 것이라 region = "ap-northeast-2"로 지정한다.

리전별 명칭은 다음 링크를 참조하자.

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/using-regions-availability-zones.html

 

다음은 VPC를 생성하겠다.

resource "aws_vpc" "ham-vpc" {
  tags = {
    Name = "Ham-vpc"
  }
  cidr_block = "10.177.0.0/16"
}

resource "aws_vpc" "ham-vpc" 에서 ham-vpc는 Terraform끼리 식별하기 위한이름이다.

Name = "Ham-vpc" 에서 "Ham-vpc"는 생성될 VPC의 이름이다.

cidr_block = "10.177.0.0/16" 에서 "10.177.0.0/16"은 VPC CIDR인데 Aws에서 최대 크기의 CIDR는 /16이다.

모두 원하는 값으로 변경해도 된다.
(VPC image)

 

다음은 Subnet을 나눌 것인데

resource "aws_subnet" "pub1" {
  vpc_id     = aws_vpc.ham-vpc.id
  availability_zone = "ap-northeast-2a"
  cidr_block = "10.177.10.0/24"

  tags = {
    Name = "Ham-Pub1"
  }
}
resource "aws_subnet" "pub2" {
  vpc_id     = aws_vpc.ham-vpc.id
  availability_zone = "ap-northeast-2c"
  cidr_block = "10.177.20.0/24"

  tags = {
    Name = "Ham-Pub2"
  }
}

여기서는 두 개만 생성해주겠다.

vpc_id     = aws_vpc.****.id 에서 앞에 생성한 VPC이름을 기입한다.
availability_zone = "ap-northeast-2a"는 가용영역인데 현재 22-07-04기준으로 서울은 a,b,c,d 총 4개의 가용영역이 있다.
cidr_block = "10.177.10.0/24" : CIDR
Name = "Ham-Pub1" : Aws에 생성 될 Subnet이름

(subnet image)

 

다음은 Subnet에 인터넷통신을 위해 Internet GateWay를 생성해주자.

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.ham-vpc.id

  tags = {
    Name = "Ham-IGW"
  }
}

 

vpc_id = aws_vpc.ham-vpc.id : IGW를 생성할 VPC 명칭
Name = "Ham-IGW" : Aws에 생성 될 IGW 이름

(igw image)

 

다음은 IGW를 Subnet에 할당해서 통신이 가능한 Subnet을 설정하자.

resource "aws_route_table" "RT_igw" {
  vpc_id = aws_vpc.ham-vpc.id

  route {
    cidr_block = "0.0.0.0/0" # target(startPoint)
    gateway_id = aws_internet_gateway.igw.id # destination
  }

  tags = {
    Name = "Ham-Pub-RT"
  }
}

resource "aws_route_table_association" "a1" {
  subnet_id      = aws_subnet.pub1.id
  route_table_id = aws_route_table.RT_igw.id
} # igw associate

 

 

cidr_block = "0.0.0.0/0" : 트래픽허용
gateway_id = aws_internet_gateway.igw.id : 연결 할 IGW 명칭


subnet_id      = aws_subnet.pub1.id : 라우팅할 Subnet
route_table_id = aws_route_table.RT_igw.id : 연결 할 라우팅테이블

(아키텍처 이미지)

이렇게 해서 아주 기본적인 인프라가 완성되었다.

 

더 궁금한 사항이 있으면 Terraform 공식문서를 참조하자.

https://registry.terraform.io/providers/hashicorp/aws/latest/docs

 

'INFRA > DevOps' 카테고리의 다른 글

[Docker] Container간 통신 (네트워크)  (0) 2022.07.18
Github의 이해 3  (0) 2022.07.15
Github의 이해 2  (0) 2022.07.12
[Docker] Docker container storage  (0) 2022.07.11
GitHub Script란 무엇일까요?  (0) 2022.07.06

댓글