스크립트에서 사용할 변수 채우기

이 자습서 단계에서는 변수를 사용하는 방법을 알아봅니다.

  • Azure CLI 명령을 실행하고 출력을 변수에 저장합니다.
  • 로컬 JSON 파일을 읽고 변수에 속성 값을 저장합니다.

변수에 대한 몇 가지 일반적인 사용 사례는 다음과 같습니다.

  • 리소스 ID와 같은 기존 Azure 리소스에 대한 정보를 가져옵니다.
  • 암호와 같은 Azure CLI 명령에서 출력을 가져옵니다.
  • 개발, 스테이지 및 프로덕션 ID와 같은 환경 정보에 대한 JSON 개체를 가져옵니다.

그런 다음 Azure CLI에서 변수를 사용하여 대규모로 빌드 및 삭제 작업을 수행할 수 있습니다.

필수 조건

  • 스토리지 계정 수준에서 이상의 권한이 있는 reader 리소스 그룹 및 스토리지 계정에 액세스할 수 있습니다.

JMESPath 쿼리를 사용하여 명령 출력 가져오기

명령의 show 매개 변수를 사용하여 기존 Azure 리소스에 --query 대한 정보를 가져옵니다. JMESPath 쿼리가 실행되고 Azure 리소스의 하나 이상의 속성 값이 반환됩니다.

대/소문자 구분 및 환경별 구문 --query 입니다. 빈 결과가 표시되면 대문자를 검사. Bash, PowerShell 및 Cmd의 Azure CLI 구문 차이점에 대해 학습한 규칙을 적용하여 따옴표 표시 오류를 방지합니다.

매개 변수를 --output 지정하지 않는 한 이러한 예제는 Azure CLI에 대한 환경 준비에서 설정된 기본 출력 구성 json 을 사용합니다.

Azure 리소스의 JSON 사전 속성 가져오기

Bash, PowerShell 및 CmdprimaryEndpoints의 Azure CLI 구문 차이점에 대해 알아보기에서 만든 스토리지 계정을 사용하여 새 스토리지 계정을 가져옵니다.

az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa000000000> \
                        --query primaryEndpoints

콘솔 JSON 사전 출력:

{
  "blob": "https://msdocssa00000000.blob.core.windows.net/",
  "dfs": "https://msdocssa00000000.dfs.core.windows.net/",
  "file": "https://msdocssa00000000.file.core.windows.net/",
  "internetEndpoints": null,
  "microsoftEndpoints": null,
  "queue": "https://msdocssa00000000.queue.core.windows.net/",
  "table": "https://msdocssa00000000.table.core.windows.net/",
  "web": "https://msdocssa00000000.z13.web.core.windows.net/"
}

개별 JSON 개체 가져오기

배열(목록)의 개별 속성을 반환하려면 스토리지 계정 속성의 쉼표로 구분된 목록을 지정합니다.

az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa000000000> \
                        --query "[id, primaryLocation, primaryEndpoints.blob, encryption.services.blob.lastEnabledTime]"

콘솔 JSON 배열 출력:

[
  "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/msdocs-tutorial-rg-00000000/providers/Microsoft.Storage/storageAccounts/   msdocssa000000000",
  "eastus",
  "https://msdocssa000000000.blob.core.windows.net/",
  "yyyy-mm-ddT19:11:56.399484+00:00"
]

속성 이름 바꾸기

중괄호({}) 및 쉼표로 구분된 목록을 사용하여 속성 이름을 바꿉니다. 새 속성 이름에는 공백을 포함할 수 없습니다. 이 예제에서는 출력을 형식으로 table 반환합니다.

az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa000000000> \
                        --query "{saName:name, saKind:kind, saMinTLSVersion:minimumTlsVersion}" \
                        --output table

콘솔 테이블 출력입니다. 각 열의 첫 문자는 다음과 같이 대문자로 표시됩니다.--output table

SaName             SaKind     SaMinTLSversion
-----------------  ---------  -----------------
msdocssa000000000  StorageV2  TLS1_0

쿼리 결과 필터링

따옴표에 대해 배운 내용을 방금 배운 --query내용과 결합합니다. 이러한 예제는 필터를 적용합니다.

Bash에서는 등=호 앞이나 뒤의 공백을 가질 수 없습니다. 변수 값 주위에 따옴표를 사용하도록 선택할 수 있으므로 msdocs-tutorial-rg-00000000"msdocs-tutorial-rg-00000000" 둘 다 정확합니다.

rgName=<msdocs-tutorial-rg-00000000>

# Get a list of all Azure storage accounts that allow blob public access.
# Notice the backticks and escape characters needed for boolean values.
az storage account list --resource-group $rgName \
                        --query "[?allowBlobPublicAccess == \`true\`].name"

# Get a list of Azure storage accounts that were created in the last 30 days. Return the results as a table.
saDate=$(date +%F -d "-30days")
az storage account list --resource-group $rgName \
                        --query "[?creationTime >='$saDate'].{saName:name, createdTimeStamp:creationTime}" \
                        --output table

# Get a list of Azure storage accounts created in this tutorial
az storage account list --resource-group $rgName \
                        --query "[?contains(name, 'msdocs')].{saName:name, saKind:kind, saPrimaryLocation:primaryLocation, createdTimeStamp:creationTime}" \
                        --output table

변수에 출력을 저장하는 새 Azure 리소스 만들기

변수에 명령 출력을 저장하는 학습은 보호해야 하는 비밀을 출력하는 Azure 리소스를 만들 때 유용합니다. 예를 들어 서비스 주체를 만들거나, 자격 증명을 다시 설정하거나, Azure Key Vault 비밀을 가져올 때 명령 출력을 보호해야 합니다.

