준비물 : 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란 항목을 체크해 안보이게 처리해주자
그리고 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까지 메세지가 날라왔다
콘솔에서도 확인해보니 잘 들어와있다
끝!
'공부 > IaC' 카테고리의 다른 글
[Terraform] 실행 환경 분리와 Backend 설정 (AWS/Terraform Cloud) (1) | 2021.10.10 |
---|---|
[Terraform on AWS] Routing Module Example (0) | 2021.10.03 |
[AWS CloudFormation] Security Group Ingress 예제 (YAML) (0) | 2021.06.14 |
[Terraform] 메타변수 count로 반복문, 조건문 사용하기 (0) | 2021.03.26 |
[Terraform on AWS] VPC, Subnet Module 만들어서 사용하기 (0) | 2021.03.24 |
댓글