次の方法で共有


スクリプトで使用する変数を設定する

このチュートリアルの手順では、変数を操作する方法について説明します。

  • 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-contentWhere-ObjectSelect-Object

次の手順

変数を使用して Azure CLI コマンドの出力と JSON プロパティ値を格納する方法を理解したら、次の手順に進み、スクリプトを使用して Azure リソースを削除する方法を学習します。