Azure Resource Manager テンプレートを使用して Azure Cosmos DB for NoSQL コンテナーを作成する

Azure Resource Manager テンプレートは、Azure にデプロイするインフラストラクチャを宣言的に定義する JSON ファイルです。 Azure Resource Manager テンプレートは、Azure にサービスをデプロイするための一般的なコードとしてのインフラストラクチャ ソリューションです。 Bicep は、JSON テンプレートの作成に使用できる、読みやすいドメイン固有言語を定義することで、概念をさらに詳しく説明します。

このラボでは、Azure Resource Manager テンプレートを使用して、新しい Azure Cosmos DB アカウント、データベース、およびコンテナーを作成します。 最初に未加工の JSON からテンプレートを作成してから、Bicep ドメイン固有言語を使用してテンプレートを作成します。

開発環境を準備する

このラボで作業している環境に DP-420 のラボ コードのリポジトリをまだクローンしていない場合は、次の手順に従ってクローンします。 それ以外の場合は、以前にクローンしたフォルダーを Visual Studio Code で開きます。

  1. Visual Studio Code を起動します。

    📝 Visual Studio Code インターフェイスについてまだよく理解していない場合は、Visual Studio Code の入門ガイドを参照してください

  2. コマンド パレットを開き、Git: Clone を実行して、任意のローカル フォルダーに https://github.com/microsoftlearning/dp-420-cosmos-db-dev GitHub リポジトリをクローンします。

    💡 Ctrl + Shift + P キーボード ショートカットを使用してコマンド パレットを開くことができます。

  3. リポジトリが複製されたら、Visual Studio Code で選択したローカル フォルダーを開きます。

Azure Resource Manager テンプレートを使用して Azure Cosmos DB for NoSQL リソースを作成する

Azure Resource Manager の Microsoft.DocumentDB リソース プロバイダーを使用すると、JSON ファイルを使用してアカウント、データベース、およびコンテナーをデプロイできます。 ファイルは複雑な場合がありますが、予測可能な形式に従っており、Visual Studio Code 拡張機能を使用して書き込むことができます。

