프로바이더 메타데이터 수집
프로바이더 메타데이터 수집 (Collect Provider Metadata)
개발하는 프로바이더 안에 모듈의 리소스와 무관한 메타데이터(예: 사용 통계)를 수집할 수 있는 인터페이스를 만드는 방법을 설명해요. 프로바이더 메타데이터를 통해 모듈이 프로바이더 구성과 독립적으로 정보를 전달할 수 있어요. 고급 주제입니다.
출처: 문서
본문
이 주제는 개발하는 프로바이더 안에 모듈의 리소스와 무관한 메타데이터(예: 사용 통계)를 수집할 수 있는 인터페이스를 만드는 방법을 설명해요. 고급 주제이며 Terraform을 사용하는 데 필요하지 않아요.
소개
어떤 상황에서는 프로바이더가 모듈의 리소스와 무관하지만 모듈별로 범위가 지정된 정보를 모듈이 전달할 수 있는 인터페이스를 제공하는 것이 유용해요.
프로바이더 메타데이터는 프로바이더가 기대하는 메타데이터 필드를 선언할 수 있게 해주며, 각 모듈은 어떤 프로바이더 구성과도 독립적으로 해당 필드를 채울 수 있어요. 프로바이더 구성은 종종 모듈 간에 공유되지만, 프로바이더 메타데이터는 항상 모듈별로 특정해요.
프로바이더 메타데이터는 주로 공식 모듈이 함께 작동하도록 의도된 프로바이더를 만든 벤더와 동일한 벤더에 의해 개발된 상황을 위해 설계되었어요. 이를 통해 벤더가 프로바이더를 통해 각 모듈의 사용 통계를 간접적으로 얻을 수 있게 해요. 그런 이유로 이 문서는 모듈 개발자가 아니라 프로바이더 개발자의 관점에서 제시돼요.
실험적 기능: 이 기능은 실험적이에요. Terraform 팀과 조율해서 이 기능을 어떻게 사용하는지 이해시키도록 해야 해요. 그렇게 하면 기능이 발전함에 따라 사용 사례가 고려될 수 있어요.
스키마 정의
프로바이더가 모듈에서 정보를 받으려면 먼저 받을 수 있는 데이터를 엄격하게 정의해야 해요. schema.Provider 구조체에 ProviderMeta 속성을 설정하면 이 작업을 할 수 있어요. 그 값은 프로바이더 구성과 유사하게 동작해요. 즉 문자열을 그 값들이 받아들이는 schema.Schema에 대한 맵입니다.
데이터 사용
Terraform이 프로바이더를 호출할 때, 이미 Create, Read, Update 함수가 사용하는 schema.ResourceData를 사용해 전달되는 프로바이더 메타데이터에 접근할 수 있어요. 먼저 스키마와 일치하는 구조체를 정의한 다음, schema.ResourceData의 GetProviderSchema 메서드를 호출해 해당 유형의 변수에 대한 포인터를 전달하세요.
변수는 프로바이더 메타데이터로 채워지며, 데이터를 구조체로 파싱하는 데 문제가 있으면 오류를 반환해요.
모듈에서 데이터 지정
모듈에 데이터를 포함하려면 모듈의 terraform 블록 아래에 정보를 전달하려는 프로바이더의 이름으로 provider_meta 중첩 블록을 만드세요:
terraform {
provider_meta "my-provider" {
hello = "world"
}
}
provider_meta 블록은 프로바이더가 정의한 스키마와 일치해야 해요.
모듈 버전 관리
이 기능을 활용하는 모든 모듈은 제공되는 프로바이더 메타데이터가 프로바이더에 정의된 스키마와 일치하고, 실행 중인 Terraform 버전이 프로바이더 메타데이터 기능을 지원하는지 확인해야 해요. 따라서 이 기능을 활용하는 모듈은 최소 Terraform 버전을 0.13.0 이상으로, 그리고 메타데이터를 지정하는 각 프로바이더의 최소 버전을 사용 중인 스키마가 프로바이더에서 지원된 첫 번째 버전으로 지정하는 것이 좋아요.