Заполнение переменных для использования в скриптах
На этом шаге руководства вы узнаете, как работать с переменными:
- Выполните команду 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.