💡 スタックしてしまい、テンプレートの構文エラーを理解できない場合は、このソリューションの Azure Resource Manager テンプレートをガイドとして使用してください。

  1. Visual Studio Code[エクスプローラー] ペインで、31-create-container-arm-template フォルダーを参照します。

  2. deploy.json ファイルを開きます。

  3. 空の Azure Resource Manager テンプレートを確認します。

     {
         "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
         "contentVersion": "1.0.0.0",
         "resources": [
         ]
     }
    
  4. resources 配列内に、新しい JSON オブジェクトを追加して、新しい Azure Cosmos DB アカウントを作成します。

     {
         "type": "Microsoft.DocumentDB/databaseAccounts",
         "apiVersion": "2021-05-15",
         "name": "[concat('csmsarm', uniqueString(resourceGroup().id))]",
         "location": "[resourceGroup().location]",
         "properties": {
             "databaseAccountOfferType": "Standard",
             "locations": [
                 {
                     "locationName": "westus"
                 }
             ]
         }
     }
    

    オブジェクトは、次の設定で構成されます。

    設定 Value
    リソースの種類 Microsoft.DocumentDB/databaseAccounts
    API バージョン 2021-05-15
    アカウント名 csmsarm & アカウント名から生成された一意の文字列
    場所 リソース グループの現在の場所
    アカウント オファーの種類 Standard
    場所 米国西部のみ
  5. deploy.json ファイルを保存します。

  6. 31-create-container-arm-template フォルダーのコンテキスト メニューを開き、[統合ターミナルで開く] を選択して新しいターミナル インスタンスを開きます。

    📝 このコマンドを実行すると、開始ディレクトリが 31-create-container-arm-template フォルダーに既に設定されているターミナルが開きます。

  7. Azure にログインする前に、tls/ssl 証明書をインストールします。

     $CurrentDirectory=$pwd
     CD "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\"
     .\python.exe -m pip install pip-system-certs
     CD $CurrentDirectory
    
  8. 次のコマンドを使用して、Azure CLI の対話型ログイン プロシージャを開始します。

     az login
    
  9. Azure CLI では、Web ブラウザーのウィンドウまたはタブが自動的に開き、ブラウザー インスタンス内で、サブスクリプションに関連付けられている Microsoft 資格情報を使用して Azure CLI にサインインします。

  10. Web ブラウザーのウィンドウまたはタブを閉じます。

  11. 自分用のリソース グループをラボ プロバイダーが作成済みかどうかを確認します。それが済んでいる場合は、次のセクションで必要になるので、その名前をメモします。

     az group list --query "[].{ResourceGroupName:name}" -o table
    

    このコマンドを実行すると、複数のリソース グループ名を返すことができます。

  12. (省略可能) “リソース グループが作成されていない場合” は、リソース グループ名を選んで作成します。 ラボ環境によってはロックされている場合があるので、自分用のリソース グループを管理者に作成してもらう必要があることに注意してください。

    i. この一覧から、自分に最も近い場所の名前を取得します。

     az account list-locations --query "sort_by([].{YOURLOCATION:name, DisplayName:regionalDisplayName}, &YOURLOCATION)" --output table
    

    ii. リソース グループを作成します。 ラボ環境によってはロックされている場合があるので、自分用のリソース グループを管理者に作成してもらう必要があることに注意してください。

     az group create --name YOURRESOURCEGROUPNAME --location YOURLOCATION
    
  13. 次のコマンドを使用して、このラボで以前に作成または表示したリソース グループの名前を使用して、新しい変数名 resourceGroup を作成します。

     $resourceGroup="<resource-group-name>"
    

    📝 たとえば、リソース グループの名前が dp420 の場合、コマンドは $resourceGroup=”dp420” になります。

  14. echo コマンドレットを使用して、次のコマンドを使用して $resourceGroup 変数の値をターミナル出力に書き込みます。

     echo $resourceGroup
    
  15. az deployment group create コマンドを使用して Azure Resource Manager テンプレートをデプロイします。

     az deployment group create --name "arm-deploy-account" --resource-group $resourceGroup --template-file .\deploy.json
    
  16. 統合ターミナルを開いたままにして、deploy.json ファイルのエディターに戻ります。

  17. resources 配列内に、別の新しい JSON オブジェクトを追加して、新しい Azure Cosmos DB for NoSQL データベースを作成します。

     ,
     {
         "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
         "apiVersion": "2021-05-15",
         "name": "[concat('csmsarm', uniqueString(resourceGroup().id), '/cosmicworks')]",
         "dependsOn": [
             "[resourceId('Microsoft.DocumentDB/databaseAccounts', concat('csmsarm', uniqueString(resourceGroup().id)))]"
         ],
         "properties": {
             "resource": {
                 "id": "cosmicworks"
             }
         }
     }
    

    オブジェクトは、次の設定で構成されます。

    設定 Value
    リソースの種類 Microsoft.DocumentDB/databaseAccounts/sqlDatabases
    API バージョン 2021-05-15
    アカウント名 csmsarm & アカウント名から生成された一意の文字列 & /cosmicworks
    リソース ID cosmicworks
    依存関係 テンプレートで前に作成した databaseAccount
  18. deploy.json ファイルを保存します。

  19. 統合ターミナルに戻ります。

  20. az deployment group create コマンドを使用して Azure Resource Manager テンプレートをデプロイします。

     az deployment group create --name "arm-deploy-database" --resource-group $resourceGroup --template-file .\deploy.json
    
  21. 統合ターミナルを開いたままにして、deploy.json ファイルのエディターに戻ります。

  22. resources 配列内に、別の新しい JSON オブジェクトを追加して、新しい Azure Cosmos DB for NoSQL コンテナーを作成します。

     ,
     {
         "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers",
         "apiVersion": "2021-05-15",
         "name": "[concat('csmsarm', uniqueString(resourceGroup().id), '/cosmicworks/products')]",
         "dependsOn": [
             "[resourceId('Microsoft.DocumentDB/databaseAccounts', concat('csmsarm', uniqueString(resourceGroup().id)))]",
             "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', concat('csmsarm', uniqueString(resourceGroup().id)), 'cosmicworks')]"
         ],
         "properties": {
             "options": {
                 "throughput": 400
             },
             "resource": {
                 "id": "products",
                 "partitionKey": {
                     "paths": [
                         "/categoryId"
                     ]
                 }
             }
         }
     }
    

    オブジェクトは、次の設定で構成されます。

    設定 Value
    リソースの種類 Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers
    API バージョン 2021-05-15
    アカウント名 csmsarm & アカウント名から生成された一意の文字列 & /cosmicworks/products
    リソース ID products
    スループット 400
    パーティション キー /categoryId
    依存関係 テンプレートで先に作成したアカウントとデータベース
  23. deploy.json ファイルを保存します。

  24. 統合ターミナルに戻ります。

  25. az deployment group create コマンドを使用して最後の Azure Resource Manager テンプレートをデプロイします。

     az deployment group create --name "arm-deploy-container" --resource-group $resourceGroup --template-file .\deploy.json
    
  26. 統合ターミナルを閉じます。

