2022. 4. 25. 08:35ใAmazon Web Service/Terraform
Terraform Tutorial - Modules ์ ๋ฆฌ ๋ฐ ํด์
1. ๋ชจ๋ ์์ฝ
๋ชจ๋์ ์ ํ์ํ ๊น?
- Configuration์ ๊ตฌ์ฑํ๊ธฐ ์ํด์ - ๋ชจ๋์ ์ฐ๊ด๋ ์ค์ ๋ค์ ๋ฌถ์ด๋ ์ผ๋ก์จ ํ๊ฒฝ ๊ตฌ์ฑ(configuration)์ ์ฐพ๊ณ , ์ดํดํ๊ณ , ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ ํจ์ฌ ์ฝ๊ฒ ๋ฐ๊พผ๋ค. ๊ตฌ์กฐ๊ฐ ๋ณต์กํ ์ธํ๋ผ๋ ์๋ฐฑ, ์์ฒ ์ค์ configuration์ ์ ์ฉํด์ผ ํ ๋๊ฐ ์๋ค. ๋ชจ๋์ ํตํด ํ๊ฒฝ ๊ตฌ์ฑ๋ค์ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ ์งํ ์ ์๋ค.
- Configuration ์บก์ํ - ๋ชจ๋์ ๋ ๋ค๋ฅธ ์ฅ์ ์ ํ๊ฒฝ ๊ตฌ์ฑ์ ๊ฐ๋ณ์ ์ธ ๋ ผ๋ฆฌ ๊ตฌ์ฑ ์์๋ก ์บก์ํํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์บก์ํ๋ ์๋ํ์ง ์์๋ ์ค์๋ก ๋ค๋ฅธ ์ธํ๋ผ๊ฐ ๋ณ๊ฒฝ๋๋ ๋ฑ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ, ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ฆฌ์์ค์ ๋์ผํ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋จ์ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์๋ค.
- Configuration ์ฌ์ฌ์ฉ - ๋ชจ๋ ํ๊ฒฝ๊ตฌ์ฑ์ ์ฒ์๋ถํฐ ์์ฑํ๋ ๊ฑด ์๊ฐ ๋ญ๋น์ผ๋ฟ๋ง ์๋๋ผ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋ฑ! ์ข์ ํ๋์ด๋ค. ๋ณธ์ธ, ์๋๋ฉด ํ์๋ค, ๊ทธ๋ฆฌ๊ณ ํ ๋ผํผ ๊ด๊ณ์๋ค์ด ๋ง๋ค์ด ๋ ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์๊ฐ์ ์ ์ฝํ๊ณ , ์๋ฌ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์์ฑํ ๋ชจ๋์ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๊ณต์ ํ๋ฉฐ ์ค์ค๋ก์ ๋ฉ์ง ์์ ์ credit์ ์ค ์ ์๋ค.โญ๏ธ
- ์ผ๊ด์ฑ ์ ๊ณต & best practice(๋ญ๋ผ๊ณ ๋ฒ์ญํด์ผํ ์ง..๐ค) - ๋ชจ๋์ ๋น์ ์ ํ๊ฒฝ๊ตฌ์ฑ์ ์ผ๊ด์ฑ์ ์ ๊ณตํ๋ค. ์ผ๊ด์ฑ์ ๋ณต์กํ ํ๊ฒฝ๊ตฌ์ฑ์ ์ดํดํ๊ธฐ ์ฝ๊ฒ ํ ๋ฟ๋ง ์๋๋ผ, ๋ชจ๋ ๊ตฌ์ฑ์ ๋ชจ๋ฒ์ ์ธ ์ ์ฉ์ ํ ์ ์๋๋ก ํ๋ค. ์๋ฅผ ๋ค์ด, ํด๋ผ์ฐ๋ ์ ๊ณต ์ ์ฒด๋ค์ Amazon S3๋ Google Cloud Storage buckets ๊ฐ์ storage ์๋น์ค๋ค์ ๊ตฌ์ฑํ๋๋ฐ ๊ต์ฅํ ๋ง์ ์ต์ ์ ์ ๊ณตํ๋ค. ์๋ชป๋ ๋ณด์ ์คํ ๋ฆฌ์ง์ ๊ด๋ จํ์ฌ ๋ง์ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ , ๋ณต์กํ ํ๊ฒฝ ๊ตฌ์ฑ ๋๋ฌธ์ ์ด๋ฌํ ์๋น์ค๋ฅผ ์ค์๋ก ์๋ชป ๊ตฌ์ฑํ๊ธฐ ์ฝ๋ค.
๊ทธ๋ผ Terraform ๋ชจ๋์ ๋ญ๊น?
ํ ๋ผํผ์์์ ๋ชจ๋์ ํ๋์ ํ๋ก์ ํธ ๋ค๋ ํ ๋ฆฌ์ ์๋ Terraform confgiuration ํ์ผ์ ๋ชจ๋ ๋ปํ๋ค. ํ๋ ์ด์์ .tf ํ์ผ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๊ฐ๋จํ๋ ๋ณต์กํ๋ ์ด๊ฒ๋ค์ ๋ชจ๋ configuration์ด๋ค. ๋ง์ฝ ํ ๋ผํผ ๋ช ๋ น์ด๋ค์ ๋ฐ๋ก ์ ์ฒด ํ๋ก์ ํธ ํด๋์์ ์ ์ฉํ๋ค๋ฉด, ๊ทธ ํด๋๋ root module๋ก ๊ฐ์ฃผ๋๋ค. ์ด๋ฐ ๋งฅ๋ฝ์์ ๋ชจ๋ ํ ๋ผํผ ํ๊ฒฝ ๊ตฌ์ฑ ํ์ผ๋ค์ '๋ชจ๋'์ ๊ตฌ์ฑ์์ด ๋๋ ์ ์ด๋ค.
~/terraform_test
.
โโโ README.md
โโโ main.tf
โโโ variables.tf
โโโ outputs.tf
์ด ์์์์๋ terraform_test์ด๋ผ๋ ํด๋๊ฐ root_modlue์ด ๋๋๊ฒ์ด๋ค.
๋ชจ๋ ํธ์ถ
Terraform ๋ช
๋ น์ ์ผ๋ฐ์ ์ผ๋ก ํ์ฌ ์์
๋๋ ํ ๋ฆฌ์ ์๋ ๊ตฌ์ฑ ํ์ผ๋ง ์ง์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ ํ๊ฒฝ ๊ตฌ์ฑ์์๋ ๋ชจ๋ ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋์ ํธ์ถํ ์ ์๋ค!(๋ญ๊ฐ ํ์ด์ฌ ๊ฐ๊ธฐ๋~) Terraform์ ๋ชจ๋ ๋ธ๋ก์ ๋ง๋๋ฉด ํด๋น ๋ชจ๋์ ๊ตฌ์ฑ ํ์ผ์ ๋ก๋ํ๊ณ ์ฒ๋ฆฌํ๋ค.
๋ค๋ฅธ ๊ตฌ์ฑ์ ์ํด ํธ์ถ๋๋ ๋ชจ๋์ ํด๋น ๊ตฌ์ฑ์ "ํ์ ๋ชจ๋"์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ก์ปฌ & ์๊ฒฉ ๋ชจ๋
๋ชจ๋์ ๋ก์ปฌ์ด๋ ์๊ฒฉ์์ ๊ฐ์ ธ์ฌ ์ ์๋ค. Terraform์ Terraform Registry, ๋ฒ์ ์ปจํธ๋กค ์์คํ , HTTP URLs, Terraform Cloud๋ Terraform Enterprise ๊ฐ์ธ ๋ชจ๋ registires๋ฑ ๋ค์ํ ์๊ฒฉ source๋ฅผ ์ง์ํ๋ค.
๋ชจ๋ best practices
ํ
๋ผํผ ๋ชจ๋์ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฐพ์ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํจํค์ง ๋๋ ๋ชจ๋์ ๊ฐ๋
๊ณผ ์ ์ฌํ๋ฉฐ, ๋น์ทํ ์ฅ์ ์ ์ ๊ณตํ๋ค. ๋๋ถ๋ถ์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ค์ Terraform ๊ตฌ์ฑ๋ค์ ์์์ ์ธ๊ธํ ์ด์ ์ ์ ๊ณตํ๊ธฐ ์ํด ๊ฑฐ์ ํญ์ ๋ชจ๋์ ์ฌ์ฉํด์ผ ํ๋ค.(๊ทธ๋ฅ ํญ์ ๋ชจ๋ ์ฐ๋ผ๋ ๊ฑฐ ๊ฐ์)
๋ชจ๋ Terraform ์ด์ฉ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ชจ๋ฒ ์ฌ๋ก(best practices)๋ฅผ ๋ฐ๋ผ ๋ชจ๋์ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๋ค.
- provider์ ์ด๋ฆ์ terraform-<PROVIDER>-<NAME>๋ก ์ง์ ํ๋ค. Terraform Cloud ๋๋ Terraform Enterprise ๋ชจ๋ registires์ ๋ชจ๋์ ๋ฑ๋กํ๋ ค๋ฉด ์ด ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค.
- ๋ชจ๋์ ์ผ๋์ ๋๊ณ !! ํ๊ฒฝ ๊ตฌ์ฑ ์์ฑ์ ์์ํ์. ๊ฐ์ธ์ด ๊ด๋ฆฌํ๋ ๋ณต์กํ Terraform ๊ตฌ์ฑ์์๋ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ชจ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์๊ฐ์ด ์ ๊ฒ ๊ฑธ๋ฆด ๊ฒ์ด๋ค.
- ๋ก์ปฌ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๊ณ ์บก์ํํ์. ์๊ฒฉ ๋ชจ๋์ ์ฌ์ฉํ์ง ์๊ฑฐ๋, ๊ฒ์ํ์ง ์๋๋ผ๋ ์ฒ์๋ถํฐ ๋ชจ๋ ์ธก๋ฉด์์ ํ๊ฒฝ ๊ตฌ์ฑ์ ๋ง๋ค๋ฉด ์ธํ๋ผ๊ฐ ๋ณต์กํด์ ธ๋ ์ ์ง ๋ณด์ํ๊ณ ์ ๋ฐ์ดํธํด์ผ ํ๋ ๋ถ๋ด์ ํฌ๊ฒ ์ค์ผ ์ ์๋ค.
- ๊ณต์ฉ Terraform Registry(https://registry.terraform.io/)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฉํ ๋ชจ๋์ ์ฐพ์. ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ฐ์ ์ธ ์ธํ๋ผ ์๋๋ฆฌ์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ค๋ฅธ ์ฌ๋์ ์์ ์ ์์กดํ์ฌ ๊ตฌ์ฑ์ ๋ณด๋ค ๋น ๋ฅด๊ณ ํ์คํ๊ฒ ๊ตฌํํ ์ ์๋ค.
- ๋ชจ๋์ ๊ฒ์ํ๊ณ ํ๊ณผ ๊ณต์ ํ์. ๋๋ถ๋ถ์ ์ธํ๋ผ๋ ํ ํ์ ๋ง์ ์ฌ๋๋ค์ ์ํด ๊ด๋ฆฌ๋๋ฉฐ, ๋ชจ๋์ ํ์ด ํจ๊ป ํ๋ ฅํ์ฌ ์ธํ๋ผ๋ฅผ ๋ง๋ค๊ณ ์ ์งํ ์ ์๋ ์ค์ํ ๋ฐฉ๋ฒ์ด๋ค. ์์์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด ๋ชจ๋์ ๊ณต๊ฐ ๋๋ ๋น๊ณต๊ฐ๋ก ๊ฒ์ํ ์ ์๋ค.
2. Registry์์ ๋ชจ๋ ์ฌ์ฉํด๋ณด๊ธฐ
์ฌ์ ์๊ตฌ์ฌํญ
ํด๋น ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผํ๊ธฐ ์ํด ์ฌ์ ์ ์ค๋นํด์ผํ๋ ๊ฒ๋ค
- AWS ๊ณ์
- Terrafrom CLI
Terraform Registry ์ฌ์ฉํ๊ธฐ
Terraform Registry page for the VPC module ๋งํฌ๋ก ์ ์!
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "2.21.0"
# insert the 8 required variables here
}
๋ชจ๋์ ํธ์ถํ ๋๋ source ๊ฐ ํ์ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์์ Terraform์ Terraform Registry์์ ์ฃผ์ด์ง ๋ฌธ์์ด(source ๊ฐ)๊ณผ ์ผ์นํ๋ ๋ชจ๋์ ๊ฒ์ํ ๊ฒ์ด๋ค. ๋ชจ๋์ ์๋ณธ์ ๋ํ URL ๋๋ ๋ก์ปฌ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค. ๊ฐ๋ฅํ ๋ชจ๋ ์์ค ๋ชฉ๋ก์ Terraform ์ค๋ช
์๋ฅผ ์ฐธ์กฐํ์.
source ์ธ์ ํ์ํ ์ธ์๋ version์ด๋ค. ๋ฒ์ ์ ํตํด ๋ก๋ํ ๋ชจ๋์ ๋ฒ์ ์ ์ ์ํ ์ ์๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ ์ฌ์ฉํ๋ ๋ชจ๋์ ์ ํํ ๋ฒ์ ๋ฒํธ๋ฅผ ์ง์ ํ๋ค. ๋ชจ๋ ์ค๋ช
์์์ ๋ฒ์ ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณผ ์ ์๋ค.
๋ชจ๋ ๋ธ๋ก์ ๋ํ ๋ค๋ฅธ ์ธ์๋ค์ ๋ชจ๋์ ๋ํ ์
๋ ฅ ๋ณ์๋ก ์ฒ๋ฆฌ๋๋ค.
Terraform Configuration ์์ฑํ๊ธฐ
์ด ํํ ๋ฆฌ์ผ์์๋ ์ฐ๋ฆฌ๋ ๋ชจ๋์ ์ด์ฉํด์ Virtual Private Cloud(VPC)์ 2๊ฐ์ EC2 ์ธ์คํด์ค๊ฐ ์๋ AWS ํ๊ฒฝ์ ๋ง๋ค์ด ๋ณผ ๊ฒ์ด๋ค!
1. ๊นํ ๋ ํฌ ํด๋ก , ~/learn-terraform-modules-use ํด๋๋ก ์ด๋
git clone https://github.com/hashicorp/learn-terraform-modules-use.git
cd learn-terraform-modules-use
2. main.tf์์ ํ๊ฒฝ ๊ตฌ์ฑ์ ๋์๊ฒ ๋ง๊ฒ ๋ฐ๊พธ์ด์ค๋ค
region์ ๋ฐ๊ฟ์ฃผ๊ณ , ami ๊ฐ๋ ์๋์ ๊ฐ์ด ๋ฐ๊ฟ์ค๋ค(ํํ ๋ฆฌ์ผ์ ์๋ ami ๊ฐ์ ์ฐ๋ฆฌ ๋ฆฌ์ ์ด๋ ์ ๋ง๋ค). ์ธ์คํด์ค๋ micro๋ก ์ ์ง(๋์ด...์์ผ๋๊น..)
# Terraform configuration
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
}
}
}
provider "aws" {
region = "ap-northeast-2"
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "2.21.0"
name = var.vpc_name
cidr = var.vpc_cidr
azs = var.vpc_azs
private_subnets = var.vpc_private_subnets
public_subnets = var.vpc_public_subnets
enable_nat_gateway = var.vpc_enable_nat_gateway
tags = var.vpc_tags
}
module "ec2_instances" {
source = "terraform-aws-modules/ec2-instance/aws"
version = "2.12.0"
name = "my-ec2-cluster"
instance_count = 2
ami = "ami-033a6a056910d1137"
instance_type = "t2.micro"
vpc_security_group_ids = [module.vpc.default_security_group_id]
subnet_id = module.vpc.public_subnets[0]
tags = {
Terraform = "true"
Environment = "dev"
}
}
- terraform ๋ธ๋ก์ Terraform ์์ฒด๋ฅผ ๊ตฌ์ฑํ๋ค. ์ด ๋ธ๋ก์ Hashipcorp provider registry์ aws provider๋ฅผ ์๊ตฌํ๋ค.
- provider "aws" ๋ธ๋ก์ provider(์ ๊ณต์)๋ฅผ ์ ์ํ๋ค. ๋ณธ์ธ์ด ์ ํํ ์ธ์ฆ ๋ฐฉ๋ฒ(https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication)์ ๋ฐ๋ผ ๊ณต๊ธ์ ๋ธ๋ก์ ์ถ๊ฐ ์ธ์๋ฅผ ํฌํจํด์ผ ํ ์๋ ์๋ค. (์ธ์ฆ ๋ฐฉ๋ฒ๋ ๋ค์๋ฒ์ ํ ๋ฒ ์ ๋ฆฌ๋ฅผ ์๋)
- module "vpc" ๋ธ๋ก์ ์ธํ๋ผ์์ ๋คํธ์ํน ์๋น์ค๋ฅผ ์ ๊ณตํ Virtual Private Cloud(VPC)๋ฅผ ์ ์ํ๋ค.
- module "ec2_instaces" ๋ธ๋ก์ 2๊ฐ์ ec2๋ฅผ ์ ์ํ๊ณ ์๋ค.(instance_count = 2)
๋ชจ๋ input ๋ณ์ ๊ฐ ์ง์ ํ๊ธฐ
๋๋ถ๋ถ์ ๋ชจ๋์ ์ฌ์ฉํ๋ ค๋ฉด ๋ชจ๋ ๊ตฌ์ฑ์ ์ ๋ ฅ ๋ณ์๋ฅผ ์ ๋ฌํด์ผ ํ๋ค. ๋ชจ๋์ ํธ์ถํ๋ ํ๊ฒฝ ๊ตฌ์ฑ์ ๋ชจ๋ ๋ธ๋ก์์ ์ธ์๋ก ์ ๋ฌ๋๋ ์ ๋ ฅ ๊ฐ์ ์ค์ ํ๋ ์ญํ ์ ํ๋ค. ๋ชจ๋ ๋ธ๋ก์ ๋ํ ๋๋ถ๋ถ์ ์ธ์๋ ์์ค์ ๋ฒ์ ์ ์ ์ธํ๊ณ ๋ณ์ ๊ฐ์ ์ค์ ํ๋ค.
AWS VPC Terraform registry ํ์ด์ง์ ํด๋น ๋ชจ๋์ด ์ง์ํ๋ ๋ชจ๋ ์
๋ ฅ ๋ณ์๋ฅผ ์ค๋ช
ํ๋ Inputs(์
๋ ฅ) ํญ์ด ์๋ค.
์ผ๋ถ ์
๋ ฅ ๋ณ์๋ ๋ชจ๋์ด ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ์ง์ ์
๋ ฅํด์ผ ํ ํ์๊ฐ ์๋ค. Terraform์ด ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๋ ค๋ฉด ์ด๋ฐ ๊ฐ์ ์ ์ฑ์๋ฃ์ด์ผ ํ๋ค.
module "vpc" ๋ธ๋ก ๋ด ์
๋ ฅ ๋ณ์๋ฅผ ๊ฒํ ํด๋ณด์. Terraform registry์์ ๋ฌธ์ํ๋ ๊ฐ ์
๋ ฅ ๋ณ์๋ฅผ ์ฐพ์ ์ ์์ผ๋ ์ฐธ๊ณ ํ์.
- name - AWS๋ด VPC์ด๋ฆ
- cidr - VPC์์ ์ฌ์ฉ๋๋ CIDR ๋ธ๋ก ์ค๋ช
- azs - VPC ์๋ธ๋ท์ด ์ฌ์ฉํ ๊ฐ์ฉ ์ง์ญ ์ค๋ช
- private_subnets - ๊ณต์ฉ IP ์ฃผ์๋ ๊ฒฝ๋ก๊ฐ ์๋ ๋ฆฌ์์ค๋ฅผ ํฌํจํ๋ VPC ๋ด์ ์๋ธ๋ท
- public_subnets - ๊ณต์ฉ IP ์ฃผ์๋ ๊ฒฝ๋ก๊ฐ ์๋ ๋ฆฌ์์ค๋ฅผ ํฌํจํ๋ ์๋ธ๋ท
- enable_nat_gateway - ๋ง์ฝ ๊ฐ์ด true๋ฉด, ๋ชจ๋์ด NAT ๊ฒ์ดํธ์จ์ด๋ฅผ private ์๋ธ๋ท์ provisioning
- ํ๋ก๋น์ ๋(Provisioning)์ด๋?
๋ฌด์์ธ๊ฐ ์ฌ๋ฟ ์ค์ ์ต์ ์ธ ๊ฒ์ ์ฐพ๊ธฐ ์ํด ํ์ํ ์ง์์ ๋ฏธ๋ฆฌ ์ค๋นํด ๋๊ณ ์์ฒญ์ ๋ง๊ฒ ๊ณต๊ธํ๋ ์ ์ฐจ ์ ํ์๋ฅผ provisioning ๋ผ๊ณ ํ๋ค. ์ฆ, ๋ฏธ๋ฆฌ ์ ์๋ ์ ์ฑ ์ด๋ ์๋น์ค๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ด๋ ค (์ง์, ์ํฌํธ) ์ฃผ๋ ๊ฒ์ ๋งํ๋ค. IT์ธํ๋ผ ์ง์์ ์ฌ์ฉ์ ๋๋ ๋น์ฆ๋์ค์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ํ ๋น ,๋ฐฐ์น,๋ฐฐํฌํด์ ์์คํ ์ ์ฌ์ฉ ํ ์ ์๋๋ก ๋ง๋ค์ด ๋๋ ๊ฒ.
- ํ๋ก๋น์ ๋(Provisioning)์ด๋?
- tags - AWS์์ ๊ตฌ์ฑ์์ ํ๋ก๋น์ ๋ํ ๊ฐ ๋ฆฌ์์ค์ ๋ํ ํ๊ทธ๋ฅผ ์ง์
Root input ๋ณ์ ์ ์ํ๊ธฐ
์
๋ ฅ ๋ณ์๋ฅผ ๋ชจ๋๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ ๋ชจ๋ Terraform ๊ตฌ์ฑ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋งค์ฐ! ๋น์ทํ๋ค. ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ํจํด์, ๋์ค์ ๋ณ๊ฒฝํ /๋ณ๊ฒฝ๋ ๋ชจ๋ ์
๋ ฅ ๋ณ์๋ฅผ ์ฒดํฌํด์ ํ๊ฒฝ ๊ตฌ์ฑ variables.tf ํ์ผ์ ์ ํฉํ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ผ์นํ๋ ๋ณ์๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ ๋ค์ ์ด๋ฌํ ๋ณ์๋ฅผ ์ธ์๋ก ๋ชจ๋ ๋ธ๋ก์ ์ ๋ฌํ ์ ์๋ค.
๋ชจ๋ ๋ชจ๋์ input ๋ณ์๋ค์ด ๋ณธ์ธ์ ํ๊ฒฝ ๊ตฌ์ฑ์ ์ํด ์ ์ ๋ ํ์๋ ์๋ค. ์๋ฅผ ๋ค์ด, ํ๋ก๋น์ ๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์๋ NAT ๊ฒ์ดํธ์จ์ด๊ฐ ํ์ํ๋ฏ๋ก ์ด VPC๋ฅผ ํญ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ enable_nat_gateway๋ฅผ ์ค์ ํ๋ฉด ์ญํจ๊ณผ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฐ root input ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๊ฒฝ ๊ตฌ์ฑ์์ ์ด๋ฐ ๋ณ์๋ฅผ ๋ฐ๋ก ์ ์ํด์ผ ํ๋ค.
variables.tf:
# Input variable definitions
variable "vpc_name" {
description = "Name of VPC"
type = string
default = "example-vpc"
}
variable "vpc_cidr" {
description = "CIDR block for VPC"
type = string
default = "10.0.0.0/16"
}
variable "vpc_azs" {
description = "Availability zones for VPC"
type = list(string)
default = ["ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c"]
# ๊ฐ์ฉ์์ญ ๋ฆฌ์ ์ ๋ง๊ฒ ๋ฐ๊พธ๊ธฐ
}
variable "vpc_private_subnets" {
description = "Private subnets for VPC"
type = list(string)
default = ["10.0.1.0/24", "10.0.2.0/24"]
}
variable "vpc_public_subnets" {
description = "Public subnets for VPC"
type = list(string)
default = ["10.0.101.0/24", "10.0.102.0/24"]
}
variable "vpc_enable_nat_gateway" {
description = "Enable NAT gateway for VPC"
type = bool
default = true
}
variable "vpc_tags" {
description = "Tags to apply to resources created by VPC module"
type = map(string)
default = {
Terraform = "true"
Environment = "dev"
}
}
์ฝ๋๋ฅผ ๋ณด๋ฉด vpc_nmae, vpc_cidr, vpc_azs ๋ฑ ๋ค์ํ ๋ณ์๋ฅผ ์ ์ํ์์ ์ ์ ์๊ณ ,
main.tf ๋ฅผ ๋ค์ ๋ณด๋ฉด ์ฌ๊ธฐ์ ์ ์ํ ๋ณ์๋ค์ var.vpc_azs ํํ๋ก ๋ค์ ๋ธ๋ก ๋ด์์ ํธ์ถํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
Root Ouput ๊ฐ ์ ์ํ๊ธฐ
๋ชจ๋์๋ ์ถ๋ ฅ๊ฐ(Output ๊ฐ)๋ ์๋ค. ์ด ๊ฐ์๋ module.<MODULE ์ด๋ฆ>.<OUTPUT ์ด๋ฆ> ํํ๋ก ์ ๊ทผํ ์ ์๋ค. ๋ชจ๋ ouput์ Terraform registry์ output ํญ์ ์์ ๋์ด ์์ผ๋ ์ฐธ๊ณ ํ์.
๋ชจ๋ ์ถ๋ ฅ๊ฐ์ ํ๊ฒฝ ๊ตฌ์ฑ์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ์ ๋ฌ๋๊ฑฐ๋, root ๋ชจ๋์ ์ถ๋ ฅ๊ฐ์ผ๋ก ์ ์๋๋ค. ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ํด๋น ํํ ๋ฆฌ์ผ์ ํตํด ๋ชจ๋ ํ์ธํ ๊ฒ์ด๋ค.
outputs.tf:
# Output variable definitions
output "vpc_public_subnets" {
description = "IDs of the VPC's public subnets"
value = module.vpc.public_subnets
}
output "ec2_instance_public_ips" {
description = "Public IP addresses of EC2 instances"
value = module.ec2_instances.public_ip
}
์ด ์์์์๋ vpc_public_subnets์ ๊ฐ์ vpc๋ผ๋ ๋ชจ๋์ public_subnets ์ถ๋ ฅ๊ฐ์์ ๋์ค๊ฒ ๋ ๊ฒ์ด๊ณ , ec2_instance_public_ips๋ module.ec2_instance.public_ip์ผ๋ก ์ ์๋๋ค.
์ธํ๋ผ ํ๋ก๋น์ ๋
์ด์ terraform init์ ํด๋ณด์!!
1. terraform init
1. ์๋ฌ ๋ฐ์
..๊ทธ๋์ ๋ฒ์ ์ ๋ฐ๊ฟ๋ดค๋ค.
2. ๋ฒ์ ์ง์
main.tf์์
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.27"
}
}
}
์ด๋ ๊ฒ ๋ฒ์ ์ ๋ฐ๊ฟ์คฌ๋ค.
3. upgrade ํ๋ผ๋ ์๋ฌ
๊ทธ๋์ ์ ๊ทธ๋ ์ด๋ ํ์ต๋๋ค ๋ต.
4. ์ฑ๊ณต ~
2. terraform apply
init์ ํตํด provider์ ๋ชจ๋์ ์ค์นํ๋ค.
์ด์ EC2 ์ธ์คํด์ค์ VPC๋ฅผ ์์ฑํ์.
์ ์์ฑ๋์๋ค! AWS์์๋ ํ์ธํด๋ณด์.
๋ ๋ค ์ ์์ฑ๋์๋ค!
๋ชจ๋์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ธฐ
์๋ก์ด ๋ชจ๋์ ์ฒ์ ์ฌ์ฉํ ๋๋ terraform init ์ด๋ terraform get ๋ช ๋ น์ ํตํด ๋ชจ๋์ ์ค์นํด์ผํ๋ค. ์ด๋ฐ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด, Terraform์ ๋ชจ๋ ์ ๋ชจ๋์ .terraform/modules ๋ค๋ ํ ๋ฆฌ์ ์ ์ฅํ๋ค. ๋ก์ปฌ ๋ชจ๋์ ๊ฒฝ์ฐ Terraform์ด ๋ชจ๋์ ๋๋ ํ ๋ฆฌ์ ๋ํ symblink์ ์์ฑํ๊ธฐ ๋๋ฌธ์, ๋ก์ปฌ ๋ชจ๋์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ terraform get์ ๋ค์ ์คํํ ํ์ ์์ด ์ฆ์ ์ ์ฉ๋๋ค.
ํํ ๋ฆฌ์ผ์ ์ ๋ฐ๋ผํ๋ค๋ฉด ๋ชจ๋ ๋ค๋ ํ ๋ฆฌ์ ์ด๋ฐ ๊ฒฐ๊ณผ๋ฌผ์ด ์ ์ฅ๋์ด ์๋ค.
์ธํ๋ผ clean up
Terraform registry์์ ๋ชจ๋์ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๊ณ ํ ์คํธ๋ ๋ชจ๋ ํ์ผ๋, ๋ฐฉ๊ธ ์์ฑํ ์ธํ๋ผ๋ฅผ terraform destory๋ก ์์ ์ค๋ค.
3. ๋ก์ปฌ ๋ชจ๋ ๋ง๋ค๊ณ ์ฌ์ฉํ๊ธฐ
์ด ํํ ๋ฆฌ์ผ์์๋ ์ ์ ์น ์ฌ์ดํธ๋ฅผ ํธ์คํ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ AWS S3 ๋ฒํท์ ๊ด๋ฆฌํ๋ ๋ชจ๋์ ๋ง๋ค ์ ์์ต๋๋ค. ์์์์~
๋ชจ๋ ๊ตฌ์กฐ
์๊น ์์ ๋ง๋ ํด๋์์ ์ถ๊ฐํ ์ ์๋ ๋ด์ฉ๋ค์ ๋ํด ๋ ์ ์ด๋ณด์.
terraform.tfstate ๋ฐ terraform.tfstate.backup: ์ด ํ์ผ์๋ ์ฌ์ฉ์์ Terraform ์ํ๊ฐ ํฌํจ๋์ด ์๊ณ , Terraform์ด ์ฌ์ฉ์์ ๊ตฌ์ฑ๊ณผ Terraform์์ ํ๋ก๋น์ ๋๋ ์ธํ๋ผ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ถ์ ํ๊ฒ ํ๋ค.
.vargetform: ์ด ๋๋ ํ ๋ฆฌ์๋ ์ธํ๋ผ๋ฅผ ํ๋ก๋น์ ๋ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ฐ ํ๋ฌ๊ทธ์ธ์ด ํฌํจ๋์ด ์๋ค. ์ด๋ฌํ ํ์ผ์ .tf ํ์ผ์ ์ ์๋ ์ธํ๋ผ์ ๊ตฌ์ฑ์ด ์๋๋ผ ์ธํ๋ผ๋ฅผ ํ๋ก๋น์ ๋ํ ๋ ํน์ Terraform ์ธ์คํด์ค๋ก ํ์ ๋๋ค.(์.. ์ด๊ฒ ๋ฌด์จ ๋ง์ผ๊น)
*.tfvars: ๋ชจ๋ ์
๋ ฅ ๋ณ์๋ ๊ตฌ์ฑ ๋ด ๋ชจ๋ ๋ธ๋ก์ ๋ํ ์ธ์๋ฅผ ํตํด ์ค์ ๋๋ฏ๋ก ๋
๋ฆฝ ์คํํ Terraform ๊ตฌ์ฑ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ํ *.tfvars ํ์ผ์ ๋ชจ๋๊ณผ ํจ๊ป ๋ฐฐํฌํ ํ์๊ฐ ์๋ค.
-> ์ด ์ธ๊ฐ์ ํ์ผ๋ค์ ์จ๋ณด์ง ์์์ ์ ๋ชจ๋ฅด๊ฒ ๋ค..! ใ .ใ
๋ชจ๋ ์์ฑํ๊ธฐ
git clone, terraform init
git clone https://github.com/hashicorp/learn-terraform-modules-create.git
terraform init ์ ์ ์๊น์ฒ๋ผ ๋ฆฌ์ , ami, ๊ฐ์ฉ์์ญ ๋ชจ๋ ๋ฐ๊ฟ์ค ๊ฒ
์ด ํํ ๋ฆฌ์ผ์์๋ ์ด๋ฏธ ์กด์ฌํ๋ ํ๊ฒฝ ๊ตฌ์ฑ ๋ด์์ AWS S3 ๋ฒํท์ ์ฌ์ฉํ๋ ๋ก์ปฌ submodule์ ๋ง๋ค ๊ฒ์ด๋ค. ๋ง์ฝ ํด๋น ๋ ํฌ๋ฅผ ํด๋ก ํ๋ค๋ฉด, modules ์ด๋ผ๋ ํด๋๊ฐ ์ด๋ฏธ ์กด์ฌํ์ง๋ง ํด๋ก ํ์ง ์์๋ค๋ฉด ์๋ก ํ๋ ๋ง๋ค์ด์ค๋ค.
mkdir -p modules/aws-s3-static-website-bucket
์ ์ ์น ์ฌ์ดํธ๋ฅผ S3๋ก ํธ์คํ ํ๋ ๊ฒ์ ์๋นํ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ฒํท์ ํ๋ก๋น์ ๋ํ๋ ์ฌ๋ฐ๋ฅธ ํ๊ฒฝ ๊ตฌ์ฑ์ ์ฐพ๋ ๊ฒ์ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์ง๋ง,
๋ชจ๋ ๋ด์์ ์ด ๊ตฌ์ฑ์ ์บก์ํํ๋ฉด ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ๋ ์ ์ ์น ์ฌ์ดํธ๋ฅผ ํธ์คํ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ฒํท์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋ค ์ ์๋ค.
๋ชจ๋์ ์ฌ์ฉํ ๋์ ๋ ๋ค๋ฅธ ์ด์ ์ ๋ชจ๋ ์ด๋ฆ์ด ํด๋น ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๋ฒํท์ ์ฉ๋๋ฅผ ์ ํํ๊ฒ ์ค๋ช ํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด ์์์ aws-s3-static-website-bucket ๋ชจ๋์ ์ ์ ์น ์ฌ์ดํธ๋ฅผ ํธ์คํ ํ๋ s3 ๋ฒํท์ ์์ฑํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ชจ๋ configuration ์ถ๊ฐํ๊ธฐ
modules/aws-s3-static-website-bucket ๋ค๋ ํ ๋ฆฌ๋ก ๋ค์ด๊ฐ๋ฉด ๋ ๋ค์ main.tf outputs.tf ๋ฑ๊ณผ ๊ฐ์ ํ์ผ๋ค์ด ์กด์ฌํจ์ ํ์ธํ ์ ์๋ค.
์ฐ๋ฆฌ๋ ์ฌ๊ธฐ ์๋ main.tf์ S3 ๋ฒํท ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ ๊ฒ์ด๋ค.
# Terraform configuration
resource "aws_s3_bucket" "s3_bucket" {
bucket = var.bucket_name
tags = var.tags
}
resource "aws_s3_bucket_website_configuration" "s3_bucket" {
bucket = aws_s3_bucket.s3_bucket.id
index_document {
suffix = "index.html"
}
error_document {
key = "error.html"
}
}
resource "aws_s3_bucket_acl" "s3_bucket" {
bucket = aws_s3_bucket.s3_bucket.id
acl = "public-read"
}
resource "aws_s3_bucket_policy" "s3_bucket" {
bucket = aws_s3_bucket.s3_bucket.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Sid = "PublicReadGetObject"
Effect = "Allow"
Principal = "*"
Action = "s3:GetObject"
Resource = [
aws_s3_bucket.s3_bucket.arn,
"${aws_s3_bucket.s3_bucket.arn}/*",
]
},
]
})
}
์ด ํ๊ฒฝ ๊ตฌ์ฑ ์ฝ๋๋ public S3 bucket์ด ํธ์คํ ํ๋, index.html๊ณผ error.html๋ก ๊ตฌ์ฑ๋์ด ์๋ ์น ์ฌ์ดํธ๋ฅผ ์์ฑํ๋ค.
์ด ์ฝ๋๋ ์๊น ์ ํํ ๋ฆฌ์ผ์์ ํ์ธํ๋ main.tf์ ๋ฌ๋ฆฌ providers ๋ผ๋ ๋ธ๋ก์ด ์๋ค.
์๋ถ๋ถ main.tf์ providers:
provider "aws" {
region = "ap-northeast-2"
}
Terraform์ด ๋ชจ๋ ๋ธ๋ก์ ์ฒ๋ฆฌํ ๋, ๋ชจ๋ ๋ธ๋ก์ ํ๊ฒฝ ๊ตฌ์ฑ ์ฝ๋์์ provider๋ฅผ ์์ํ๋ค. ์ด ๋๋ฌธ์ ๋ชจ๋์๋ ๊ณต๊ธ์ ๋ธ๋ก์ ํฌํจํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
(๋ด๊ฐ ์ดํดํ ๋ฐ: ์ด๋ฏธ ๋ชจ๋ ์ธ์ ๊ธฐ๋ณธ ํ๊ฒฝ ๊ตฌ์ฑ ์ฝ๋ main.tf์ provider ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค๋ณต ์์ ์ฐ๋ ค๊ฐ ์์ด์ ๋ก์ปฌ ๋ชจ๋ main.tf์๋ provider๋ฅผ ํฌํจํ์ง ์๋๋ค)
๊ตฌ์ฑ์ ๋ฃจํธ ๋ชจ๋๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋๋ ๋ณ์๋ฅผ ์ ์ํ๊ณ ์ฌ์ฉํ๋ค.
# Input variable definitions
variable "bucket_name" {
description = "Name of the s3 bucket. Must be unique."
type = string
}
variable "tags" {
description = "Tags to set on the bucket."
type = map(string)
default = {}
}
๋ชจ๋ ๋ด ๋ณ์๋ ๋ฃจํธ ๋ชจ๋๊ณผ ๊ฑฐ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
๋ฃจํธ ํ๊ฒฝ ๊ตฌ์ฑ์์ Terraform ๋ช ๋ น์ ์คํํ๋ฉด, ๋ณ์ ๊ฐ์ commandline์ ์ ๋ฌํ๊ฑฐ๋, .tfvars ํ์ผ์ ์ฌ์ฉํ์ฌ ์ค์ ํ๋ ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ชจ๋์ ์ฌ์ฉํ ๋๋, ๋ชจ๋์ ์ธ์๋ฅผ ์ ๋ฌํ์ฌ ๋ณ์๋ฅผ ์ค์ ํ๋ค. ๋ฃจํธ ๋ชจ๋์ main.tf์์ ์ด ๋ชจ๋์ ํธ์ถํ ๋ ์ด๋ฌํ ๋ณ์ ์ค ์ผ๋ถ๋ฅผ ์ค์ ํ๊ฒ ๋๋ค.
๊ธฐ๋ณธ๊ฐ์ด ์ง์ ๋์ง ์์ ๋ชจ๋์ ์ ์ธ๋ ๋ณ์๋ ํ์์ด๋ฏ๋ก ๋ชจ๋์ ์ฌ์ฉํ ๋๋ง๋ค ์ค์ ํด์ผ ํ๋ค.
๋ชจ๋์ ์์ฑํ ๋ ๋ชจ๋ ์ต์ข
์ฌ์ฉ์์๊ฒ ์
๋ ฅ ๋ณ์๋ก ํ์ํ ๋ฆฌ์์ค ์ธ์๋ฅผ ๊ณ ๋ คํด์ผํ๋ค. ์๋ฅผ ๋ค์ด, ์น ์ฌ์ดํธ๋ฅผ ํธ์คํธํ๊ธฐ ์ํด ๋ฒํท์ ACL์ public-read์ผ๋ก ์ค์ ํด์ผ ํ๋ฏ๋ก ์์ธ ๋ฐ ์ค๋ฅ ๋ฌธ์๋ฅผ ๋ณ์๋ก ์ด ๋ชจ๋์ ์ต์ข
์ฌ์ฉ์์๊ฒ ํ์ํ์ง๋ง, ACL์ ์ค์ ํ๋ ๋ณ์๋ฅผ ์ ์ธํ์ง ์์ ์ ์๋ค.
ouput์ ์ฌ์ฉ์๊ฐ ๋ชจ๋์ ์ํด ๊ตฌ์ฑ๋ ๋ฆฌ์์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅ์ผ๋ก ์ถ๊ฐํ ๊ฐ์ ๊ณ ๋ คํด์ผ ํ๋ค.
modules/aws-s3-static-static-module-module ๋๋ ํ ๋ฆฌ ๋ด์ outputs.tf ํ์ผ์ ์ถ๋ ฅ์ ๋ชจ๋์ ์ถ๊ฐํ์.
# Output variable definitions
output "arn" {
description = "ARN of the bucket"
value = aws_s3_bucket.s3_bucket.arn
}
output "name" {
description = "Name (id) of the bucket"
value = aws_s3_bucket.s3_bucket.id
}
output "domain" {
description = "Domain name of the bucket"
value = aws_s3_bucket_website_configuration.s3_bucket.website_domain
}
๋ณ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ouputs์ root ๋ชจ๋๊ณผ ๊ฐ์ ์ผ์ ํ์ง๋ง, ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๊ฒ ๋๋ค. ๋ชจ๋ ouputs์ read-only์ด๋ฉฐ, access syntax ๋ ๋ค์๊ณผ ๊ฐ๋ค: module.<Moudle ์ด๋ฆ>.<Ouput ์ด๋ฆ>
์ด์ ๋ชจ๋ ์ค์ ์ด ๋๋ฌ์ผ๋ ๋ค์ root์ main.tf์ผ๋ก ๋์๊ฐ์ ๋ชจ๋์ ์ถ๊ฐํด๋ณด์.
์ด๋ ๊ฒ source๋ฅผ ๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ๋ง๋ ๋ก์ปฌ module๋ฅผ ์ง์ ํ๋ค๋ ๊ฒ์ ๋ค์ ํ ๋ฒ ํ์ธํ ์ ์๋ค. ๋ํ bucket_name ๋ uniqueํ๊ฒ ์ค์ ํด์ฃผ์๋ค.
์ง๊ธ ์ฌ๊ธฐ์ ์ค์ ํ buckent_name๊ณผ tags ์ธ์๋ค์ ๋ชจ๋๋ก ๋๊ฒจ์ฃผ๊ฒ ๋๊ณ , ์ฐ๋ฆฌ๊ฐ ๋ง๋ modules/aws-s3-static-website-bucket/variables.tf์ ์ผ์นํ๋ ๋ณ์์ ๋ํ ๊ฐ์ ์ ๊ณตํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๋ก์ปฌ ๋ชจ๋ ์ค์นํ๊ธฐ
terraform get ๋ช ๋ น์ด๋ก ๋ชจ๋์ ์ค์นํ์.
๋ฒํท์ ํ์ผ ์ ๋ก๋ํ๊ธฐ
์ด์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ static website์ ๋ฐฉ๋ฌธํ๊ธฐ ์ํด ํ์ผ์ ์ ๋ก๋ ํด๋ณด์. ์ด๊ฒ๋ ์ฐ๋ฆฌ๋ ๊นํ ๋ ํฌ๋ฅผ ํด๋ก ํ๊ธฐ ๋๋ฌธ์... ๋ฑํ index.html์ ๋ง๋ค ํ์ ์์ด ๋ชจ๋ ๊ฒ www ๋ผ๋ ํด๋์ ์ค๋น ๋์ด ์๋ค(์์ธ)
๋ค์ ๋ช ๋ น์ด๋ก ๋ฒํท์ ํ์ผ์ ์ ๋ก๋ํด๋ณด์
aws s3 cp modules/aws-s3-static-website-bucket/www/ s3://$(terraform output -raw website_bucket_name)/ --recursive
์ด์ ์ง์ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด๋ณด์.
์์: https://nayeon-tf-module-test.s3.ap-northeast-2.amazonaws.com/index.html
https://<๋ฒํท์ด๋ฆ>.s3.<๋ฆฌ์ ์ด๋ฆ>/index.html
์์ฃผ ์ ๋๋ค.
์ด์ ๋ชจ๋ ๊ฑธ ๋ค ํ์ผ๋! ๋ค์ ๋ชจ๋ ๊ฑธ destory ํด์ฃผ๊ณ ๋๋ธ๋ค.
๋๋~