샘플 코드 클론
git clone https://github.com/hashicorp/terraform-provider-scaffolding-framework
git repo 이름 변경
mv terraform-provider-scaffolding-framework terraform-provider-ktcloud
go.mod 파일에서 module 명 변경
go mod edit -module terraform-provider-ktcloud
go mod tidy 명령어는 Go 모듈의 의존성 목록을 정리하고 최적화하는 역할을 합니다
gmo mod tidy
main.go 파일에서 import 수정
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package main
import (
"context"
"flag"
"log"
"github.com/hashicorp/terraform-plugin-framework/providerserver"
"terraform-provider-ktcloud/internal/provider"
)
Terraform에서 provider, datasource, resource는 인프라를 코드로 관리할 때 핵심적인 역할을 합니다. 각각을 쉽게 설명하면 다음과 같습니다.
- Provider (프로바이더)
- 역할: 특정 클라우드나 서비스(예: AWS, Azure, Google Cloud, 혹은 커스텀 API 등)와의 연결 역할을 담당합니다.
- 예시: AWS 프로바이더는 AWS API와 통신하여 인프라를 관리할 수 있도록 지원합니다.
- Datasource (데이터 소스)
- 역할: 외부 시스템에서 읽기 전용 데이터를 가져옵니다.
- 예시: 기존에 생성된 VPC 정보나 AMI ID를 조회하여 Terraform 구성에 활용할 수 있습니다.
- 특징: 데이터 소스는 값을 읽기만 하며, 직접적으로 변경하거나 생성하지 않습니다.
- Resource (리소스)
- 역할: Terraform이 생성, 업데이트, 삭제 등 상태 관리를 할 수 있는 인프라 구성 요소입니다.
- 예시: EC2 인스턴스, S3 버킷, 데이터베이스 인스턴스 등이 이에 해당합니다.
- 특징: 선언한 상태에 맞춰 외부 인프라의 생성, 변경, 삭제를 자동으로 수행합니다.
요약하자면,
- Provider는 외부 시스템과의 연결을 관리하고,
- Datasource는 외부 데이터를 조회하는 역할을,
- Resource는 외부 인프라 구성 요소를 생성하고 관리하는 역할을 합니다.
참고
https://developer.hashicorp.com/terraform/plugin
Plugin development | Terraform | HashiCorp Developer
Learn how to design, develop, and test plugins that connect Terraform to external services.
developer.hashicorp.com
Implement a provider with the Terraform Plugin Framework | Terraform | HashiCorp Developer
Begin creating a custom provider using the Terraform Plugin Framework.
developer.hashicorp.com
github repo: https://github.com/terraform-provider-openstack/terraform-provider-openstack
GitHub - terraform-provider-openstack/terraform-provider-openstack: Terraform OpenStack provider
Terraform OpenStack provider. Contribute to terraform-provider-openstack/terraform-provider-openstack development by creating an account on GitHub.
github.com