처음 시작하는 Infrastructure as Code: AWS & 테라폼을 수강하며 정리한 내용입니다.
.tf
파일 어디에서나 가능하지만 주로 variables.tf
파일을 만들어서 사용variables.tf
파일에 변수 정의variable
뒤에 변수명을 입력하고 타입 지정default
로 쓸 수도 있고 terraform.tfvars
파일을 만들어서 변수 = 값
형태로 쓸 수 있음variable "image_id" {
type = string
}
variable "availability_zone_names" {
type = list(string)
default = ["us-west-1a"]
}
variable "ami_id_maps" {
type = map
default = {}
}
terraform.tfvars
파일은 다음과 같이 작성image_id = "ami-064c81ce3a290fde1"
availablility_zone_names = ["us-west-1a", "us-west-1b", "us-west-1c"]
ami_id_maps = {
ap-northeast-2 = {
amazon_linux2 = "ami-010bf43fe22f847ed"
ubuntu_18_04 = "ami-061b0ee20654981ab"
}
us-east-1 = {
amazon_linux2 = "ami-0d29b48622869dfd9"
ubuntu_18_04 = "ami-0d324124b7b7eec66"
}
}
module block
을 사용하거나 사용자가 키보드로 입력하는 것이 있음output.tf
파일을 아래처럼 작성output "image_id" {
value = var.image_id
}
output "availability_zone_names" {
value = var.availability_zone_names
}
output "ami_id_maps" {
value = var.ami_id_maps
}
terraform apply
명령을 실행하면 output은 state 파일에 변수를 저장output.tf
파일에 아래 내용을 추가output "first_availability_zone_name" {
value = var.availability_zone_names[0]
}
terraform apply
명령을 실행하면 availability_zone_names
리스트에서 첫 번째 인덱스의 값도 출력됨provider.tf
provider "aws" {
region = "ap-northeast-2"
}
provider "aws" {
region = var.aws_region
}
variables.tf
파일은 다음과 같이 작성variable "aws_region" {
description = "region for aws."
}
terraform plan
나 terraform apply
를 했을 때 변수의 값을 사용자가 키보드로 입력해야 함terraform.tfvars
로 기본값을 주입하려면 아래와 같이 파일을 생성aws_region = "ap-northeast-2"
devops_group.tf
resource "aws_iam_group" "devops_group" {
name = "devops"
}
resource "aws_iam_group_membership" "devops" {
name = aws_iam_group.devops_group.name
users = [
aws_iam_user.gildong_hong.name
]
group = aws_iam_group.devops_group.name
}
resource "aws_iam_group" "devops_group" {
name = "devops"
}
resource "aws_iam_group_membership" "devops" {
name = aws_iam_group.devops_group.name
users = var.iam_user_list
group = aws_iam_group.devops_group.name
}
variables.tf
파일에 아래의 변수 추가, 타입은 리스트로 지정variable "iam_user_list" {
type = list(string)
}
terraform.tfvars
파일에서 기본값 지정iam_user_list = ["gildong.hong"]
user_gildong_hong.tf
파일 복제cp user_gildong_hong.tf user_chori_hi.tf
vim
에서 아래 명령어를 입력하여 사용자 이름을 찾아서 바꾸기:s%/gildong_hong/chori_hi/g
:s%/gildong.hong/chori.hi/g
resource "aws_iam_user" "chori_hi" {
name = "chori.hi"
}
resource "aws_iam_user_policy" "art_devops_black_for_chori" {
name = "super-admin"
user = aws_iam_user.chori_hi.name
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": [
"*"
]
}
]
}
EOF
}
variables.tf
파일에도 사용자 추가iam_user_list = ["gildong.hong", "chori.hi"]
terraform plan
과 terraform apply
명령어 실행