★★cloudNet@ 팀의 가시다 님이 진행하는 Terraform 101 Study 4기 내용과 한빛미디어 테라폼으로 시작하는 IaC 책을 참고하여 정리하였습니다. |
local 지역 값
: 코드 내에서 사용자가 지정한 값 또는 속성 값을 가공해 참조 가능한 local은 외부에서 입력되지 않고,
코드 내에서만 가공되어 동작하는 값을 선언
: local은 입력 변수와 달리 선언된 모듈 내에서만 접근 가능하고, 변수처럼 실행 시에 입력받을 수 없다.
: 값이나 표현식을 반복적으로 사용할 수 있는 편의를 제공
▶ local 선언
- 로컬이 선언되는 블록은 locals 로 시작
선언되는 인수에 표현되는 값은 상수만이 아닌 리소스의 속성, 변수의 값들도 조합해 정의할 수 있다 - 동일한 tf 파일 내에서 여러 번 선언 가능 (여러 파일에 걸쳐 만드는 것도 가능)
- locals에 선언한 로컬 변수 이름은 전체 루트 모듈 내에서 유일해야 함
▶ local 참조
- 선언된 local 값은 local.<이름> 으로 참조 가능
- 테라폼 구성 파일을 여러 개 생성해 작업하는 경우 서로 다른 파일에 선언되어 있더라도 다른 파일에서 참조 가능
같은 모듈 내 > 같은 디렉토리 안에 있을 경우 서로 참조 가능
: 위 예제에서는 서로 다른 테라폼 구성 파일에서도 로컬 값을 참조할 수 있다는 부분을 확인
(관리 측면에서는 서로 참조하는 로컬값이 파편화되어 유지 보수가 어려워질 수 있음)
AWS IAM User 생성
provider "aws" {
region = "ap-northeast-2"
}
locals {
name = "mytest"
team = {
group = "dev"
}
}
resource "aws_iam_user" "myiamuser1" {
name = "${local.name}1"
tags = local.team
}
resource "aws_iam_user" "myiamuser2" {
name = "${local.name}2"
tags = local.team
}
출력 output
: 출력 값은 주로 테라폼 코드의 프로비저닝 수행 후의 결과 속성 값을 확인하는 용도로 사용
: 프로그래밍 언어에서 코드 내 요소 간에 제한된 노출을 지원하듯, 테라폼 모듈 간, 워크스페이스 간 데이터 접근 요소로도 활용
- 루트 모듈에서 사용자가 확인하고자 하는 특정 속성 출력
- 자식 모듈의 특정 값을 정의하고 루트 모듈에서 결과를 참조
- 서로 다른 루트 모듈의 결과를 원격으로 읽기 위한 접근 요소
▶ output 선언
- 모듈 내에서 생성되는 속성 값들은 output 블록에 정의
output "instance_ip_addr" {
value = "http://${aws_instance.server.private_ip}"
}
- 출력되는 값은 value의 값이며 테라폼이 제공하는 조합과 프로그래밍적인 기능들에 의해 원하는 값을 출력
- 주의할 점은 output 결과에서 리소스 생성 후 결정되는 속성 값은 프로비저닝이 완료되어야 최종적으로 결과를 확인할 수 있고 terraform plan 단계에서는 적용될 값이 출력하지 않는다
- 변수 정의 시 사용 가능한 메타인수
- description : 출력 값 설명
- sensitive : 민감한 출력 값 임을 알리고 테라폼의 출력문에서 값 노출을 제한
- depends_on : value에 담길 값이 특정 구성에 종속성이 있는 경우 생성되는 순서를 임의로 조정
- precondition : 출력 전에 지정된 조건을 검증
▶ output 활용 & abspath 함수
resource "local_file" "abc" {
content = "abc123"
filename = "${path.module}/abc.txt"
}
output "file_id" {
value = local_file.abc.id
}
output "file_abspath" {
value = abspath(local_file.abc.filename)
}
: abspath - 파일 시스템 경로를 포함하는 문자열을 가져와 절대 경로로 변환하는 함수
: plan 실행 시, 이미 정해진 속성은 출력을 예측하지만 아직 생성되지 않은 file_id 값은 결과 예측을 할 수 없다
반복문
: list 형태의 값 목록이나 key-Value 형태의 문자열 집합인 데이터가 있는 경우 동일한 내용에 대해 테라폼 구성 정의를 반복적으로 하지 않고 관리할 수 있다
▶ count : 반복문, 정수 값만큼 리소스나 모듈을 생성
- 리소스 또는 모듈 블록에 count 값이 정수인 인수가 포함된 경우 선언된 정수 값만큼 리소스나 모듈을 생성
- count에서 생성되는 참조값은 count.index이며, 반복하는 경우 0부터 1씩 증가해 인덱스 부여
: 5개의 파일이 생성되어야 하지만 파일명이 동일하여 결과적으로 하나의 파일만 존재
: 때때로 여러 리소스나 모듈의 count로 지정되는 수량이 동일해야 하는 상황이 있음
이런 경우 count에 부여되는 정수 값을 외부 변수에 식별되도록 구성
: local_file.abc와 local_file.def는 var.name에 선언되는 값에 영향을 받아 동일한 갯수만큼 생성
: local_file.def의 경우 local_file.abc와 개수가 같아야 content에 선언되는 인수 값에 오류가 없을 것이므로 서로 참조되는 리소스와 모듈의 반복정의에 대한 공통의 영향을 주는 변수로 관리
- count로 생성되는 리소스의 경우 <리소스 타입>,<이름>[<인덱스 번호>], 모듈의 경우 module,<모듈 이름>[<인덱스 번호>]로 해당 리소스의 값을 참조
- 모듈 내에 count 적용이 불가능한 선언이 있으므로 주의
- provider 블록 선언부가 포함되어 있는 경우에는 count 적용이 불가 -> provider 분리
- 외부 변수가 list 타입인 경우 중간에 값이 삭제되면 인덱스가 줄어들어 의도했던 중간 값에 대한 리소스만 삭제되는 것이 아니라 이후의 정의된 리소스들도 삭제되고 재생성
반복문- 실습
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_iam_user" "myiam" {
count = 3
name = "myuser.${count.index}"
}
- count 입력 변수를 통해 IAM 사용자 생성
- 배열 조회 구문 Array lookup systax
: ARRAY [<INDEX>]
: var.user_names[1] -> var.user_names의 인덱스 1에서 요소를 찾는 방법
- length(내장) 함수 built-on-function
: length(<ARRAY>)
: 주어진 ARRAY의 항목 수를 반환하는 함
▶count 제약사항
1. 전체 리소스를 반복할 수 있지만 리소스 내에서 인라인 블록을 반복 X
: 각각의 taf를 사용하려면 key, value, propagate_at_launch에 대한 값으로 새 인라인 블록을 만들어야 함
: count 매개변수를 사용해서 이러한 태그를 반복하고 동적인 인라인 tag 블록을 생성하려고 시도할 수 있지만,
인라인 블록 내에서는 count 사용은 지원 X
resource "aws_autoscaling_group" "example" {
launch_configuration = aws_launch_configuration.example.name
vpc_zone_identifier = data.aws_subnets.default.ids
target_group_arns = [aws_lb_target_group.asg.arn]
health_check_type = "ELB"
min_size = var.min_size
max_size = var.max_size
tag {
key = "Name"
value = var.cluster_name
propagate_at_launch = true
}
}
2. 배열 중간 값을 변경할 때 의도하지 않은 결과 발생
: variables.tf 중간에 있는 akbun 을 제거하고 plan & apply
: 배열의 중간에 항목을 제거하면 모든 항목이 1칸씩 앞으로 당겨짐
: count 사용 시 목록-중간 항목을 제거하면 테라폼은 해당 항목 뒤에 있는 모든 리소스를 삭제한 다음 해당 리소스를 처음부터 다시 만듬
'스터디 > Terraform' 카테고리의 다른 글
[Terraform T101 4기 스터디] - 기본 사용 (3)_2 (0) | 2024.06.24 |
---|---|
[Terraform T101 4기 스터디] - 기본 사용 (3)_1 (0) | 2024.06.24 |
[Terraform T101 4기 스터디] - 기본 사용 (2)_3 (0) | 2024.06.20 |
[Terraform T101 4기 스터디] - 기본 사용 (2)_1 (0) | 2024.06.16 |
[Terraform T101 4기 스터디] - 기본 사용 (1) (0) | 2024.06.11 |