๋ฐ์ํ
Terraform
- Terraform์
ํ ๋ผํผ ์์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๋ด์ฉ
์ผ๋กbackend
,required_version
๋ฑ์ ์ง์ ํ ์ ์์ต๋๋ค.
terraform {
required_version = ">= 1.0.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
Provider
- Provider๋ ํ
๋ผํผ์ด ๋์ํ๋
ํด๋ผ์ฐ๋ ์ ๊ณต์(cloud providers) ๋๋ API ์ ๊ณต์(API providers)์ ๋ํด ๊ธฐ์
ํฉ๋๋ค. - provider๋ค์ด ํ ๋ผํผ์ ์ง์ํ์ง ์๋๋ค๋ฉด terraform์ ์ด๋ค ์ข ๋ฅ์ ์ธํ๋ผ๋ ๊ด๋ฆฌ ํ ์ ์์ต๋๋ค.
provider "aws" {
profile = "aws_hyuckang"
region = "ap-northeast-2"
}
Resource
- resource๋ AWS EC2, VPC, Subnet์ ๊ฐ์
์ธํ๋ผ ๊ฐ์ฒด(infrastructure object)
๋ฅผ ์๋ฏธํฉ๋๋ค.
resource "aws_instance" "hyuckang_EC2" {
ami = "ami-0ecb2a61303230c9d"
instance_type = "t2.micro"
tags = merge({
Name = var.hyuckang_EC2_NameTag
}, local.common_tags
)
}
Data Source
- Data Source๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ํ
๋ผํผ ์์
๊ณต๊ฐ(workspace)์ด๋ API๋ฅผ ํตํด
๊ฐ์ ธ์จ ์ ๋ณด๋ฅผ ์ฌ์ฉ
ํ ์ ์์ผ๋ฉฐ ํ ๋ผํผ ๊ตฌ์ฑ(configuration)์ ์ ์ฐํ๊ฒ ๋ง๋ค์ ์์ต๋๋ค.
data "aws_vpc" "default_vpc" {
default = true
}
data "aws_subnets" "default" {
filter {
name = "vpc-id"
values = [data.aws_vpc.default_vpc.id]
}
}
Input Variable
- Input Variable์
์ ๋ ฅ ๋ณ์
๋ก ํ ๋ผํผ์ ๋ชจ๋์ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ํ ๋ผํผ์ ์ข ๋ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
variable "hyuckang_EC2_NameTag" {
default = "hyuckang_EC2"
type = string
}
Output Values
Output์
์ธํ๋ผ ๊ตฌ์กฐ์ ๋ํ ์ ๋ณด(Infra structured data)๋ฅผ export
ํ ์ ์์ต๋๋ค.์ด๋ฅผ ํตํด ๋ค๋ฅธ ์ธํ๋ผ๋ฅผ ๊ตฌ์ฑํ๊ฑฐ๋ ๋ค๋ฅธ ํ ๋ผํผ ์์ ๊ณต๊ฐ์์ data source๋ก ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
Output Value๋ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐํ ๊ฐ(return value)๊ณผ ์ ์ฌํ ๊ฐ๋ ์ ๋๋ค.
output "default_vpc_cidr" {
value = data.aws_vpc.default_vpc.cidr_block
description = "default vpc cidr_block"
}
Local Values
- Local Value๋
๋์ผํ ๊ฐ์ด๋ ํํ์์ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณตํด์ผ ํ ๋ ์ฌ์ฉ
ํ ์ ์์ผ๋ฉฐ์ ์ธ๋ ๋ชจ๋ ๋ด์ ํํ์์์๋ง ์ก์ธ์ค
ํ ์ ์์ต๋๋ค. - Local Value๋
Input Variable๊ณผ ๋ฌ๋ฆฌ ์ฌ์ฉ์๊ฐ ์ง์ ์ค์ ํ ์ ์์ต๋๋ค.
locals {
common_tags = {
Using = "terraform_test"
Owner = "hyuckang"
}
}
Module
- Module์ ์ฌ์ฉํ๋ฉด
๋ฆฌ์์ค ๊ตฌ์ฑ์ ์บก์ํ
ํ๊ณ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฌ์ฉ
ํ ์ ์์ต๋๋ค. - Module์
๋จ์ผ ๋๋ ํฐ๋ฆฌ์ ์๋ ํ๋ ์ด์์ ๊ตฌ์ฑํ์ผ๋ค
๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. - ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ์ ๋ชจ๋์
๋ฃจํธ ๋ชจ๋(root module)
์ด๋ผ ํฉ๋๋ค. - A ๋ชจ๋์์ B ๋ชจ๋์ ํธ์ถํด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ B๋ A์
ํ์๋ชจ๋(child module)
์ด๋ผ๊ณ ํฉ๋๋ค.
module "servers" {
source = "./app-cluster"
}
์ฐธ๊ณ
๋ฐ์ํ
'๐ IaC > Terraform' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Terraform] Variable ์ ๋ ฅ ๋ณ์ (0) | 2022.09.03 |
---|---|
[Terraform] Error: Incompatible provider version (0) | 2022.08.23 |
[Terraform] Configuration file๊ณผ HCL (0) | 2022.08.08 |
[TF] terraform์ผ๋ก aws ec2 ๋ง๋ค๊ธฐ (0) | 2021.11.05 |
[IaC/TF] Terraform ์ค์น (0) | 2021.11.04 |