Azure CLI를 효과적으로 사용하는 방법
Azure CLI를 사용하면 Bash, PowerShell 또는 명령 프롬프트 창에서 Azure를 구성하고 관리할 수 있습니다. Azure CLI는 임시 기반 및 스크립트를 통해 명령 재사용을 지원합니다. 실행하는 셸의 기능을 알고 있어야 합니다.
이 문서에서는 Azure CLI 사용 방법 및 문제를 방지하는 방법에 대한 유용한 팁을 설명합니다.
사전 요구 사항
Bash 환경을 통해 Azure Cloud Shell을 사용합니다.
원하는 경우 Azure CLI를 설치하여 CLI 참조 명령을 실행합니다.
- local install을 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 추가 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
- 메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
- az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
Azure CLI 명령에 대한 질문이 있는 경우 Azure CLI 참조에서 검색하세요.
출력 서식
많은 Azure CLI 명령은 콘솔에 데이터를 표시합니다. 이 정보는 다음 예에서와 같이 명령의 목표가 될 수 있습니다. 여기서 az account show 명령은 현재 구독을 표시합니다.
az account show
때로는 명령이 표시하는 정보는 사용자가 변경한 내용을 반영합니다. 이 예에서는 az group create 명령을 사용하여 리소스 그룹을 만듭니다.
az group create --name MyResourceGroup --location eastus
이 명령을 실행하면 방금 만든 리소스 그룹이 Azure CLI 콘솔에 표시됩니다.
--output 매개 변수를 지정하여 출력 형식을 선택할 수 있습니다. 이 예에서는 az account list 명령을 사용하여 테이블로 액세스할 수 있는 모든 구독을 나열합니다.
az account list --output table
다음은 세 가지 일반적인 형식입니다.
json형식은 정보를 JSON 문자열로 표시합니다. 이 형식은 가장 포괄적인 정보를 제공합니다. 이 형식이 기본값입니다. az config 명령을 사용하여 기본 형식을 변경할 수 있습니다.table형식은 출력을 사람이 읽을 수 있는 테이블로 표시합니다. 테이블에 표시할 값을 지정하고 쿼리를 사용하여 출력을 사용자 지정할 수 있습니다.tsv형식은 추가 서식 지정, 키 또는 다른 기호 없이 탭으로 분리되고 줄 바꿈으로 구분된 값을 반환합니다.
이러한 형식 및 기타 형식에 대한 자세한 내용은 Azure CLI 명령의 출력 형식을 참조하세요.
다른 명령에 값 전달
Azure CLI 명령은 셸에서 실행됩니다. 이 문서에서는 Bash를 사용하지만 다른 옵션도 있습니다. 표준 셸 구문을 사용하여 Azure CLI 사용을 단순화할 수 있습니다.
값을 변수로 저장할 수 있습니다. 변수를 사용하면 값을 여러 번 사용하거나 보다 일반적인 스크립트를 만들 수 있습니다. 이 예에서는 az vm list 명령으로 찾은 ID를 변수에 할당합니다.
running_vm_ids=$(az vm list --resource-group MyResourceGroup --show-details \
--query "[?powerState=='VM running'].id" --output tsv)
팁
tsv 출력 형식을 사용해야 합니다. 다른 출력 형식에는 인용 부호와 같은 원치 않는 기호가 포함될 수 있습니다.
이후 명령에서 값을 사용합니다. 변수를 에코하여 값을 확인할 수 있습니다.
echo $running_vm_ids
한 명령에서 다른 명령으로 값을 파이프할 수도 있습니다. 이 예에서는 표준 Bash 구문을 사용하여 값을 검색합니다.
az vm list --query "[?powerState=='VM running'].name" --output tsv | grep my_vm
인수 전달
인수에 따옴표 사용
Azure CLI 명령으로 작업할 때 셸에서 따옴표를 사용하고 문자를 이스케이프하는 방식을 알고 있어야 합니다. 다른 셸에서 사용되는 스크립트를 지원하는 경우 차이점을 이해해야 합니다.
- Bash. 따옴표 넣기
- PowerShell을 사용하여 키 백업 파일 복원 따옴표 넣기 규칙 정보
- Windows 명령 프롬프트. 방법: Windows 명령줄의 이스케이프 문자, 구분 기호 및 따옴표
참고
알려진 PowerShell 문제로 인해 몇 가지 추가 이스케이프 규칙이 적용됩니다. 자세한 내용은 PowerShell의 따옴표 넣기 문제를 참조하세요.
공백이 포함된 인수를 제공하는 경우 따옴표로 묶습니다. 다음 팁을 염두에 두세요.
Bash 또는 PowerShell에서는 작은따옴표와 큰따옴표를 모두 해석합니다. Windows 명령 프롬프트에서는 큰따옴표만 해석합니다. 작은따옴표는 값의 일부로 해석됩니다.
Bash 전용 명령의 경우 작은따옴표를 사용하여 인라인 JSON을 단순화합니다. 예를 들어 이 JSON은 Bash에서 올바릅니다(
'{"key": "value"}'). Windows 명령 프롬프트에서 해당하는 것은"{\"key\": \"value\"}"입니다.일부 Azure CLI 명령은 공백으로 구분된 값의 목록을 가져옵니다. 키 이름 또는 값에 공백이 있으면 전체 쌍을 래핑합니다(
"my key=my value").Bash는 내보낸 변수의 큰따옴표를 평가합니다. 이 동작이 원하는 것이 아니면 변수를 이스케이프합니다(
"\$variable").@와 같은 PowerShell의 특수 문자가 있습니다. PowerShell에서 Azure CLI를 실행하려면 특수 문자 앞에`를 추가하여 이스케이프합니다. 대신 값을 작은따옴표 또는 큰따옴표"/"로 묶을 수 있습니다.`@parameters.json '@parameters.json'명령과 함께
--query매개 변수를 사용하는 경우 JMESPath의 일부 문자는 셸에서 이스케이프해야 합니다.다음 3개의 명령은 Bash에서도 동일합니다.
az version --query '"azure-cli"' az version --query \"azure-cli\" az version --query "\"azure-cli\""다음 2개의 명령은 Windows 명령 프롬프트에서도 동일합니다.
az version --query "\"azure-cli\"" az version --query \"azure-cli\"다음 5개의 명령은 PowerShell에서도 동일합니다.
az version --query '\"azure-cli\"' az version --query "\`"azure-cli\`"" az version --query "\""azure-cli\""" az --% version --query "\"azure-cli\"" az --% version --query \"azure-cli\"
인수에 하이픈 문자 사용
인수 값이 하이픈으로 시작하는 경우 Azure CLI는 인수 이름으로 구문 분석을 시도합니다. 값으로 구문 분석하려면 =을 사용하여 인수 이름과 값(--password="-VerySecret")을 연결합니다.
비동기 작업
Azure에서 작업을 수행하려면 상당한 시간이 걸릴 수 있습니다. 예를 들어, 전 세계 어딘가에 있는 데이터 센터에서 가상 머신을 구성하는 것은 즉시 이루어지지 않습니다. Azure CLI는 한 명령이 완료되어야 다른 명령을 수락합니다.
많은 명령이 다른 명령을 실행할 수 있는 --no-wait 매개 변수를 제공합니다. 다음 예제는 리소스 그룹을 제거합니다.
az group delete --name MyResourceGroup --no-wait
리소스 그룹을 삭제하면 해당 그룹에 속하는 모든 리소스도 제거됩니다. 이러한 리소스를 제거하는 데 시간이 오래 걸릴 수 있습니다. --no-wait 매개 변수를 사용하여 명령을 실행하면 콘솔에서 제거를 중단하지 않고 새 명령을 수락할 수 있습니다.
많은 명령이 대기 옵션을 제공하여 일부 조건이 충족될 때까지 콘솔을 일시 중지합니다. 다음 예제는 az vm wait 명령을 사용하여 독립 리소스를 병렬로 생성할 수 있도록 지원합니다.
az vm create --resource-group VMResources --name virtual-machine-01 --image centos --no-wait
az vm create --resource-group VMResources --name virtual-machine-02 --image centos --no-wait
subscription=$(az account show --query "id" -o tsv)
vm1_id="/subscriptions/$subscription/resourceGroups/VMResources/providers/Microsoft.Compute/virtualMachines/virtual-machine-01"
vm2_id="/subscriptions/$subscription/resourceGroups/VMResources/providers/Microsoft.Compute/virtualMachines/virtual-machine-02"
az vm wait --created --ids $vm1_id $vm2_id
두 ID를 모두 만든 후 콘솔을 다시 사용할 수 있습니다.
프록시 내부 작업
프록시 서버를 통해 Azure CLI를 사용하는 경우 SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",) 오류가 발생할 수 있습니다. 이 오류를 해결하려면 환경 변수 REQUESTS_CA_BUNDLE을 PEM 형식의 인증 기관 번들 인증서 파일 경로로 설정합니다.
| OS | 기본 인증 기관 번들 |
|---|---|
| Windows | C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem |
| Ubuntu/Debian Linux | /opt/az/lib/python3.6/site-packages/certifi/cacert.pem |
| CentOS/RHEL/SUSE Linux | /usr/lib64/az/lib/python3.6/site-packages/certifi/cacert.pem |
프록시 서버의 인증서를 이 파일에 추가하거나 내용을 다른 인증서 파일에 복사한 다음, 여기에 REQUESTS_CA_BUNDLE을 설정합니다. HTTP_PROXY 또는 HTTPS_PROXY 환경 변수를 설정해야 할 수도 있습니다.
일부 프록시에는 인증이 필요합니다. HTTP_PROXY 또는 HTTPS_PROXY 환경 변수의 형식은 HTTPS_PROXY="https://username:password@proxy-server:port"와 같은 인증을 포함해야 합니다. 자세한 내용은 Azure 라이브러리에 대한 프록시를 구성하는 방법을 참조하세요.
동시 빌드
여러 작업을 병렬로 실행할 수 있는 빌드 컴퓨터에서 Azure CLI를 실행하는 경우, 동일한 OS 사용자로 실행되는 두 빌드 작업 간에 액세스 토큰이 공유될 수 있습니다. 혼동을 방지하려면 AZURE_CONFIG_DIR을 액세스 토큰이 저장된 디렉터리로 설정합니다.
일반 업데이트 인수
Azure CLI 명령 그룹은 update 명령을 종종 사용합니다. 예를 들어, Azure Virtual Machines에는 az vm update 명령이 포함됩니다. 대부분의 update 명령은 --add, --set 및 --remove의 세 가지 일반 매개 변수를 제공합니다.
--set 및 --add 매개 변수는 공백으로 구분된 키-값 쌍 목록(key1=value1 key2=value2)을 사용합니다. 업데이트할 수 있는 속성을 확인하려면 az vm show와 같은 show 명령을 사용합니다.
az vm show --resource-group VMResources --name virtual-machine-01
명령을 간소화하려면 JSON 문자열을 사용하는 것이 좋습니다. 예를 들어, 가상 머신에 새 데이터 디스크를 연결하려면 다음 값을 사용합니다.
az vm update --resource-group VMResources --name virtual-machine-01 \
--add storageProfile.dataDisks "{\"createOption\": \"Attach\", \"managedDisk\":
{\"id\":
\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/yg/providers/Microsoft.Compute/disks/yg-disk\"},
\"lun\": 1}"
일반 리소스 명령
작업하려는 서비스에 아직 Azure CLI가 지원되지 않을 수 있습니다. az resource 명령을 사용하여 이러한 리소스로 작업할 수 있습니다.
create 또는 update 명령만 필요한 경우 az deployment group create를 사용합니다. 작업 예제는 Azure 빠른 시작 템플릿을 참조하세요.
REST API 명령
일반 update 인수와 az resource가 요구 사항을 충족하지 않는 경우 az rest 명령을 사용하여 REST API를 호출할 수 있습니다. 그러면 명령은 로그인한 자격 증명을 사용하여 자동으로 인증하고 헤더 Content-Type: application/json을 설정합니다. 자세한 내용은 Azure REST API 참조를 참조하세요.
이 예는 Microsoft Graph API에서 작동합니다. 애플리케이션에 대한 리디렉션 URI를 업데이트하기 위해 다음 코드와 같이 애플리케이션 업데이트 REST API를 호출합니다.
# Get the application
az rest --method GET \
--uri 'https://graph.microsoft.com/v1.0/applications/b4e4d2ab-e2cb-45d5-a31a-98eb3f364001'
# Update `redirectUris` for `web` property
az rest --method PATCH \
--uri 'https://graph.microsoft.com/v1.0/applications/b4e4d2ab-e2cb-45d5-a31a-98eb3f364001' \
--body '{"web":{"redirectUris":["https://myapp.com"]}}'
스크립트
이 Windows 일괄 처리 스크립트를 사용하여 ID를 변수에 저장합니다.
ECHO OFF
SETLOCAL
FOR /F "tokens=* USEBACKQ" %%F IN (
`az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv`
) DO (
SET "vm_ids=%%F %vm_ids%" :: construct the id list
)
az vm stop --ids %vm_ids% :: CLI stops all VMs in parallel
이 Windows PowerShell 스크립트를 사용하여 ID를 변수에 저장합니다.
$vm_ids=(az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv)
az vm stop --ids $vm_ids # CLI stops all VMs in parallel
이 Windows 일괄 처리 스크립트를 사용하여 목록을 반복합니다.
ECHO OFF
SETLOCAL
FOR /F "tokens=* USEBACKQ" %%F IN (
`az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv`
) DO (
ECHO Stopping %%F
az vm stop --ids %%F
)
이 Windows PowerShell 스크립트를 사용하여 목록을 반복합니다.
$vm_ids=(az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv)
foreach ($vm_id in $vm_ids) {
Write-Output "Stopping $vm_id"
az vm stop --ids $vm_id
}
다음은 Azure CLI 환경 변수입니다.
| 환경 변수 | 설명 |
|---|---|
| AZURE_CONFIG_DIR | 구성 파일, 로그 및 원격 분석에 대한 전체 디렉터리입니다. 지정하지 않은 경우 이 값은 ~/.azure.로 기본 설정됩니다. |
| AZURE_EXTENSION_DIR | 확장 설치를 포함하는 디렉터리입니다. 지정되지 않은 경우 이 값은 전체 구성 디렉터리 내의 cliextensions 하위 디렉터리로 기본 설정됩니다. |
PowerShell에서 Azure CLI에 대한 오류 처리
적합한 Azure 명령줄 도구 선택에서 설명한 대로 PowerShell에서 Azure CLI 명령을 실행할 수 있습니다. 이 경우 PowerShell에서 Azure CLI 오류 처리를 이해해야 합니다. 특히 Azure CLI는 catch할 PowerShell에 대한 예외를 만들지 않습니다.
대안은 $? 자동 변수를 사용하는 것입니다. 이 변수에는 가장 최근 명령의 상태가 포함됩니다. 이전 명령이 실패하면 $?는 $False의 값을 갖습니다. 자세한 내용은 about_Automatic_Variables를 참조하세요.
다음 예제에서는 이 자동 변수가 오류 처리에 어떻게 작동할 수 있는지 보여 줍니다.
az group create --name MyResourceGroup
if ($? -eq $false) {
Write-Error "Error creating resource group."
}
필수 --location 매개 변수가 없으므로 az 명령이 실패합니다. 조건문은 $?가 false임을 찾아 오류를 씁니다.
try 및 catch 키워드를 사용하려는 경우 throw를 사용하여 catch할 try 블록에 대한 예외를 만들 수 있습니다.
$ErrorActionPreference = "Stop"
try {
az group create --name MyResourceGroup
if ($? -eq $false) {
throw 'Group create failed.'
}
}
catch {
Write-Error "Error creating the resource group."
}
$ErrorActionPreference = "Continue"
기본적으로 PowerShell은 종료 오류만을 포착합니다. 이 예제에서는 PowerShell에서 오류를 처리할 수 있도록 $ErrorActionPreference 전역 변수를 Stop으로 설정합니다.
조건문은 $? 변수를 테스트하여 이전 명령이 실패했는지 확인합니다. 이 경우 throw 키워드는 catch할 예외를 만듭니다. catch 블록을 사용하여 오류 메시지를 작성하거나 오류를 처리할 수 있습니다.
예제는 $ErrorActionPreference를 기본값으로 복원합니다.
PowerShell 오류 처리에 대한 자세한 내용은 예외에 대해 알고 싶은 모든 것을 참조하세요.
