본문 바로가기
INFRA/Operation

Azure Terraform 설치

by BTC_Dana 2022. 5. 16.

 

안녕하세요!
하씨가문의 영광팀입니다!
지난 주제로 Linux를 기반으로 Terraform과 Ansible를 설치해보았는데요!
오늘은 클라우드에서도 Azure를 기반으로 Terraform과 Ansible를 통해 리소스를 만들어보겠습니다~!

Terraform

  1. 설치 및 환경 구성
  2. 간단한 용어 설명 및 구성
  3. 리소스 구성 및 구축
  4. Trouble Shooting

Terraform 설치 및 환경 구성
  • 우선 환경 구성에 앞서서 Terraform을 사용할 수 있게 Terraform 공식 홈페이지에 들어가서 Terraform 버전을 다운로드합니다.
  • 그리고 다음과 같이 자신의 버전에 맞게 설치를 진행합니다.

  • 설치가 완료되었다면, 사진과 같이 C드라이브에 압축해제를 하고 윈도우즈 키와 R키를 누르고 "sysdm.cpl ,3" 을 입력하여 실행합니다.

  • 환경 변수를 선택하고 시스템 변수에서 Path를 더블클릭합니다.
  • 그리고 다음과 같이 Terraform 디렉토리 위치를 입력하고 확인하고 나옵니다.

  • Terraform 환경변수가 제대로 입력되었는지 확인하기 위해 PowerShell에서 terraform version을 통해 확인합니다.
  • 버전이 나올경우 성공! ><
PS C:\Users\jinwoo> terraform version
Terraform v1.1.8
on windows_amd64

Your version of Terraform is out of date! The latest version
is 1.1.9. You can update by downloading from https://www.terraform.io/downloads.html

 

Terraform 간단한 용어 설명 및 구성

이전에 Terraform 용어에 대해서 간단하게 설명한 적이 있습니다.

  • 실습에서는 Plan, Apply, validate, destroy를 사용합니다.
  • 모르는 용어가 나오면 표를 통해 확인합시다!

Terraform 리소스 구성 및 구축

자! 이제 VScode에서 terraform code를 작성해봅시다!

  • 작업을 하는 곳에 디렉토리를 만들고,
  • VScode로 들어가서 워크스페이스를 추가합니다.

  • 디렉토리를 추가하면 다음과 같이 나타납니다.

  • 그리고 그림과 같이 파일을 추가합니다.

  • 파일이름은 main.tf라고 지어보겠습니다.

  • 코드를 작성하기위해서 Terraform 공식 사이트로 들어가서 하시코프 테라폼 공급자를 main.tf에 입력합니다.
# Azure Provider source and version being used
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=3.0.0"
    }
  }
}

# Configure the Microsoft Azure Provider
provider "azurerm" {
  features {}
}

여기서 잠깐! 
코드를 입력했을 때 인식을 못 할 경우, VScode의 확장에서 hashicorp terraform을 설치합니다!

  • 그러면 다음과 같이 이쁘게 생성됩니다!

  • 이제 디렉토리로 이동했다면 terraform init을 통해 초기화해줍니다.
\azure_terraform> terraform init
  • 그럼 다음과 같이 Terraform을 시작할 수 있는 것을 확인할 수 있습니다.
Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/azurerm versions matching "3.0.0"...
- Installing hashicorp/azurerm v3.0.0...
- Installed hashicorp/azurerm v3.0.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

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.
  • Init이 끝났으면 유효성을 검증을 한후 성공되면 성공입니다!
\azure_terraform> terraform validate
Success! The configuration is valid.
  • 유효성 검증까지 마치면 VScode에서 다음과 같이 테라폼 프로그램과 init 파일이 생성되는 것을 확인할 수 있습니다.

이제 리소스 그룹을 생성해봅시다!

  • 생성에 앞서서 plan을 통해 어떤 리소스를 배포할 계획인지 알아봅니다.
  • 리소스 그룹 코드는 다음과 같이 실행합니다.
\azure_terraform> terraform plan

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
  + create

Terraform will perform the following actions:

  # azurerm_resource_group.azure_rg will be created
  + resource "azurerm_resource_group" "azure_rg" {
      + id       = (known after apply)
      + location = "koreacentral"
      + name     = "test_rg"
    }

Plan: 1 to add, 0 to change, 0 to destroy.

여기서 잠깐!
plan을 실행했을 때 azure 구독이 없다는 오류가 발생할 경우!

  • 설치가 완료되면 PowerShell에 접속하여 Azure에 로그인합니다.
az login
  • 명령을 입력하면 다음과 같이 화면이 뜹니다.

  • 자신의 Azure 계정을 클릭하면 다음과 같이 로그인되었다는 글이 나옵니다.


  • Azure에 로그인이 되었다면 다시 PowerShell에서 terraform plan 실행합니다.
  • 다음과 같이 리소스 그룹을 생성한다는 계획을 보여주는 창이 나온다면 성공입니다.

  • 이제 계획은 했으니 적용해서 리소스 그룹이 생성되었는 지 확인해봅시다!
  • Enter a value가 나타나면 yes눌러 진행합니다.
azure_terraform> terraform apply

  • 성공이되었다면 다음과 같이 Apply complete화면이 출력됩니다.

자! 명령어로만 리소스가 생성되었는 지 확인하면 안되겠죠!

  • 자신의 Azure Portal에 들어가서 리소스 그룹이 생성되었는지 확인해봅시다!
  • Azure Portal에 접속해보니 제대로 생성된 것을 확인할 수 있네요!!


Trouble Shooting

만약에 Terraform plan or apply 를 실행하였을 때 lock에 대한 오류가 발생할 수도 있습니다.

[원인]

  • 이 오류의 원인은 Terraform에서 여러 사용자가 동시에 인프라를 수정하는 것을 방지하기 위해 lock이 걸 수 있습니다.
  • terraform을 수행하다가 사용자 혹은 특정 이유로 lock이 걸린 상태에서 terraform 수행이 실패하게 되면 lock 해제가 안된 채로 끝나 있는 경우가 있습니다.

 

[해결]

  1. terraform plan -lock-false : lock을 무시하고 명령을 계속해서 수행하는 방안으로 Terraform에서 권장하지는 않는 방법입니다.
  2. terraform force-unlock <Lock ID> : lock을 수동으로 풀어주는 방법입니다. 이 방법을 통해 lock을 해제한 후 명령어를 수행하도록 합니다.

 

참조문서
https://sarc.io/index.php/cloud/2127-terraform-lock 
https://www.terraform.io/cli/commands/force-unlock 

마지막으로 리소스를 생성했다면 리소스를 삭제해보겠습니다.

azure_terraform> terraform destroy
  • 리소스를 삭제하게 되면 다음과 같이 깔끔하게 리소스가 삭제되고 있는 화면과 삭제 성공이 되었다는 화면을 볼 수 있습니다.
  • 정확히 삭제되었는 지 확인하려면 Azure Portal에 들어가서 자신이 만들었던 리소스 그룹을 확인하면 됩니다.

 

 

Portal에 들어가서 만드는 것 보다
훨씬 간편하게 자신이 작성했던 리소스들도 확인해보며 재사용성까지 갖춘 Terraform 정말 편하지 않나요!

 

이처럼 리소스 그룹과 다른 리소스들도 terraform 공식 홈페이지를 보면서 직접 작성해 볼 수 있습니다!

추후에 Terraform을 통해서 리소스 그룹이외에 다른 리소스를 자세하게 다뤄보도록 하겠습니다.

감사합니다><

댓글