デプロイされた Azure Cosmos DB リソースを確認する

Azure Cosmos DB for NoSQL リソースがデプロイされたら、Azure portal でそのリソースに移動できます。 データ エクスプローラーを使用して、アカウント、データベース、およびコンテナーがすべて正しくデプロイおよび構成されていることを検証します。

  1. 新しい Web ブラウザー ウィンドウまたはタブで、Azure portal (portal.azure.com) に移動します。

  2. ご利用のサブスクリプションに関連付けられている Microsoft 資格情報を使用して、ポータルにサインインします。

  3. [リソース グループ] を選択し、このラボで先ほど作成または表示したリソース グループを選び、このラボで作成した csmsarm プレフィックスの付いた Azure Cosmos DB アカウント リソースを選択します。

  4. Azure Cosmos DB アカウント リソース内で、 [データ エクスプローラー] ペインに移動します。

  5. [データ エクスプローラー] で、cosmicworks データベース ノードを展開し、NoSQL API ナビゲーション ツリー内の新しい products コンテナー ノードを確認します。

  6. NoSQL API ナビゲーション ツリー内の products コンテナー ノードを選択し、[スケールと設定] を選択します。

  7. [スケール] セクション内の値を確認します。 具体的には、[スループット] セクションで [手動] オプションが選択されており、プロビジョニングされたスループットが 400 RU/秒に設定されていることを確認します。

  8. [設定] セクション内の値を確認します。 具体的には、パーティション キーの値が /categoryId に設定されていることを確認します。

  9. Web ブラウザーのウィンドウまたはタブを閉じます。

Bicep テンプレートを使用して Azure Cosmos DB for NoSQL リソースを作成する

Bicep は、効率的なドメイン固有言語であり、Azure Resource Manager テンプレートよりも単純かつ簡単に Azure リソースをデプロイできます。 違いを説明するために、Bicep と別の名前を使用してまったく同じリソースをデプロイします。[]

