본문 바로가기
공부/IaC

[Terraform CI/CD] Terraform Cloud 사용법 (GitHub -> AWS)

by haejang 2021. 9. 19.
728x90
728x90

 

준비물 : GitHub 계정, AWS User ACCESS/SECRET KEY

Terraform Cloud 계정 만들기 (5인 이하는 무료) : https://app.terraform.io/signup/account

 

이름, 메일, 비번을 가지고 간단하게 회원가입을 하면, Confirm Email Address라는 창이 뜬다

가입할 때 입력한 메일의 메일함을 확인해보면 Terraform Cloud로부터 메일이 하나 와있다

주어진 링크를 클릭하면 아래와 같은 창이 뜬다

 

 

나는 example 없는 Start from scratch를 눌러주었다 -> Organization을 만들라고 뜬다

 

 

Organization은 말 그대로 조직이고, 그 안에 프로젝트들을 여러 개 만들 수 있다

물론 Organization도 여러 개 만들 수 있음

 

 

다른건 뭔지 잘 모르겠으나,,,GitHub이랑 연동할거니까 Version Control Workflow를 선택해준다

 

 

연동 대상을 선택해준다

 

 

이미 로그인되어있는 깃헙 계정의 Repository들이 나타난다

미리 만들어둔 Repository를 선택해주었다

참고로 해당 Repository엔 아래와 같은 vpc.tf 파일 하나만 있다

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

data "aws_availability_zones" "available" {
  state = "available"
}

variable "vpc_cidr" {
  description = "CIDR for the VPC"
  default     = "10.0.0.0/16"
}

variable "tag" {
  default     = "Terraform"
}

resource "aws_vpc" "main" {
  cidr_block           = var.vpc_cidr
  enable_dns_support   = true
  enable_dns_hostnames = true
  tags = {
    Name = "${var.tag}-VPC"
  }
}

resource "aws_subnet" "main_subnet" {
  vpc_id                  = aws_vpc.main.id
  cidr_block              = "10.0.0.0/24"
  availability_zone       = data.aws_availability_zones.available.names[0]
  map_public_ip_on_launch = true
  tags = {
    Name = "${var.tag}-Subnet"
  }
}

 

그러고 그냥 Creae workspace를 눌러주면 새 WorkSpace (하나의 프로젝트) 가 생성된다

 

 

AWS 자격 증명을 위한 키를 변수로 등록하기 위해 Configure variables를 클릭해주자 (Variables 탭을 눌러도 됨)

그러면 Terraform Variables와 Environment Variables 탭이 보인다

차이점은 공식 도큐를 참조하자 : https://www.terraform.io/docs/cloud/workspaces/variables.html#how-terraform-cloud-uses-variables

(tfvars 파일에 적힌 변수와 shell에 박힌 변수라는 차이이긴 하다)

 

아무튼 AWS User의 KEY를 Environment Variable로 추가해보겠다

 

 

  • AWS_ACCESS_KEY_ID : [ACCESS KEY]
  • AWS_SECRET_ACCESS_KEY : [SECRET KEY]

이 때, SECRET KEY는 Sensitive란 항목을 체크해 안보이게 처리해주자

 

Sensitive 설정한 SECRET KEY는 보이지 않음

그리고 Push 시 자동으로 배포가 가능하게 하기 위해서 Settings > General 로 가주자

 

 

Apply Method를 Auto apply로 설정해두지 않으면 Push 때마다 수동으로 Confirm을 해줘야 한다

밑으로 내려가서 Save settings까지 눌러준 후, Runs > Queue Plan을 눌러보면 바로 Plan과 Apply를 실행한다

 

 

AWS 계정으로 들어가보면, 아래와 같이 VPC가 생성된걸 확인할 수 있다

 

 

추가로, Push를 하여 Apply가 일어날 때 마다 Slack으로 알림을 보낼 수 있도록 설정해보겠다

먼저 Slack에서 Webhook URL을 만들어야 한다

 

 

Incoming WebHooks를 검색해 추가해준다

 

 

들어가서 Slack에 추가 > 채널선택 후 수신 웹후크 통합 앱 추가 를 눌러준다

 

 

그런 후 나오는 웹후크 URL을 복사해두자

 

 

Terraform Cloud로 돌아와서, Settings > Notifications > Create a Notification 을 누른다

 

 

슬랙 선택 후 위에서 만든 Webhook URL을 입력해준다

밑의 Triggers는 Only certain events를 클릭하면 특정 EVENT에서만 알림을 올 수 있도록 설정할 수 있다

 

 

Create a notification을 선택하고 나면, Terraform Cloud에서 슬랙 메세지가 바로 하나 날라온다

 

 

서브넷을 하나 더 추가하는 코드로 변경 후 다시 Push를 해보겠다

resource "aws_subnet" "main_subnet2" {
  vpc_id                  = aws_vpc.main.id
  cidr_block              = "10.0.10.0/24"
  availability_zone       = data.aws_availability_zones.available.names[2]
  map_public_ip_on_launch = true
  tags = {
    Name = "${var.tag}-Subnet2"
  }
}

 

조금 기다리니, Create, Plan, Apply까지 메세지가 날라왔다

 

 

콘솔에서도 확인해보니 잘 들어와있다

 

 

끝!

 

 

 

728x90
728x90

댓글