[OSSCA] Terraform Provider 개발을 위한 네이버 클라우드 플랫폼 사용 가이드
네이버 클라우드플랫폼
클라우드 서비스를 이용할 수 있게 하는 콘솔페이지를 제공해주는데 그 홈페이지를 일컬음
cf. 공식 블로그
https://blog.naver.com/n_cloudplatform/222189643849
[이렇게 사용하세요!] Terraform을 활용한 네이버 클라우드 플랫폼 VPC 인프라 구성하기
안녕하세요, 네이버 클라우드 플랫폼입니다. 오늘은 인프라 자동화를 위한 IaC(Infrastructure as a Co...
blog.naver.com
클라우드를 왜 쓰는지? 어떤 게 좋은가?
필요에 따라 유연하게 컴퓨팅 리소스를 사용하기 위해서
온디맨드 금액
온프레미스 환경과 다르게 유연한 대처 가능
- 효율적인 비용 절감
- 사용한만큼 지불하는 등 기회 비용 최적화 등을 통한 비용 절감
- 다양한 부가 상품 이용을 통한 개발 비용 절감
- 빠른 Deploy
- 기존 Legacy 인프라에 비해 빠른 인프라 구성 시간
- 글로벌 진출 시 용이
- 글로벌 리전 활용을 통해 글로벌 진출 시 보다 빠르고 손 쉬운 인프라 구성
- 보안
- 인프라에 대한 보안은 클라우드 공급 업체(클라우드 csp)에 위임
- 다양한 보안 상품을 이용하여 보안을 강화
클라우드CSP
CSP(Cloud Service Provider, 클라우드 서비스 제공업체)는 클라우드 컴퓨팅 서비스를 제공하는 기업이나 조직을 가리키는 용어입니다. 클라우드 서비스 제공업체는 대규모 데이터 센터와 컴퓨터 인프라를 보유하고, 이를 이용하여 가상화된 컴퓨팅 리소스(서버, 스토리지, 네트워크 등)를 사용자에게 제공합니다.
CSP는 다양한 클라우드 서비스를 제공하며, 일반적으로 다음과 같은 서비스를 포함할 수 있습니다:
- 인프라스트럭처 서비스(IaaS, Infrastructure as a Service): 가상화된 컴퓨팅 리소스를 제공하여 사용자가 인프라를 프로비저닝하고 운영할 수 있게 합니다. 예: Amazon Web Services(AWS), Microsoft Azure, Google Cloud Platform(GCP)
- 플랫폼 서비스(PaaS, Platform as a Service): 애플리케이션을 개발, 실행 및 관리하기 위한 플랫폼 환경을 제공합니다. 사용자는 애플리케이션 코드에만 집중하고, 인프라 관리에 대한 부담이 줄어듭니다. 예: Heroku, IBM Cloud Foundry
- 소프트웨어 서비스(SaaS, Software as a Service): 사용자에게 완전한 소프트웨어 애플리케이션을 제공합니다. 사용자는 애플리케이션을 설치하거나 관리하지 않고, 클라우드에서 제공되는 소프트웨어를 사용합니다. 예: Salesforce, Microsoft Office 365
주요 CSP들은 세계적으로 규모가 크고 안정적인 클라우드 인프라를 운영하며, 기업과 개발자들이 클라우드 서비스를 활용하여 유연하고 확장 가능한 인프라를 구축하고 운영할 수 있게 합니다.
인증키
네이버 클라우드를 사용해서 테라폼을 쓰려면 인증키 필요
API 쓸 때마다 인증키 필요
계정마다 인증키가 각자 있을 것

사용 가이드
https://guide.ncloud-docs.com/docs/ko/home
Home
guide.ncloud-docs.com
각 상품에 대한 사용 가이드 있음
어떤 스펙을 제공하고 어떤 기능들을 제공하고 있는지
콘솔을 어떻게 써야 하는지 등등 다양하게 있음
상품군마다 내용이 많음 (필요할 때마다 찾아보면 될 것)
테라폼은 해당 내용을 만들어주는 플러그인이기 때문에 해당 내용들을 엄청 잘 알 필요는 없음
클라우드를 더 심화해서 쓰거나 네이버 클라우드를 쓰게 된다면 읽어보면 됨
API 가이드
https://api.ncloud-docs.com/docs/ko/home
HOME
api.ncloud-docs.com
테라폼 프로바이더를 만들 때 매우 중요한 게 API 가이드
테라폼도 클라우드 리소스를 생성하려면 생성할 수 있는 내부 api 들이 있어야지 그걸 통해서 만들 수 있음
테라폼 만들 때 api 가이드 많이 참고해서 만들 것임
새로운 리소스까지 만들어보고자 한다면 여기 있는 것들 참고하게 될 것
테라폼 프로바이더 내부도 api 가이드 많이 활용함
createVPC

VPC를 만들 때 api를 사용하는데 파라미터들이 제공됨
테라폼으로 해당 리소스를 만들 때 쓰게 되는 arguments
GET {API_URL}/vpc/v2/createVpc
?regionCode=KR
&vpcName=test-***
&ipv4CidrBlock=***.***.0.0/16

요청을 넣으면, 아래처럼 응답이 오게 됨
<createVpcResponse>
<requestId>21a29c59-3139-4c23-9f92-10c1fddafef6</requestId>
<returnCode>0</returnCode>
<returnMessage>success</returnMessage>
<totalRows>1</totalRows>
<vpcList>
<vpc>
<vpcNo>***04</vpcNo>
<vpcName>test-***</vpcName>
<ipv4CidrBlock>***.***.0.0/16</ipv4CidrBlock>
<vpcStatus>
<code>INIT</code>
<codeName>init</codeName>
</vpcStatus>
<regionCode>KR</regionCode>
<createDate>2020-07-27T17:17:05+0900</createDate>
</vpc>
</vpcList>
</createVpcResponse>
응답에 딸려오는 정보들이 attribute 항목에 들어간다고 보면 됨
알아둬야 하는 것
1. 콘솔에서 해당 상품을 만들 때 어떤 파라미터들을 입력하는가?
2. api 가이드에서도 제공을 해주느냐?
테라폼 프로바이더들의 리소스를 만들 때 설계를 의존해서 만드는 것
cf. argument vs. attribute?
https://developer.hashicorp.com/terraform/language
테라폼에서 "argument"와 "attribute"는 테라폼 구성 파일에서 리소스 블록에 대한 설정을 정의하는 데 사용되는 용어입니다.
Argument: 테라폼 리소스 블록 내에서 사용되는 설정 옵션을 나타냅니다. 각 리소스 유형에는 해당 리소스가 가질 수 있는 특정한 설정 옵션들이 있습니다. 예를 들어, Amazon Web Services(AWS)의 EC2 인스턴스 리소스의 경우, instance_type, ami, subnet_id 등과 같은 다양한 인스턴스 관련 설정 옵션들이 argument로 사용될 수 있습니다. Argument는 리소스의 원하는 상태를 정의하는 데 사용되며, 테라폼이 해당 리소스를 생성, 변경 또는 삭제할 때 사용됩니다.
resource "aws_instance" "example" {
ami = "ami-0c94855ba95c71c99"
instance_type = "t2.micro"
subnet_id = "subnet-0123456789abcdef0"
}
output "instance_id" {
value = aws_instance.example.id
}
Attribute: 테라폼 리소스가 생성된 후에 조회(terraform show)하거나 다른 리소스와 상호작용하는 데 사용되는 속성을 나타냅니다. 리소스가 생성되면 테라폼은 해당 리소스의 속성(Attribute) 값을 가져올 수 있습니다. 예를 들어, EC2 인스턴스 리소스의 경우, id, public_ip, private_ip 등과 같은 인스턴스의 특정 속성들이 attribute로 사용될 수 있습니다. Attribute는 테라폼이 관리하는 인프라스트럭처의 현재 상태를 표현하고, 다른 리소스와의 의존성을 설정하는 데 사용됩니다.
# ...
aws_instance.example:
id = i-0123456789abcdef0
ami = ami-0c94855ba95c71c99
instance_type = t2.micro
subnet_id = subnet-0123456789abcdef0
public_ip = 203.0.113.123
private_ip = 10.0.1.123
security_group_names = [
"my-security-group",
]
# ...
테라폼 Console
콘솔을 통해서 클라우드 서비스를 만들 수 있음
클라우드 상품을 이용하는 방법
1. 콘솔로 생성 가능
2. api로 만들 수 있음
3. Ncloud CLI (클라이언트)로도 사용 가능 - 명령 기반으로 사용 가능
4. 테라폼을 이용한 클라우드 상품 생성

Platform

Classic과 VPC가 있음
VPC란 가상의 논리적인 네트워크 공간
VPC
퍼블릭 클라우드 상에서 제공되는 고객 전용 사설 네트워크를 의미

https://blog.naver.com/n_cloudplatform/222189643849
[이렇게 사용하세요!] Terraform을 활용한 네이버 클라우드 플랫폼 VPC 인프라 구성하기
안녕하세요, 네이버 클라우드 플랫폼입니다. 오늘은 인프라 자동화를 위한 IaC(Infrastructure as a Co...
blog.naver.com
cf.
CIDR 블록
subnet mask
IPv4
Route Table
InBound/OutBound 트래픽
Public, Private IP (VPC에서 어떻게 동작?)
private subnet에 왜 backend server가 있는가?
tcp udp icmp (ping을 할 때 사용되는 프로토콜이 icmp / 상대방하고 네트워크가 정상적으로 되는지 안되는지 체크할 때 쓰는 프로토콜)
클라우드 인프라 구성
네트워크 구성
클라우드에 인프라 구성 시, 일단 네트워크 구성부터 꾸려야 함!
네트워크 구성이란?
내가 하려고 하는 서비스들이 어떤 네트워크 경로를 통해서 내 서버까지 전달되는지 설계해야
서버를 쓰려면 결국 네트워크가 뚫려야 함
따라서 네트워크에 있는 VPC를 먼저 설정해야 서버를 온전히 쓸 수 있게 됨
10.0.0.0/16
IPv4이기 때문에 하나 당 8비트씩 해서 총 32비트 IP 주소인데
/16은 32비트 - 16비트 해서 16비트 즉, 뒤의 0.0 (8 + 8)이 자유롭게 IP 주소로 사용 가능한 것
2의 16승 개의 IP 주소 사용 가능 (65536개의 Ip 주소 사용 가능)
10.0.0.0/24
2의 32승 - 24승 = 2의 8승 즉, 뒤의 0 하나에 ip 주소 할당 가능
10.0.0.x 형식
2의 8승 개, 256개 - but Reserved IP address 6개 제외한 250개의 ip 주소 할당 가능
ACL
서브넷에서 ACL을 설정하면 트래픽이 접근 허용할지 말지 결정 가능
인바운드 : 외부에서 들어오는 것에 대한 설정 - 서버 바깥에 서브넷이 있는데, 서브넷에 ACL을 설정하면 들어올지 말지를 체크하는 것
아웃바운드 : 내가 내보내는 것에 대한 설정