새 Azure Key Vault 및 비밀 반환 명령 출력을 변수에 만듭니다. Azure Key Vault 이름은 전역적으로 고유해야 하므로 $RANDOM 이 예제에서는 식별자가 사용됩니다. Azure Key Vault 명명 규칙에 대한 자세한 내용은 Azure Key Vault에 대한 일반적인 오류 코드를 참조하세요.

이러한 예제는 교육 자습서이므로 변수 값을 확인하는 데 사용합니다 echo . 프로덕션 수준 환경에서 비밀 및 암호 값에는 사용하지 echo 마세요.

# Set your variables.
let "randomIdentifier=$RANDOM*$RANDOM"
rgName=<msdocs-tutorial-rg-00000000>
kvName=msdocs-kv-$randomIdentifier
location=eastus

# Set your default output to none
az config set core.output=none

# Create a new Azure Key Vault returning the Key Vault ID
myNewKeyVaultID=$(az keyvault create --name $kvName --resource-group $rgName --location $location --query id --output tsv)
echo "My new Azure Kev Vault ID is $myNewKeyVaultID"

# Wait about 1 minute for your Key Vault creation to complete.

# Create a new secret returning the secret ID
kvSecretName=<myKVSecretName>
kvSecretValue=<myKVSecretValue>
myNewSecretID=$(az keyvault secret set --vault-name $kvName --name $kvSecretName --value $kvSecretValue --query id --output tsv)
echo "My new secret ID is $myNewSecretID"

# Reset your default output to json
az config set core.output=json

JSON 파일의 내용을 가져와 변수에 저장

다음 섹션은 온보딩 자습서에 대한 "스트레치 작업"입니다. 그러나 개발, 스테이지 및 프로덕션 환경에서 Azure 리소스를 관리하려면 구성 파일을 읽어야 하는 경우가 많습니다.

Azure CLI 기술을 확장할 준비가 되셨나요? 다음 JSON 또는 선택한 파일 내용이 포함된 JSON 파일을 만듭니다. 텍스트 파일을 로컬 드라이브에 저장합니다. Azure Cloud Shell에서 작업하는 경우 메뉴 모음의 upload/download files 아이콘을 사용하여 클라우드 스토리지 드라이브에 텍스트 파일을 저장합니다.

{
  "environments": {
    "dev": [
      {
        "id": "1",
        "kv-secretName": "dev1SecretName",
        "status": "inactive",
      },
      {
        "id": "2",
        "kv-secretName": "dev2SecretName",
        "status": "active"
      }
    ],
    "stg": {
      "id": "3",
      "kv-secretName": "dev3SecretName"
    },
    "prod": {
      "id": "4",
      "kv-secretName": "dev4SecretName"
    }
  }
}

Azure CLI 명령에서 추가로 사용할 수 있는 변수에 JSON 파일의 내용을 저장합니다. 이 예제에서는 파일 이름으로 변경 msdocs-tutorial.json 합니다. 출력이 echo 로그 파일에 저장되므로 프로덕션 수준 스크립트에 명령을 저장하지 마세요.

이 Bash 스크립트는 Azure Cloud Shell에서 테스트되었으며 사용자 환경에 설치해야 하는 Bash jq에 따라 달라집니다.

# Show the contents of a file in the console
fileName=msdocs-tutorial.json
cat $fileName | jq

# Get a JSON dictionary object
stgKV=$(jq -r '.environments.stg."kv-secretName"' $fileName)
echo $stgKV

# Filter a JSON array
devKV=$(jq -r '.environments.dev[] | select(.status=="active") | ."kv-secretName"' $fileName)
echo $devKV

"jq 명령을 찾을 수 없음" 오류가 발생했나요? 이 스크립트는 Bash jq 명령에 따라 달라지기 때문입니다. 사용자 환경에 jq 를 설치하거나 Azure Cloud Shell에서 이 스크립트를 실행합니다.

이제 환경별 Azure Key Vault 비밀 이름이 변수에 저장되고 이를 사용하여 Azure 리소스에 연결할 수 있습니다. 이 동일한 방법은 Azure CLI 스크립트를 다시 사용하려는 경우 Azure VM 및 SQL Server 연결 문자열 IP 주소에 적합합니다.

자세한 정보 가져오기

이 자습서 단계에서 다루는 주제 중 하나에 대해 자세히 알아보시겠습니까? 자세한 내용은 이 표의 링크를 사용합니다.

Subject 자세한 정보
variables Azure CLI 사용의 고급 예제 참조 - 다른 명령에 값 전달
Azure CLI 명령에서 변수를 사용하는 방법의 변수에 대한 개요를 읽어보십시오.
쿼리 JMESPath 쿼리를 사용하여 Azure CLI 명령 출력을 쿼리하는 방법에서 다양한 예제를 찾습니다.
Learn에서 Bash를 사용하여 Azure CLI와 함께 Bash를 사용하는 --query방법을 자세히 알아봅니다.
Azure Key Vault Azure Key Vault 정보
Azure 역할 기반 액세스 제어를 사용하여 Key Vault 키, 인증서 및 비밀에 대한 액세스를 제공합니다.
Azure Key Vault에 대한 일반적인 오류 코드
PowerShell 참조 링크: Get-content, Where-Object, Select-Object

다음 단계

변수를 사용하여 Azure CLI 명령 출력 및 JSON 속성 값을 저장하는 방법을 이해했으므로 다음 단계를 진행하여 스크립트를 사용하여 Azure 리소스를 삭제하는 방법을 알아봅니다.