[Terraform] Terraform Cloud
ํ ๋ผํผ์ CLI๋ฅผ ํตํด ์ฌ์ฉํด๋ณด๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋ฏผ๊ฐํ ๋ณ์๊ฐ๋ค์ด๋ ๋ฐฐํฌ ์ํ์ ๋ํ ๊ฐ(tfstate)๋ค์ ๋ก์ปฌ์ ์ ์ฅ์ ํ๊ฒ ๋๋ค.
์ด๊ฑธ ์ง์์ ์ผ๋ก ๊ด๋ฆฌํ๋ ค๋ฉด ๊ทธ๋ ๊ฒ ์๊ฒจ๋ ๋ถ์ฐ๋ฌผ๋ค์ ์ ๋ถ ์ด๋๋ค ๋ฃ๊ณ ๊ด๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ค. ์ฌ๊ธฐ์๋ git ๊ฐ์๊ฑธ ์จ๋ ๋๊ณ ๊ทธ๋ ๊ฒ ๋ง์ด๋ค ์ฐ๊ธฐ๋ ํ์ง๋ง, Terraform Cloud์ด ๊ทธ์ ๋ํ ๊ฐ์ฅ ํ์ค์ ์ด๊ณ ๊ถ์ฅ๋๋ ํด๊ฒฐ์ฑ ์ด๋ค.
๋น์ฉ
๋ฌด๋ฃ ์ฌ์ฉ๋์ด ๋๋ํ ํธ์ด๋ค.
์ต๋ 5์ธ ํ๊น์ง๋ ๋ฌด๋ฃ๊ณ , ๊ทธ ์ด์์ ์๊ธ์ ๋ฅผ ์จ์ผํ๋ค.
๊ทผ๋ฐ ๋ฐฐํฌ ํ ์ธ์์ด 5๋ช
์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ์ผ๋ง๋ ์๊ฒ ๋?
์ค์๊ท๋ชจ์์๋ ๊ทธ๋ฅ ๋์
ํด๋ ๋ฌด๋ฐฉํ ๊ฒ ๊ฐ๋ค.
์กฐ์ง ๋ง๋ค๊ธฐ
์กฐ์ง์ ๋จผ์ ๋ง๋ค์ด์ผ ํ๋ค.
์กฐ์ง ์ด๋ฆ์ ์ ์ธ๊ณ์ ๊ณ ์ ํ๋, ๊ฒน์น์ง ์๊ฒ ์ ์ง๋๋ค.

๊ทธ๋์ ์ด๋ฐ ๋์๋ณด๋์ ์ง์ ํ๋ฉด ์ ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.

๋ณ์ ์งํฉ(variable set)
์ด๊ฑด ์กฐ์ง ๋ด์์ ๋ชจ๋ ์์ ์์ญ๋ค์ด ๊ณต์ ํ ์ ์๋ ๊ฐ๋ค์ ์ ์ํ ๋ ์ด๋ค.

์ด๋ฅผํ
๋ฉด, AWS ๋ฆฌ์์ค์ ์ ๊ทผํ๊ธฐ ์ํ AWS ์ธ์ฆ ๊ฐ ๊ฐ์๊ฒ ์๊ฒ ๋ค.
์ฌ๋ฌ ์์
๋จ์๋ค์ด ๋ค AWS๋ก ๊ด๋ฆฌ๋๋ค๋ฉด ์ด๊ฑด ๋ณ์ ์ธํธ๋ก ๋นผ์ ๊ด๋ฆฌํ๋๊ฒ ์ฉ์ดํ๋ค.

์ผ์ํฐ๋ธ ์ต์ ์ผ์ ๋ ธ์ถ์ํ์ ์ค์ด๊ณ ํ๊ฒฝ๋ณ์๋ก ์ง์ด๋ฃ๋๋ค.

