VMware Cloud Foundation을 활용한 최신 자동화 파트 2: VCF와 인프라 코드화

발행: (2026년 6월 11일 PM 08:54 GMT+9)
8 분 소요

출처: VMware Blog

지난 게시물에서 SDDC Manager가 제공하는 UI를 이용한 원터치 자동화에 대해 배웠습니다. SDDC Manager를 통해 새 클러스터를 자동으로 배포하고, 기존 클러스터에 새 호스트를 추가하며, 여러 vCenter에 걸친 인프라를 Fleet 전역에서 관리할 수 있다는 점을 알게 되었습니다.

이번 글에서는 인프라를 코드(IaC) 방식으로 관리하는 접근법을 살펴보고, VCF API를 활용해 VCF 인프라를 보다 자동화된 방식으로 프로비저닝하고 수명 주기를 관리하는 방법을 자세히 설명합니다.

현장 보고: 자동화 플랫폼에 대한 한마디

VMware 엔지니어와 매일 대화하면서 “Terraform을 지원하나요?” 혹은 “Ansible을 지원하나요?”라는 질문을 자주 듣습니다.

그 질문은 잘못된 질문입니다.

우리는 어떤 도구를 사용하든 상관하지 않습니다.

VCF를 사용하면 표준화되고 통합된 REST API 엔드포인트를 제공하므로 자동화 플랫폼 선택에 유연성을 가집니다.

아래는 VCF 9.1에 대한 추가 설명입니다.

VCF Fleet을 사용하면 단일 API 엔드포인트만으로 전체 VMware 인프라를 손쉽게 관리할 수 있기 때문에 여러 vCenter, ESX 호스트 등에 걸쳐 다수의 호출을 할 필요가 없습니다.

또한, 통합된 정책과 가드레일이 모두 VCF API 세트에 의해 적용·접근됩니다.

우리는 모든 VCF 구성 요소에 대한 API 레퍼런스 문서를 제공하고 있습니다(여기). 모든 VCF 구성 요소에 대한 로컬 Swagger 문서는 이곳에서 확인할 수 있습니다.

VCF에서 뭔가 해볼까요?

여기서 사용할 예시는 Terraform을 통해 VCF SDDC Manager(여기)에 API 호출을 하는 것입니다. VCF 도메인에 대한 정보를 조회하고, 메모리 용량이 15% 미만이면 호스트를 추가(가능한 경우)하고, 그렇지 않으면 아무 작업도 하지 않는 시나리오를 테스트해 보겠습니다.

실제로 Terraform은 런타임 복구에 최적은 아니지만, 널리 사용되는 도구이기 때문에 예시로 선택했습니다. 여기서 핵심은 클라우드 네이티브 도구인 Terraform도 충분히 활용 가능하다는 점을 보여주는 것입니다.

Ansible, Bash, Python, PowerCLI 등으로도 동일한 작업을 수행할 수 있을까요?

당연히 가능합니다!

아래 예시는 테스트용 코드만 포함하고 있습니다. 실제 행동은 여러분이 결정하면 되며, 이 예시가 보여주는 핵심 교훈은 SDDC Manager API를 이용한 자동화 도구 활용 방법이라는 점입니다.

전체 코드는 이 레포지토리에서 확인할 수 있습니다. 해당 레포지토리의 파일들을 참고하되, 필요에 따라 확장하거나 직접 수정해도 좋습니다. README 파일에 Terraform 코드를 실행하는 데 필요한 모든 정보가 들어 있습니다.

Part 1: Bash로 출력 포맷팅하기

첫 번째 단계는 terraform apply 명령 실행 시 함께 동작하는 셸 스크립트입니다. 이 스크립트는 필수는 아니지만, HCL(Hashicorp Configuration Language) 포맷 대신 출력 결과를 깔끔하게 정리하는 간단한 방법을 제공합니다. 해당 파일은 examples/read-only-api-gate/scripts/sddc_probe.sh 에 위치합니다.

Part 2: main.tf 파일

main.tf 파일에서는 올바른 정보를 조회하도록 설정합니다. 대부분의 파라미터는 SDDC Manager API 연결 및 관리 도메인의 메모리 사용량을 조회하기 위한 것입니다.

또한, 표준 Terraform 디렉터리 구조에 맞춰 tfvars 파일과 variables 파일도 포함되어 있습니다. 필요에 맞게 수정해 사용하면 됩니다.

Part 3: Terraform Apply 실행

전체 Terraform 실행 결과는 다음과 같습니다.

terraform init                                                                                                                                                       ─╯

Initializing the backend...

Initializing provider plugins...

- Reusing previous version of hashicorp/external from the dependency lock file

- Using previously-installed hashicorp/external v2.3.5

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see

any changes that are required for your infrastructure. All Terraform commands

should now work.

If you ever set or change modules or backend configuration for Terraform,

rerun this command to reinitialize your working directory. If you forget, other

commands will detect it and remind you to do so if necessary.

그 다음 plan 단계입니다.

terraform plan                                                                                                                                                       ─╯

data.external.sddc_probe: Reading...

data.external.sddc_probe: Read complete after 2s [id=-]

Changes to Outputs:

  ~ domain_capacity    = [

      ~ {

          ~ current_capacity = {

              ~ cpu     = {

                  ~ used          = {

                      ~ value = 43.657998765267436 -> 34.97899901072632

                        # (1 unchanged attribute hidden)

                    }

                    # (2 unchanged attributes hidden)

                }

              ~ memory  = {

                  ~ used  = {

                      ~ value = 281.517578125 -> 281.328125

                        # (1 unchanged attribute hidden)

                    }

                    # (1 unchanged attribute hidden)

                }

              ~ storage = {

                  ~ used  = {

                      ~ value = 1.34421987600399 -> 1.3442330625457544

                        # (1 unchanged attribute hidden)

                    }

                    # (1 unchanged attribute hidden)

                }

            }

            id               = "9faa050c-216e-4b54-8e1f-177f1b5e0cac"

            name             = "vcf-m01"

        },

    ]

You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.

위와 같이 플랜을 적용하면 실제 인프라를 변경하지 않고도 새로운 출력 값을 Terraform 상태에 저장할 수 있습니다.

마지막으로 apply 단계입니다.

 ~ domain_capacity    = [

      ~ {

       
0 조회
Back to Blog

관련 글

더 보기 »