Ssoon
[5주차] 05 테라폼의 팁과 요령 (1) 반복문 - count 본문
CloudNet@ 팀의 가시다님이 진행하는 Terraform 101 Study 05주차 정리입니다.
- count parameter(매개변수) : resources 와 modules 반복
- for_each expressions(표현식) : resources 와 module 내에서 resources 및 Inline Block 반복
- for expressions(표현식) : lists 와 maps 을 반복
- for string directive(지시문) : string(문자열) 내에서 lists 와 maps 반복
1️⃣ count Parameter 을 이용한 반복
- 모든 테라폼 resource 에는 count 라는 meta-parameter 가 있습니다.
- count 에 생성하고자 하는 resource 의 copy(사본) 수를 정의합니다.
⛔ live/global/existing-iam-user/main.tf
👉 count 를 사용하여 3명의 IAM 사용자를 생성합니다.
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_iam_user" "existing_user" {
count = 3
name = "Ssoon"
}
😫 3명의 IAM 사용자가 모두 같은 이름으로 오류가 발생합니다.
✅ count.index 를 사용하여 반복문 안에 있는 각각의 반복(iteration)을 가리키는 index 을 가져올 수 있습니다.
${count.index}
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_iam_user" "existing_user" {
count = 3
name = "Ssoon.${count.index}"
}
📢 CLI 확인
👉 Ssoon.0 , Ssoon.1 , Ssoon.2 가 생성됩니다.
⛔ live/global/three-iam-users-unique-names/variables.tf
variable "user_names" {
description = "Create IAM users with these names"
type = list(string)
default = ["APEACH", "CHUN-SIK", "RYAN"]
}
✅ Array lookup (배열 조회) Syntax(구문)
ARRAY[<INDEX>]
👁🗨 var.user_names 의 index 1에서 element(요소)를 찾는 방법입니다.
var.user_names[1]
✅ length함수 는 주어진 ARRAY 의 항목 수를 반환합니다. strings(문자열) 및 maps 을 대상으로 동작합니다.
length(<ARRAY>)
⛔ live/global/three-iam-users-unique-names/main.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_iam_user" "main" {
count = length(var.user_names)
name = var.user_names[count.index]
}
📢 CLI 확인
✅ resource 에 count 를 사용한 후에는 하나의 리소스가 아니라 resource 의 array(배열) 이 됩니다. -> array(배열) 조회 구문을 이용해 array(배열)에서 index를 지정함으로써 IAM 사용자를 명시합니다.
<PROVIDER>_<TYPE>.<NAME>[INDEX].ATTRIBUTE
👁🗨 IAM 사용자 중 하나의 ARN [0] 을 출력 변수로 제공하려면 다음과 같이 작성합니다.
aws_iam_user.main[0].arn
⛔ live/global/three-iam-users-unique-names/outputs.tf
output "first_arn" {
value = aws_iam_user.main[0].arn
description = "The ARN for the first user"
}
👁🗨 IAM 사용자 전체의 ARN 을 원하면 splat (*) 를 사용합니다.
aws_iam_user.main[*].arn
output "all_arns" {
value = aws_iam_user.main[*].arn
description = "The ARNs for all users"
}
📢 CLI 확인
✅ count 제약사항
1️⃣ resource 내에서 Inline Block 을 반복할 수 없습니다.
❓ Inline Block 이란
2️⃣ count 를 사용하여 resource 목록을 만들 때에마다 목록 중간에서 항목을 제거하면 테라폼은 해당 항목 뒤에 있는 모든 resource 를 삭제한 다음 해당 리소스를 처음부터 다시 만듭니다.
- IAM 사용자 목록에서 하나("CHUN-SIK") 를 제거 후 terraform plan 을 실행합니다.
📢 CLI 확인
- "CHUN-SIK" 이 삭제되지 않고 "RYAN" 으로 변경되고 "RYAN"은 삭제됩니다.
- Arry 의 중간에서 항목을 제거하면 모든 항목은 1칸씩 앞으로 당겨집니다.
- 테라폼이 index 번호를 resource 식별자로 보기 때문에
- index 1 에서는 버킷을 "CHUN-SIK" 에서 "RYAN" 로 변경하고
- index 2에서는 버킷을 삭제한다 로 해석합니다.
'Terraform 101 Study' 카테고리의 다른 글
[5주차] 05 테라폼의 팁과 요령 (1) 반복문 - for expressions (0) | 2022.11.17 |
---|---|
[5주차] 05 테라폼의 팁과 요령 (1) 반복문 - for_each (0) | 2022.11.15 |
[T101-4주차] 04 테라폼 모듈로 재사용 가능한 인프라 생성하기 - (5) 모듈주의사항 (0) | 2022.11.13 |
[T101-4주차] 04 테라폼 모듈로 재사용 가능한 인프라 생성하기 - (4) 모듈 출력 (0) | 2022.11.13 |
[T101-4주차] 04 테라폼 모듈로 재사용 가능한 인프라 생성하기 - (3) 모듈과 지역변수 (0) | 2022.11.13 |