Terraform 관련 레퍼런스나 블로그 등을 찾아보면 대부분 AWS, GCP 등 주요 퍼블릭 클라우드를 사용한 후기들 밖에 없었습니다. 저는 이번에 졸업과제를 진행하면서 Openstack과 Cloudstack을 Terraform을 통해 프로비저닝하는 과정을 진행하였습니다. 그 중에서 오늘은 Cloudstack을 사용하는 방법을 알려드리겠습니다. 👍
CloudStack은 프라이빗, 퍼블릭 또는 하이브리드 형식의 IaaS를 구축하기 위해 컴퓨터 자원을 모아서 관리하는 오픈소스 소프트웨어 플랫폼입니다. CloudStack에 대한 자세한 소개는 다음에 따로 포스팅하겠습니다!
공식 페이지 URL : https://cloudstack.apache.org/index.html
테라폼은 다양한 프로바이더에 대한 리소스 코드를 제공하고 있습니다.
- terraform-provider-cloudstack (1) : https://github.com/xanzy/terraform-provider-cloudstack
- terraform-provider-cloudstack (2) : https://registry.terraform.io/providers/orange-cloudfoundry/cloudstack/latest/docs
CloudStack은 프로바이더 부분에 필요한 부분은 api_url + api_key + secret_key 입니다. api_key 와 secret_key는 CloudStack의 대시보드에서 사용자 세부 정보에서 확인할 수 있습니다.
# Cloudstack Provider
terraform {
required_providers {
cloudstack = {
source = "orange-cloudfoundry/cloudstack"
version = "0.4.0"
}
}
}
provider "cloudstack" {
api_url = "${var.cloudstack_api_url}"
api_key = "${var.cloudstack_api_key}"
secret_key = "${var.cloudstack_secret_key}"
}
프로바이더만 설정을 제대로 한다면 Resource는 예시를 참조해서 적기만 하면 됩니다. 이번에는 인스턴스 생성을 예시로 적용해 보았습니다. 테라폼은 HCL 또는 JSON으로 작성할 수 있습니다. 저는 이번에 Python으로 파싱하기 위해서 JSON을 사용하였습니다.
{
"resource": {
"cloudstack_instance": {
"instance_1": {
"name": "server-1",
"service_offering": "Small Instance",
"network_id": "6eb22f91-7454-4107-89f4-36afcdf33021",
"zone": "zone1",
"template": "centos 7"
}
}
}
}
resource "cloudstack_instance" "instance_1" {
name = "server-1"
service_offering = "Small Instance"
network_id = "6eb22f91-7454-4107-89f4-36afcdf33021"
template = "centos 7"
zone = "zone1"
}
테라폼의 다른 명령어들을 위한 설정을 진행합니다. 내부적으로는 provider와 state, module 설정 등이 있습니다.
>> terraform init
실제로 작성한 테라폼 코드가 어떻게 만들어질지에 대한 예측 결과를 보여주는 명령어입니다.
❗ 항상 plan 명령어를 습관화 하자 ❗
>> terraform plan
실제로 작성한 코드로 자원을 생성하는 명령어입니다.
>> terraform apply
생성이 성공적으로 되었다면, 아래의 그림과 같이 결과가 뜨는 것을 확인할 수 있습니다. 코드로 이렇게 인프라를 생성할 수 있다니 너무 흥미로운 것 같습니다 😆😆 다음에는 Openstack을 Terraform에 적용해보겠습니다!!