このチュートリアルの手順では、変数を操作する方法について説明します。
- Azure CLI コマンドを実行し、出力を変数に格納します。
- ローカル JSON ファイルを読み取り、プロパティ値を変数に格納します。
変数の一般的なユース ケースを次に示します。
- リソース ID など、既存の Azure リソースに関する情報を取得します。
- パスワードなどの Azure CLI コマンドから出力を取得します。
- 開発、ステージ、運用 ID などの環境情報の JSON オブジェクトを取得します。
その後、Azure CLI で変数を使用して、大規模なビルドジョブと破棄ジョブを実行できます。
[前提条件]
- ストレージ アカウント レベルで
reader
以上のアクセス許可を持つリソース グループとストレージ アカウントにアクセスできます。
JMESPath クエリを使用してコマンド出力を取得する
show
コマンドの --query
パラメーターを使用して、既存の Azure リソースに関する情報を取得します。
JMESPath クエリが実行され、Azure リソースの 1 つ以上のプロパティ値が返されます。
ヒント
--query
の構文では、大文字と小文字が区別され、環境に固有です。 大文字と小文字が正しいか確認し、空の結果が返された場合には再確認してください。
Bash、PowerShell、Cmd での Azure CLI 構文の違いについて学習した規則を適用して、エラーの引用を回避する
--output
パラメーターを指定しない限り、これらの例は、「Azure CLI の環境を準備する」で設定json
既定の出力構成に依存します
Azure リソースの JSON ディクショナリ プロパティを取得する
Bash、PowerShell、Cmd の Learn Azure CLI 構文の違いで作成したストレージ アカウントを使用して、新しいストレージ アカウントの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 Key Vault シークレットの取得を行う場合、コマンド出力を保護する必要があります。
新しい Azure Key Vault とシークレットを作成し、コマンド出力を変数に返します。 この例では、 $RANDOM
識別子が使用されるように、Azure Key Vault 名はグローバルに一意である必要があります。 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 アドレスに適しています。
詳細を取得する
このチュートリアル手順で説明したテーマのいずれかについてさらなる詳細が必要ですか? 次の表のリンクを使用してさらに学習してください。
サブジェクト | 詳細情報 |
---|---|
変数 | 「Azure CLI を正常に使用する - 別のコマンドに値を渡す」の高度な例を参照してください |
変数の概要については、「 Azure CLI コマンドで変数を使用する方法」を参照してください。 | |
クエリ実行 | JMESPath クエリを使用して Azure CLI コマンド出力にクエリを実行する方法に関するページで、さまざまな例を見つけます。 |
Bash のより深い知識を得るために、--query の「Learn to use Bash with the Azure CLI」を利用してください。 |
|
Azure Key Vault | Azure Key Vault について |
Azure ロールベースのアクセス制御を使用して、Key Vault のキー、証明書、シークレットへのアクセスを提供します。 | |
Azure Key Vault の一般的なエラー コード | |
PowerShell | 参照リンク: Get-content、 Where-Object、 Select-Object |
次の手順
変数を使用して Azure CLI コマンドの出力と JSON プロパティ値を格納する方法を理解したら、次の手順に進み、スクリプトを使用して Azure リソースを削除する方法を学習します。
Azure CLI