์ด๋ ๊ฒ.
์ํฌ์คํ์ด์ค ๋ง๋ค๊ธฐ
์ํฌ์คํ์ด์ค๋ ํ๋์ ๋ฐฐํฌ๋จ์๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์๋ฒ๋ฅผ ํ๋ ๋์ฐ๊ณ ์ถ๋ค๋ฉด ๊ทธ๊ฑธ ํ
๋ผํผ์ผ๋ก ๋ง์์ ์ํฌ์คํ์ด์ค๋ก ๋์ฐ๋ฉด ๋๋ค.
ํ ๋ผํผ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ๋ฐ์์ฌ์ง๋ฅผ ๋จผ์ ์ ํ๋ค.
๋๋ version control workflow๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์ค์ฝ๋ ๊ณต๊ธ์๋ฅผ ์ฐ๊ฒฐํ๊ณ , ๋ ํฌ์งํ ๋ฆฌ๋ ๊ณจ๋ผ์ค๋ค.
๋๋ github์ด์๊ณ , ์ด๊ฑธ ์ผ๋ค.
https://github.com/myyrakle/terraform
์ ๋นํ ์ฐ๊ฒฐํ๊ณ , ์์
์ด๋ฆ ์ง๊ณ
๋ง๋ค์ด์ค๋ค.
๋ฐฐํฌํ๊ธฐ
์ฐ์ ์ฐ๊ฒฐํ github ๋ ํฌ์งํ ๋ฆฌ ๋ฃจํธ๊ฒฝ๋ก์ ํ
๋ผํผ ํ๊ฒฝ์ด ๊ตฌ์ฑ๋์ด์์ด์ผ ํ๋ค.
๋ด๊ฐ ์ฌ์ฉํ ๋ ํฌ์งํ ๋ฆฌ๋ ์ด๋ฌ๋ค.
https://github.com/myyrakle/terraform
๋ณ์ 2๊ฐ๊ฐ ์
// ๋ฆฌ์
variable "region" {
description = "region"
type = string
}
// ์๋ฒ๋ช
variable "server_name" {
description = "server name"
type = string
}
ec2 ํ๋๋ง ๋๋ ๋์ฐ๋ ๋จ์ํ ์ฝ๋๋ค.
terraform {
required_providers {
# ์ผ์ข
์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = var.region
}
resource "aws_instance" "server" {
tags = {
Name = var.server_name
}
ami = "ami-0e9bfdb247cc8de84"
instance_type = "t2.micro"
}
๊ทธ๋ผ ์ญ์ ๋ณ์๋ฅผ ๋ฉ๊ฟ์ค์ผ ํ์ง ์๊ฒ ๋๊ฐ?
๋ณ์ ๊ตฌ์ฑ์ผ๋ก ์ด๋ํด์
๊ฐ๋ค์ ์ฑ์๋ฃ์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ์ก์ ๋ฒํผ ๋๋ฌ์ ๊ฐ์ ๋ก ๋ฐฐํฌ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ฑฐ๋, github์์ ์ปค๋ฐ์ ์น๋ฉด ๋ฐฐํฌ๊ฐ ๋ฌ๋ค.
๋ถ์์ ๋จผ์ ํ๊ณ
๋ถ์์ด ์ฑ๊ณตํ๋ฉด ๋ฌด์จ ๋ฆฌ์์ค๋ฅผ ๋์ธ ๊ฒ์ธ์ง ๋ณด์ฌ์ฃผ๊ณ , ํ๋ฝ๋ ๋ฐ๋๋ค.
์ปจํ๊น์ง ํด์ฃผ๋ฉด

๋ฐฐํฌ๊ฐ ์๋ฃ๋๊ณ

์ค์ ๋ก๋ ๋ด์ ๊ฒ์ด๋ค.

๋ฐฐํฌ ์์
๋ฐฐํฌ์ฌํญ์ ์์ ํ๋๊ฑด ์ด๋ ต์ง ์๋ค.
๋ณ์๋ ์์ค์ฝ๋๋ฅผ ์์ ํ๊ณ , commit์ ์น๊ฑฐ๋ ๊ฐ์ ๋ก ๋ฐฐํฌ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ฉด ๋๋ค.
๋๋ server_name์ ๋ฐ๊ฟ์ ec2 ์ด๋ฆ์ ๋ฐ๊พธ๋ ค ํ๋ค.
๋ณ์๋ฅผ ๋ฐ๊พธ๊ณ
๋ฐฐํฌ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ค.
๊ทธ๋ผ ์ด์ ๊ณผ ๋์ผํ ์ ์ฐจ๋ฅผ ๊ฑธ์ณ
์์ ์ด ๋ ๊ฒ์ด๋ค.
๋ฐฐํฌ ์ญ์
๋ฐฐํฌ๋ฅผ ์ญ์ ํ๋ ค๋ฉด workspace setting์ผ๋ก ์ด๋ํด์,
์ queue deploy plan์ ๋๋ฅธ๋ค.
๊ทธ๋ผ ์ญ์ ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์ณ์
์ ๋ฆฌ๊ฐ ๋ ๊ฒ์ด๋ค.