terraform console 명령
terraform console 명령
terraform console 명령은 표현식을 평가하기 위한 대화형 콘솔을 열어 주는 명령이에요. 구성에 넣기 전에 보간법을 테스트하거나 상태에 저장된 값을 살펴보는 데 아주 유용해요.
출처: 문서
본문
사용법 (Usage)
사용법: terraform console [options]
이 명령은 표현식을 평가하고 실험하기 위한 대화형 커맨드 라인 콘솔을 제공해요. 구성을 사용하기 전에 보간법을 테스트하고 현재 상태에 저장된 어떤 값과도 상호작용할 수 있어요. 현재 상태가 비어 있거나 아직 생성되지 않았다면 콘솔을 사용해 표현식 문법과 내장 함수를 실험할 수 있어요. 콘솔은 상태에 락을 보유하므로, 상태를 수정하는 다른 작업을 수행하는 동안에는 콘솔을 사용할 수 없어요.
콘솔을 닫으려면 exit 명령을 입력하거나 Control-C 또는 Control-D를 누르면 돼요.
로컬 백엔드만 사용하는 구성의 경우 terraform console은 레거시 커맨드 라인 옵션 -state를 받아들여요.
평가 범위 (Evaluation Scope)
기본적으로 terraform console은 루트 모듈을 범위로 표현식을 평가해요. 즉, 표현식에는 루트 모듈에만 정의된 모든 변수, 로컬, 리소스 또는 기타 유형만 포함될 수 있어요.
평가 범위를 변경해 하위 모듈에 정의된 변수, 로컬, 리소스 또는 기타 유형으로 표현식을 평가할 수 있어요. 원하는 하위 모듈 주소와 함께 -scope 플래그를 제공하면 돼요. 예를 들어:
terraform console -scope='module.child'
count나 for_each 인자를 사용해 여러 인스턴스를 가진 하위 모듈도 평가 범위로 사용할 수 있어요. 예를 들어:
# 모듈이 count를 사용하면 인덱스가 제공된다
terraform console -scope='module.child[0]'
# 모듈이 for_each를 사용하면 키가 제공된다
terraform console -scope='module.child["key"]'
스크립팅 (Scripting)
terraform console 명령은 개행으로 구분된 명령을 파이프로 전달해 비대화형 스크립트에서도 사용할 수 있어요. 이전에 오류가 발생하지 않는 한 최종 명령의 출력만 인쇄돼요.
예를 들어:
$ echo 'split(",", "foo,bar,baz")' | terraform console
tolist([
"foo",
"bar",
"baz",
])
원격 상태 (Remote State)
현재 백엔드가 원격 상태를 사용한다면, Terraform은 표현식을 평가하기 전에 백엔드에서 현재 워크스페이스의 상태를 읽어요.
플랜에 대한 평가 (Evaluation against a Plan)
기본적으로 terraform console은 현재 Terraform 상태에 대해 표현식을 평가하므로, 플랜을 적용해 아직 생성되지 않은 리소스 인스턴스의 결과는 일반적으로 매우 제한적이에요.
-plan 옵션을 사용하면 terraform plan을 실행하는 것처럼 먼저 실행 계획을 생성한 다음, 계획된 상태에 대해 평가하여 플랜 적용 후 Terraform이 올바를 것으로 기대하는 값을 설명할 수 있어요. 이렇게 하면 콘솔 프롬프트가 나타나기 전에 지연이 길어지지만, 그 대신 표현식 범위에서 더 완전한 값 집합을 사용할 수 있어요.
잘 작성된 구성의 경우 플래닝 단계가 실제 원격 개체를 수정하지 않아야 하지만, 플래닝 중에 상당한 작업을 수행할 수 있는 구성을 작성하는 것은 가능해요. 예를 들어 hashicorp/external 프로바이더의 external 데이터 소스를 사용하는 구성은 플랜 단계에서 구성된 외부 명령을 실행할 가능성이 높으며, 이는 terraform console -plan에서도 실행된다는 뜻이에요.
플랜 단계에서 변경을 수행하는 구성을 작성하는 것은 권장하지 않아요. 그럼에도 그런 구성을 작성한다면, 플랜 모드에서 콘솔을 그 구성에 대해 사용할 때는 주의하세요.
예제 (Examples)
terraform console 명령은 현재 작업 디렉터리의 Terraform 구성과 구성된 백엔드의 Terraform 상태 파일을 읽어서, 구성의 값과 상태 파일 양쪽에 대해 보간법을 테스트할 수 있게 해 줘요.
다음 main.tf가 있다고 할 때:
variable "apps" {
type = map(any)
default = {
"foo" = {
"region" = "us-east-1",
},
"bar" = {
"region" = "eu-west-1",
},
"baz" = {
"region" = "ap-south-1",
},
}
}
resource "random_pet" "example" {
for_each = var.apps
}
terraform console을 실행하면 대화형 셸로 들어가 보간법을 테스트할 수 있어요:
지도에서 값을 출력하기:
> var.apps.foo
{
"region" = "us-east-1"
}
특정 값에 따라 지도를 필터링하기:
> { for key, value in var.apps : key => value if value.region == "us-east-1" }
{
"foo" = {
"region" = "us-east-1"
}
}
특정 값이 apply 전까지 알려지지 않을 수 있는지 확인하기:
> random_pet.example
(known after apply)
다양한 함수를 테스트하기:
> cidrnetmask("172.16.0.0/12")
"255.240.0.0"