ARM 템플릿을 사용한 Azure Storage 배포
Source: Dev.to
소개
Azure Resource Manager (ARM)는 Azure에서 리소스를 조직하는 방법을 제공합니다. ARM을 사용하면 리소스 그룹이라는 단일 논리 단위로 Azure 리소스를 정의하고 배포할 수 있으며, 여기에는 가상 머신, 스토리지 계정, 네트워크 인터페이스 등이 포함될 수 있습니다.
ARM 템플릿은 인프라를 코드(IaC)로 정의하는 JSON 파일입니다. 이 가이드에서는 다음을 사용하여 Azure Storage Account를 배포하는 방법을 보여줍니다.
- ARM 템플릿
- PowerShell 배포 스크립트
- Azure DevOps 파이프라인
사전 요구 사항
- Azure 구독
- 구독에 대한 서비스 연결이 설정된 Azure DevOps 프로젝트
저장소 구조
├── deploy.ps1 # PowerShell 스크립트 (RG 생성 + 템플릿 배포)
├── azure-pipelines.yml # CI/CD 파이프라인 정의
└── storageaccount.json # ARM 템플릿 정의
PowerShell 배포 스크립트 (deploy.ps1)
param(
[string]$ResourceGroupName,
[string]$StorageAccountName,
[string]$Location,
[string]$Sku = "Standard_LRS"
)
$scriptDir = $PSScriptRoot
$template = Join-Path $scriptDir "storageaccount.json"
Write-Host "Checking if resource group '$ResourceGroupName' already exists..."
Start-Sleep -Seconds 2
$exists = (az group exists --name $ResourceGroupName) -eq 'true'
if (-not $exists) {
Write-Host "Resource group '$ResourceGroupName' does not exist. Creating..."
az group create --name $ResourceGroupName --location $Location | Out-Null
if ($LASTEXITCODE -ne 0) { throw "Failed to create resource group." }
} else {
Write-Host "Resource group '$ResourceGroupName' already exists."
}
Write-Host "Deploying Azure ARM template.."
az deployment group create `
--resource-group $ResourceGroupName `
--template-file $template `
--parameters "storageAccountName=$StorageAccountName" "sku=$Sku" "location=$Location"
if ($LASTEXITCODE -ne 0) {
Write-Error "ARM deployment failed."
return $false
}
Write-Host "Deployment successful by Alvaro! 🚀"
Azure Pipelines 정의 (azure-pipelines.yml)
trigger:
branches:
include:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
resourceGroupName: 'Asgard'
storageAccountName: 'storageaccountasgard'
location: 'West Europe'
sku: 'Standard_LRS'
steps:
- task: AzureCLI@2
displayName: 'Deploy Storage Account ARM Template'
inputs:
azureSubscription: 'Marty-MacFly' # Service Connection name in Azure DevOps
ScriptType: pscore
ScriptPath: '$(System.DefaultWorkingDirectory)/deploy.ps1'
ScriptArguments: >-
-ResourceGroupName "$(resourceGroupName)"
-StorageAccountName "$(storageAccountName)"
-Location "$(location)"
-Sku "$(sku)"
파이프라인 실행
- 파일들을 Azure DevOps 저장소의
main브랜치에 커밋합니다. - 파이프라인이 자동으로 트리거되며(또는 수동으로 실행)
- PowerShell 스크립트가 리소스 그룹이 없을 경우 생성하고
storageaccount.jsonARM 템플릿을 배포합니다.
검증
파이프라인이 완료된 후 Azure 포털로 이동하여 새 Storage Account(storageaccountasgard)가 West Europe 지역에 정상적으로 생성되었는지 확인합니다.