[OSSCA] Docs directory 수정
현재 Terraform registry에 올라가 있는 ncloud documentation의 구조는 다음과 같다.
https://registry.terraform.io/providers/NaverCloudPlatform/ncloud/latest/docs
Resources와 Data Sources로 구분되어 있다.
Resources vs. Data Sources
resources는 인프라를 제어하기 위해 CRUD가 들어간 것을 의미한다.
예를 들어, ACL (Access Control Group) resource를 생성해주는 Resource 관련 HCL 코드를 생성할 때는 현재 docs의 Resources 탭 하단의 ncloud_access_control_group를 들어가면 된다.
resource를 처음 생성할 때는 위와 같은 example usage를 입력해서 각 attribute에 값을 입력하고 resource를 인프라로 생성해줄 수 있다.
한편, Data Source의 경우 말 그대로 정보이다.
내가 이미 생성해놓은 것을 참조할 때는 Data Source 안의 Id를 가져와서 사용해준다.
그리고 그것을 가지고 서로 인스턴스들은 의존성을 생성해준다.
예를 들어, 내가 작성한 Terraform config file에서 리소스를 생성해줄 때, 이미 존재하는 VPC의 ID나 서브넷의 CIDR block 등을 가져와 사용하고자 할 때 data source를 가져와서 사용 가능한 것이다.
func resourceNcloudSubnetCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*conn.ProviderConfig)
if !config.SupportVPC {
return NotSupportClassic("resource `ncloud_subnet`")
}
reqParams := &vpc.CreateSubnetRequest{
RegionCode: &config.RegionCode,
Subnet: ncloud.String(d.Get("subnet").(string)),
SubnetTypeCode: ncloud.String(d.Get("subnet_type").(string)),
UsageTypeCode: ncloud.String(d.Get("usage_type").(string)),
NetworkAclNo: ncloud.String(d.Get("network_acl_no").(string)),
VpcNo: ncloud.String(d.Get("vpc_no").(string)),
ZoneCode: ncloud.String(d.Get("zone").(string)),
}
// 중략
}
위의 코드는 Subnet을 생성할 때의 코드 중 일부인데, subnet creation할 때 전달해주는 인자 정보 중에 하나인 reqParams에
기존에 있는 ResourceData 값을 가져와서 vpc_no 등의 값을 set해준다.
의존성이란, 인스턴스들의 "순서가 정해지는 것"을 의미한다.
예를 들어 VPC를 생성할 때를 생각해보면 다음과 같은 순서를 지켜야 제대로 리소스가 생성될 수 있다.
1. VPC
2. Subnet
3. Route Table : VPC의 라우팅 테이블 생성하고, 서브넷과 연결.
4. Internet Gateway
5. Security Group
6. Network ACL
7. EC2 Instance
이런 인스턴스들 간의 순서를 자동화해주기 때문에 테라폼이 편한 것이다.
data source doc의 예시를 보면 아래와 같다.