[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์„ ๋ˆ„๋ฅธ๋‹ค.


๊ทธ๋Ÿผ ์‚ญ์ œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์ณ์„œ


์ •๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.