fileset 함수

fileset 함수

fileset 함수는 경로와 패턴이 주어지면 일치하는 일반 파일 이름들의 집합을 열거해요. 결과에서 경로는 자동으로 제거되고, 경로 구분자를 포함하는 결과는 크로스 시스템 호환성을 위해 항상 슬래시(/)를 구분자로 사용해요. 함수는 구성 파싱 시점에 평가되므로 Terraform이 어떤 작업을 하기 전에 이미 디스크에 있는 파일에만 사용할 수 있어요.

출처: 문서

본문

fileset은 경로와 패턴이 주어지면 일반 파일 이름들의 집합을 열거해요. 결과 파일 이름 집합에서 경로는 자동으로 제거되고, 경로 구분자를 여전히 포함하는 결과는 크로스 시스템 호환성을 위해 항상 슬래시(/)를 구분자로 돌려줘요.

fileset(path, pattern)

지원되는 패턴 매칭:

  • * - 구분자가 아닌 문자의 모든 시퀀스를 매치해요
  • ** - 구분자 문자를 포함한 모든 문자의 시퀀스를 매치해요
  • ? - 하나의 구분자 문자가 아닌 문자를 매치해요
  • {alternative1,...} - 콤마로 구분된 대안 중 하나가 일치하면 문자 시퀀스를 매치해요
  • [CLASS] - 문자 클래스 안의 단일 구분자 문자가 아닌 문자를 매치해요 (아래 참고)
  • [^CLASS] - 문자 클래스 밖의 단일 구분자 문자가 아닌 문자를 매치해요 (아래 참고)

이중 별표(**)는 그 자체가 하나의 경로 구성 요소로 나타나야 해요. /path** 같은 패턴은 유효하지 않으며 /path*와 동일하게 취급되지만, /path*/**는 원하는 결과를 얻을 수 있어요.

문자 클래스는 다음을 지원해요:

  • [abc] - 집합 안의 단일 문자를 매치해요
  • [a-z] - 범위 안의 단일 문자를 매치해요

함수는 적용 시점이 아니라 구성 파싱 중에 평가되므로, 이 함수는 Terraform이 어떤 작업을 하기 전에 이미 디스크에 존재하는 파일에만 사용할 수 있어요.

예시

> fileset(path.module, "files/*.txt")
[
  "files/hello.txt",
  "files/world.txt",
]

> fileset(path.module, "files/{hello,world}.txt")
[
  "files/hello.txt",
  "files/world.txt",
]

> fileset("${path.module}/files", "*")
[
  "hello.txt",
  "world.txt",
]

> fileset("${path.module}/files", "**")
[
  "hello.txt",
  "world.txt",
  "subdirectory/anotherfile.txt",
]

fileset의 일반적인 용도는 the for_each meta-argument를 사용해 매치된 파일마다 리소스 인스턴스를 하나씩 만드는 거예요:

resource "example_thing" "example" {
  for_each = fileset(path.module, "files/*")

  # other configuration using each.value
}

더 알아보기 (Learn more)