Заполнение переменных для использования в скриптах

На этом шаге руководства вы узнаете, как работать с переменными:

  • Выполните команду Azure CLI и сохраните выходные данные в переменной.
  • Чтение локального JSON-файла и хранение значений свойств в переменной.

Ниже приведены некоторые распространенные варианты использования переменных:

  • Получение сведений о существующем ресурсе Azure, например идентификаторе ресурса.
  • Получите выходные данные из команды Azure CLI, например пароля.
  • Получение объектов JSON для сведений о среде, таких как разработка, этапы и рабочие идентификаторы.

Затем переменная может использоваться в Azure CLI для выполнения заданий сборки и уничтожения в масштабе.

Необходимые компоненты

  • У вас есть доступ к группе ресурсов и учетной записи хранения с reader разрешениями на уровне учетной записи хранения.

Получение выходных данных команды с помощью запроса JMESPath

Получение сведений о существующем ресурсе Azure с помощью --query параметра show команды. Выполняется запрос JMESPath, а возвращается одно или несколько значений свойств ресурса Azure.

Совет

Синтаксис для --query этого относится к регистру с учетом регистра и зависит от среды. Если вы получаете пустые результаты, проверка заглавной буквы. Избегайте ошибок в кавыках, применяя правила, которые вы узнали в описании синтаксиса Azure CLI в Bash, PowerShell и Cmd.

Если --output параметр не указан, эти примеры зависят от конфигурации выходных json данных по умолчанию в разделе "Подготовка среды для Azure CLI"

Получение свойств словаря JSON ресурса Azure

Используя учетную запись хранения, созданную в azure CLI, различия в синтаксисе Bash, PowerShell и Cmd, получите primaryEndpoints новую учетную запись хранения.

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 выходные данные команды должны быть защищены.

Создайте 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-файла и его хранение в переменной

Следующий раздел — это "задача stretch" для руководства по подключению. Однако для управления ресурсами 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"
    }
  }
}

Сохраните содержимое JSON-файла в переменной для дальнейшего использования в командах Azure CLI. В этом примере измените msdocs-tutorial.json имя файла. Не сохраняйте echo команду в сценариях уровня рабочей среды, так как выходные данные сохраняются в файле журнала.

Этот скрипт Bash был протестирован в Azure Cloud Shell и зависит от JQ Bash, который должен быть установлен в вашей среде.

# 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 не найдена"? Это связано с тем, что этот скрипт зависит от команды JQ Bash. Установите jq в среде или запустите этот скрипт в Azure Cloud Shell.

Теперь у вас есть имя секрета Azure Key Vault для конкретной среды, хранящееся в переменной, и его можно использовать для подключения к ресурсам Azure. Этот же метод подходит для IP-адресов виртуальных машин Azure и строка подключения SQL Server, если требуется повторно использовать скрипты Azure CLI.

Дополнительные сведения

Хотите подробнее об одном из тем, описанных на этом шаге руководства? Чтобы узнать больше, воспользуйтесь ссылками в этой таблице.

Тема Подробнее
Переменные Дополнительные примеры см. в статье "Использование Azure CLI" — передача значений в другую команду
Ознакомьтесь с хорошим обзором переменных в руководстве по использованию переменных в командах Azure CLI.
Выполнение запроса Найдите широкий спектр примеров в том, как запросить выходные данные команды Azure CLI с помощью запроса JMESPath.
Ознакомьтесь с более подробной статьей об использовании Bash в Learn для использования --query Bash с Azure CLI.
Хранилище ключей Azure Сведения об Azure Key Vault
Предоставление доступа к ключам Key Vault, сертификатам и секретам с помощью управления доступом на основе ролей Azure.
Распространенные коды ошибок для Azure Key Vault
PowerShell Справочные ссылки: Get-content, Where-Object, Select-Object

Следующий шаг

Теперь, когда вы узнаете, как использовать переменные для хранения выходных данных команд Azure CLI и значений свойств JSON, перейдите к следующему шагу, чтобы узнать, как использовать скрипты для удаления ресурсов Azure.