빠른 시작: Terraform을 사용하여 Azure 컨테이너 레지스트리 만들기
이 빠른 시작에서는 Terraform을 사용하여 Azure 컨테이너 레지스트리 및 리소스 그룹을 만듭니다. Azure Container Registry는 프라이빗 Docker 컨테이너 이미지를 저장하는 데 사용되는 관리되는 Docker 레지스트리 서비스입니다. 일반적으로 AKS(Azure Kubernetes Service), Azure 앱 Service 및 기타 Azure 서비스와 함께 컨테이너 이미지를 끌어오는 데 사용됩니다. 레지스트리는 Azure에 배포된 리소스에 대한 논리적 컨테이너인 리소스 그룹 내에 저장됩니다. 이러한 리소스는 접두사를 임의 문자열과 결합하여 Azure 구독 내에서 고유하게 만들어집니다.
Terraform은 클라우드 인프라의 정의, 프리뷰 및 배포를 사용합니다. Terraform을 사용하는 경우 HCL 구문를 사용하여 구성 파일을 만듭니다. HCL 구문을 사용하면 클라우드 공급자(예: Azure) 그리고 클라우드 인프라를 구성하는 요소를 지정할 수 있습니다. 구성 파일을 만든 후 배포되기 전에 인프라 변경을 미리 볼 수 있는 실행 계획를 만듭니다. 변경 내용을 확인 한 후에는 실행 계획을 적용하여 인프라를 배포합니다.
- Terraform의 필수 버전과 필요한 공급자를 지정합니다.
- 추가 기능 없이 Azure 공급자를 정의합니다.
- 리소스 그룹의 위치에 대한 변수를 정의하고 기본값이 "eastus"인 변수를 정의합니다.
- 리소스 그룹 이름의 접두사 및 기본값 "rg"로 변수를 정의합니다.
- 리소스 그룹에 대한 임의의 애완 동물 이름을 생성합니다.
- 지정된 위치에 생성된 이름을 사용하여 Azure 리소스 그룹을 만듭니다.
- 컨테이너 레지스트리 이름의 일부로 사용할 5개의 소문자로 구성된 임의의 문자열을 생성합니다.
- 생성된 문자열을 해당 이름의 일부로, 위와 동일한 위치 및 리소스 그룹에 사용하여 컨테이너 레지스트리를 만듭니다.
- 만든 리소스 그룹 및 컨테이너 레지스트리의 이름을 출력합니다.
- 만든 컨테이너 레지스트리의 로그인 서버를 출력합니다.
활성 구독이 있는 Azure 계정을 만듭니다. 무료로 계정을 만들 수 있습니다.
Terraform을 설치 및 구성합니다.
참고
이 문서의 샘플 코드는 Azure Terraform GitHub 리포지토리에 있습니다. Terraform의 현재 및 이전 버전의 테스트 결과가 포함된 로그 파일을 볼 수 있습니다.
샘플 Terraform 코드를 테스트하고 실행할 디렉터리를 만들고 현재 디렉터리로 만듭니다.
이름이 지정된
main.tf
파일을 만들고 다음 코드를 삽입합니다.resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } resource "random_string" "acr_name" { length = 5 lower = true numeric = false special = false upper = false } resource "azurerm_container_registry" "example" { name = "${random_string.acr_name.result}registry" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location sku = "Standard" }
이름이 지정된
outputs.tf
파일을 만들고 다음 코드를 삽입합니다.output "resource_group_name" { value = azurerm_resource_group.rg.name } output "container_registry_name" { value = azurerm_container_registry.example.name } output "container_registry_login_server" { value = azurerm_container_registry.example.login_server }
이름이 지정된
providers.tf
파일을 만들고 다음 코드를 삽입합니다.terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
이름이 지정된
variables.tf
파일을 만들고 다음 코드를 삽입합니다.variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." }
terraform init를 실행하여 Terraform 배포를 초기화합니다. 이 명령은 Azure 리소스를 관리하는 데 필요한 Azure 공급자를 다운로드합니다.
terraform init -upgrade
주요 정보:
-upgrade
매개 변수는 필요한 공급자 플러그 인을 구성의 버전 제약 조건을 준수하는 최신 버전으로 업그레이드합니다.
terraform plan을 실행하여 실행 계획을 만듭니다.
terraform plan -out main.tfplan
주요 정보:
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다.- 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
terraform apply를 실행하여 실행 계획을 클라우드 인프라에 적용합니다.
terraform apply main.tfplan
주요 정보:
- 예시
terraform apply
명령은 이전에terraform plan -out main.tfplan
를 실행했다고 가정합니다. -out
매개 변수에 다른 파일 이름을 지정한 경우terraform apply
에 대한 호출에서 동일한 파일 이름을 사용합니다.-out
매개 변수를 사용하지 않은 경우 매개 변수 없이terraform apply
를 호출합니다.
az acr show를 실행하여 컨테이너 레지스트리를 봅니다.
az acr show --name <registry_name> --resource-group <resource_group_name>
컨테이너 레지스트리 <resource_group_name>
의 이름과 리소스 그룹의 이름으로 바꿉 <registry_name>
니다.
Terraform을 통해 리소스를 만들 필요가 더 이상 없으면 다음 단계를 수행합니다.
terraform 플랜을 실행하고
destroy
플래그를 지정합니다.terraform plan -destroy -out main.destroy.tfplan
주요 정보:
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다.- 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
terraform apply를 실행하여 실행 계획을 적용합니다.
terraform apply main.destroy.tfplan