[IaC] Terraform + Cloudstack

송현아·2021년 9월 1일
0

Terraform

목록 보기
3/3
post-thumbnail

Terraform 관련 레퍼런스나 블로그 등을 찾아보면 대부분 AWS, GCP 등 주요 퍼블릭 클라우드를 사용한 후기들 밖에 없었습니다. 저는 이번에 졸업과제를 진행하면서 Openstack과 Cloudstack을 Terraform을 통해 프로비저닝하는 과정을 진행하였습니다. 그 중에서 오늘은 Cloudstack을 사용하는 방법을 알려드리겠습니다. 👍

🧷 CloudStack이란

CloudStack은 프라이빗, 퍼블릭 또는 하이브리드 형식의 IaaS를 구축하기 위해 컴퓨터 자원을 모아서 관리하는 오픈소스 소프트웨어 플랫폼입니다. CloudStack에 대한 자세한 소개는 다음에 따로 포스팅하겠습니다!

공식 페이지 URL : https://cloudstack.apache.org/index.html

  • 주요 기능

    • 다양한 하이퍼바이저 지원
    • 대규모 확장 가능한 인프라 관리
    • 자동 구성 관리
    • 그래픽 사용자 인터페이스
    • API 확장

🧷 CloudStack Provider

테라폼은 다양한 프로바이더에 대한 리소스 코드를 제공하고 있습니다.

CloudStack은 프로바이더 부분에 필요한 부분은 api_url + api_key + secret_key 입니다. api_key 와 secret_key는 CloudStack의 대시보드에서 사용자 세부 정보에서 확인할 수 있습니다.

  • Example Usage (provider.tf)

    • api_url
    • api_key
    • secret_key
# 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}"
}

🧷 CloudStack Resource

프로바이더만 설정을 제대로 한다면 Resource는 예시를 참조해서 적기만 하면 됩니다. 이번에는 인스턴스 생성을 예시로 적용해 보았습니다. 테라폼은 HCL 또는 JSON으로 작성할 수 있습니다. 저는 이번에 Python으로 파싱하기 위해서 JSON을 사용하였습니다.

  • Instance 생성 (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"
                        }
                }
        }
}
  • Instance 생성 (HCL 버전)

resource "cloudstack_instance" "instance_1" {
  name             = "server-1"
  service_offering = "Small Instance"
  network_id       = "6eb22f91-7454-4107-89f4-36afcdf33021"
  template         = "centos 7"
  zone             = "zone1"
}

💡 Terraform 적용

  • init

    테라폼의 다른 명령어들을 위한 설정을 진행합니다. 내부적으로는 provider와 state, module 설정 등이 있습니다.

>> terraform init
  • plan

    실제로 작성한 테라폼 코드가 어떻게 만들어질지에 대한 예측 결과를 보여주는 명령어입니다.

    ❗ 항상 plan 명령어를 습관화 하자 ❗

>> terraform plan
  • Apply

    실제로 작성한 코드로 자원을 생성하는 명령어입니다.

>> terraform apply

생성이 성공적으로 되었다면, 아래의 그림과 같이 결과가 뜨는 것을 확인할 수 있습니다. 코드로 이렇게 인프라를 생성할 수 있다니 너무 흥미로운 것 같습니다 😆😆 다음에는 Openstack을 Terraform에 적용해보겠습니다!!

0개의 댓글