IaC

Terraform - Azure(1)

Operation CWAL 2022. 3. 11. 23:18

AWS와 마찬가지로 Azure 역시 Terraform을 통해 다양한 리소스를 생성할 수 있고, 원하는 인프라를 구성할 수 있다.

 

환경 설정

1. Terraform 설치

Terraform을 설치하는 방법에 대해선 링크를 참고한다.

 

2. Azure CLI 설치

Linux에서 아래 명령어로 Azure CLI를 설치할 수 있다.

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

제대로 설치되었는지 다음 명령어를 수행한다.

az version

3. Azure Login

CLI를 통해 Azure에 로그인하기 위해 다음 명령어를 수행한다.

az login

이후 브라우저를 통해 팝업되는 Login 메뉴에서 로그인을 진행한다.

로그인이 완료되면, CLI에서 현재 Subscription 정보가 출력된다. 만약 다른 Subscription에 리소스를 생성한다면 아래 명령어로 Subscription을 변경한다.

az account set --subscription "<subscription_id_or_subscription_name>"

콘솔에 출력되는 정보 중 Subscription의 ID를 기억해두자.

 

4. Terraform용 Service Principal 생성

Terraform과 같이 Azure에 직접 접근해야 하는 툴은 일반적인 사용자(User)가 아닌 별도의 Identity로 구분되어야 한다. Azure는 이런 유형의 애플리케이션을 위해 Service Principal(이하 SP)이라는 유형의 Identity를 제공하고 있다. 아래 명령어로 Terraform용 SP를 생성한다.

az ad sp create-for-rbac --name "terraform" --role Contributor

5. SP Credential 환경변수 지정

Terraform의 Azure Provider 'azurerm'이 SP의 Credential 값을 자동으로 가져올 수 있도록 환경변수를 추가할 필요가 있다. '~/.bashrc' 파일에 아래 내용을 추가한다.

export ARM_SUBSCRIPTION_ID="<azure_subscription_id>"
export ARM_TENANT_ID="<azure_subscription_tenant_id>"
export ARM_CLIENT_ID="<service_principal_appid>"
export ARM_CLIENT_SECRET="<service_principal_password>"

변경된 .bashrc 파일을 적용하기 위해 아래 명령어를 실행한다.

source ~/.bashrc

환경변수가 제대로 추가되었는지 확인해보자.

printenv | grep ^ARM*

실제 환경에서는 특정 파일에 Credential을 절대 저장해선 안된다. 별도의 Secret으로 보관해놓고 필요할 때마다 가져오는 방식을 사용해야 한다.

 

 

6. 기존 사용자 계정 Logout

SP를 통해서 Terraform을 사용하기 때문에, 기존 사용자 계정은 로그아웃 한다.

az logout

 

테스트

환경설정이 제대로 되었는지 확인해보자. 우선 demo-rg라는 디렉토리를 만든다.

mkdir demo-rg && cd demo-rg

아래와 같이 main.tf 파일을 작성한다.

terraform {

  required_version = ">=0.12"

  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>2.0"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "random_pet" "rg-name" {
  prefix    = var.resource_group_name_prefix
}
resource "azurerm_resource_group" "rg" {
  name      = random_pet.rg-name.id
  location  = var.resource_group_location
}

variables.tf 파일은 다음과 같다.

variable "resource_group_name_prefix" {
  default       = "rg"
  description   = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
}

variable "resource_group_location" {
  default = "koreacentral"
  description   = "Location of the resource group."
}

 

모든 준비를 마쳤으니 terraform을 실행할 차례다.

terraform init

terraform plan

terraform apply -auto-approve

실제로 Resource Group이 생성되었는지 Azure Portal을 확인해보자.

Terraform을 통해 Azure에 Resource Group 'rg-apparent-eel'이 추가되었다. 이제 모든 확인이 끝났으니 다음 명령어로 리소스를 제거한다.

terraform destroy -auto-approve

참고

Terraform on Azure documentation

 

 

 

'IaC' 카테고리의 다른 글

Terraform - Azure(3)  (0) 2022.03.14
Terraform - Azure(2)  (0) 2022.03.13
Terraform - (7) Advanced  (1) 2021.06.19
Terraform - (6) IAM  (0) 2021.06.18
Terraform - (5) Modules  (0) 2021.06.10