💡 スタックしてしまい、テンプレートの構文エラーを理解できない場合は、このソリューションの Bicep テンプレートをガイドとして使用してください。

  1. Visual Studio Code[エクスプローラー] ペインで、31-create-container-arm-template フォルダーを参照します。

  2. 空の deploy.bicep ファイルを開きます。

  3. ファイル内に、新しいオブジェクトを追加して、新しい Azure Cosmos DB アカウントを作成します。

     param location string = resourceGroup().location
        
     resource Account 'Microsoft.DocumentDB/databaseAccounts@2021-05-15' = {
       name: 'csmsbicep${uniqueString(resourceGroup().id)}'
       location: location
       properties: {
         databaseAccountOfferType: 'Standard'
         locations: [
           { 
             locationName: 'westus' 
           }
         ]
       }
     }
    

    オブジェクトは、次の設定で構成されます。

    設定 Value
    エイリアス 取引先企業
    名前 csmsarm & アカウント名から生成された一意の文字列
    リソースの種類 Microsoft.DocumentDB/databaseAccounts/sqlDatabases
    API バージョン 2021-05-15
    場所 リソース グループの現在の場所
    アカウント オファーの種類 Standard
    場所 米国西部のみ
  4. deploy.bicep ファイルを保存します。

  5. 31-create-container-arm-template フォルダーのコンテキスト メニューを開き、[統合ターミナルで開く] を選択して新しいターミナル インスタンスを開きます。

  6. 次のコマンドを使用して、このラボで以前に作成または表示したリソース グループの名前を使用して、新しい変数名 resourceGroup を作成します。

     $resourceGroup="<resource-group-name>"
    

    📝 たとえば、リソース グループの名前が dp420 の場合、コマンドは $resourceGroup=”dp420” になります。

  7. az deployment group create コマンドを使用して Bicep テンプレートをデプロイします。

     az deployment group create --name "bicep-deploy-account" --resource-group $resourceGroup --template-file .\deploy.bicep
    
  8. 統合ターミナルを開いたままにして、deploy.bicep ファイルのエディターに戻ります。

  9. ファイル内に、別の新しいオブジェクトを追加して、新しい Azure Cosmos DB データベースを作成します。

     resource Database 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2021-05-15' = {
       parent: Account
       name: 'cosmicworks'
       properties: {
         resource: {
             id: 'cosmicworks'
         }
       }
     }
    

    オブジェクトは、次の設定で構成されます。

    設定 Value
    Parent テンプレートで前に作成したアカウント
    エイリアス データベース
    名前 cosmicworks
    リソースの種類 Microsoft.DocumentDB/databaseAccounts/sqlDatabases
    API バージョン 2021-05-15
    リソース ID cosmicworks
  10. deploy.bicep ファイルを保存します。

  11. 統合ターミナルに戻ります。

  12. az deployment group create コマンドを使用して Bicep テンプレートをデプロイします。

     az deployment group create --name "bicep-deploy-database" --resource-group $resourceGroup --template-file .\deploy.bicep
    
  13. 統合ターミナルを開いたままにして、deploy.bicep ファイルのエディターに戻ります。

  14. ファイル内に、別の新しいオブジェクトを追加して、新しい Azure Cosmos DB コンテナーを作成します。

     resource Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2021-05-15' = {
       parent: Database
       name: 'products'
       properties: {
         options: {
           throughput: 400
         }
         resource: {
           id: 'products'
           partitionKey: {
             paths: [
               '/categoryId'
             ]
           }
         }
       }
     }
    

    オブジェクトは、次の設定で構成されます。

    設定 Value
    Parent テンプレートで前に作成したデータベース
    エイリアス コンテナー
    名前 products
    リソース ID products
    スループット 400
    パーティション キーのパス /categoryId
  15. deploy.bicep ファイルを保存します。

  16. 統合ターミナルに戻ります。

  17. az deployment group create コマンドを使用して最後の Bicep テンプレートをデプロイします。

     az deployment group create --name "bicep-deploy-container" --resource-group $resourceGroup --template-file .\deploy.bicep
    
  18. 統合ターミナルを閉じます。

  19. Visual Studio Code を閉じます。

Bicep テンプレートのデプロイ結果を確認する

Bicep デプロイは、Azure Resource Manager デプロイと同じ手法の多くを使用して検証できます。 アカウント、データベース、コンテナーが正常にデプロイされたことを検証するだけでなく、6 つのデプロイすべてにわたってデプロイ履歴も表示します。

  1. 新しい Web ブラウザー ウィンドウまたはタブで、Azure portal (portal.azure.com) に移動します。

  2. ご利用のサブスクリプションに関連付けられている Microsoft 資格情報を使用して、ポータルにサインインします。

  3. [リソース グループ] を選択し、このラボで先ほど作成または表示したリソース グループを選択します。

  4. リソース グループ内で、[デプロイ] ペインに移動します。

  5. Azure Resource Manager テンプレートと Bicep ファイルからの 6 つのデプロイを確認します。

  6. 引き続きリソース グループ内で、[概要] ペインに移動します。

  7. 引き続きリソース グループ内で、このラボで作成した Azure Cosmos DB アカウント リソースに csmsbicep プレフィックスを付けて選択します。

  8. Azure Cosmos DB アカウント リソース内で、 [データ エクスプローラー] ペインに移動します。

  9. [データ エクスプローラー] で、cosmicworks データベース ノードを展開し、NoSQL API ナビゲーション ツリー内の新しい products コンテナー ノードを確認します。

  10. NoSQL API ナビゲーション ツリー内の products コンテナー ノードを選択し、[スケールと設定] を選択します。

  11. [スケール] セクション内の値を確認します。 具体的には、[スループット] セクションで [手動] オプションが選択されており、プロビジョニングされたスループットが 400 RU/秒に設定されていることを確認します。

  12. [設定] セクション内の値を確認します。 具体的には、パーティション キーの値が /categoryId に設定されていることを確認します。

  13. Web ブラウザーのウィンドウまたはタブを閉じます。