Service Fabric クラスターの Resource Manager テンプレートを作成する

Azure Service Fabric クラスターはネットワークで接続された一連の仮想マシンです。マイクロサービスは Service Fabric クラスターにデプロイされ、そこで管理されます。 Azure で動作する Service Fabric クラスターは Azure リソースであり、Resource Manager を使用してデプロイ、管理、および監視されます。 この記事では、Azure で動作する Service Fabric クラスター用の Resource Manager テンプレートの作成方法について説明します。 テンプレートが完成したら、クラスターを Azure にデプロイできます。

クラスター セキュリティはクラスターの初回セットアップ時に構成され、後からの変更はできません。 クラスターをセットアップする前に、「Service Fabric クラスターのセキュリティに関するシナリオ」をお読みください。 Azure の Service Fabric では、x509 証明書を使用してクラスターとそのエンドポイントをセキュリティで保護し、クライアントを認証し、データを暗号化します。 管理エンドポイントへのアクセスをセキュリティで保護するため、Microsoft Entra ID もお勧めします。 Microsoft Entra テナントとユーザーは、クラスターを作成する前に作成する必要があります。 詳しくは、クライアントを認証するための Microsoft Entra ID のセットアップに関する記事をご覧ください。

運用環境のワークロードを実行するための運用環境クラスターをデプロイする前に、必ず「運用環境の準備状況チェックリスト」を最初にお読みください。

Note

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、「Azure PowerShell のインストール」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

Resource Manager テンプレートの作成

サンプルの Resource Manager テンプレートは、GitHub の Azure サンプルで入手できます。 これらのテンプレートは、クラスター テンプレートの作成を始める際に使用できます。

この記事では、セキュリティで保護された 5 ノード クラスターの例にあるテンプレートとテンプレート パラメーターを使用します。 azuredeploy.json および azuredeploy.parameters.json をコンピューターにダウンロードし、両方のファイルを任意のテキスト エディターで開きます。

Note

また、国内のクラウド (Azure Government、21Vianet によって運営される Microsoft Azure、Azure Germany) については、次の fabricSettings をテンプレートに追加する必要もあります: AADLoginEndpointAADTokenEndpointFormatAADCertEndpointFormat

証明書の追加

証明書は、証明書キーを含む Key Vault を参照することによって、Cluster Resource Manager テンプレートに追加されます。 Resource Manager テンプレート パラメーター ファイル (azuredeploy.parameters.json) にこれらの Key Vault パラメーターと値を追加します。

仮想マシン スケール セットの osProfile にすべての証明書を追加する

クラスターにインストールするすべての証明書は、スケール セット リソース (Microsoft.Compute/virtualMachineScaleSets) の [osProfile] セクションで構成する必要があります。 このアクションにより、リソース プロバイダーに対して VM に証明書をインストールするよう指示されます。 このインストールには、クラスター証明書とアプリケーションで使用する予定のあらゆるアプリケーションのセキュリティ証明書が含まれます。

{
  "apiVersion": "[variables('vmssApiVersion')]",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  ...
  "properties": {
    ...
    "osProfile": {
      ...
      "secrets": [
        {
          "sourceVault": {
            "id": "[parameters('sourceVaultValue')]"
          },
          "vaultCertificates": [
            {
              "certificateStore": "[parameters('clusterCertificateStorevalue')]",
              "certificateUrl": "[parameters('clusterCertificateUrlValue')]"
            },
            {
              "certificateStore": "[parameters('applicationCertificateStorevalue')",
              "certificateUrl": "[parameters('applicationCertificateUrlValue')]"
            },
            ...
          ]
        }
      ]
    }
  }
}

Service Fabric クラスターの証明書を構成する

クラスターの認証証明書は、Service Fabric クラスター リソース (Microsoft.ServiceFabric/clusters) と、仮想マシン スケール セット リソースの仮想マシン スケール セット用 Service Fabric 拡張機能で構成する必要があります。 これにより、Service Fabric のリソース プロバイダーを使用してクラスターの認証および管理エンドポイントのサーバー認証用に構成できます。

仮想マシン スケール セット リソースの証明書情報を追加する

{
  "apiVersion": "[variables('vmssApiVersion')]",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  ...
  "properties": {
    ...
    "virtualMachineProfile": {
      "extensionProfile": {
        "extensions": [
          {
            "name": "[concat('ServiceFabricNodeVmExt_',variables('vmNodeType0Name'))]",
            "properties": {
              ...
              "settings": {
                ...
                "certificate": {
                  "commonNames": ["[parameters('certificateCommonName')]"],
                  "x509StoreName": "[parameters('clusterCertificateStoreValue')]"
                },
                ...
              }
            }
          }
        ]
      }
    }
  }
}

Service Fabric クラスター リソースの証明書情報を追加する

{
  "apiVersion": "2018-02-01",
  "type": "Microsoft.ServiceFabric/clusters",
  "name": "[parameters('clusterName')]",
  "location": "[parameters('clusterLocation')]",
  "dependsOn": [
    "[concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName'))]"
  ],
  "properties": {
    "certificateCommonNames": {
        "commonNames": [
        {
            "certificateCommonName": "[parameters('certificateCommonName')]",
            "certificateIssuerThumbprint": ""
        }
        ],
        "x509StoreName": "[parameters('certificateStoreValue')]"
    },
    ...
  }
}

クライアント アクセスに Microsoft Entra ID を使用するように Microsoft Entra 構成を追加する

証明書キーが含まれるキー コンテナーを参照することによって、Microsoft Entra の構成をクラスターの Resource Manager テンプレートに追加します。 Resource Manager テンプレートのパラメーター ファイル (azuredeploy.parameters.json) に、Microsoft Entra のそれらのパラメーターと値を追加します。

Note

Linux では、クラスターを作成する前に、Microsoft Entra のテナントとユーザーを作成する必要があります。 詳しくは、クライアントを認証するための Microsoft Entra ID のセットアップに関する記事をご覧ください。

{
  "apiVersion": "2018-02-01",
  "type": "Microsoft.ServiceFabric/clusters",
  "name": "[parameters('clusterName')]",
  ...
  "properties": {
    "certificateCommonNames": {
        "commonNames": [
        {
            "certificateCommonName": "[parameters('certificateCommonName')]",
            "certificateIssuerThumbprint": ""
        }
        ],
        "x509StoreName": "[parameters('certificateStoreValue')]"
    },
    ...
    "azureActiveDirectory": {
      "tenantId": "[parameters('aadTenantId')]",
      "clusterApplication": "[parameters('aadClusterApplicationId')]",
      "clientApplication": "[parameters('aadClientApplicationId')]"
    },
    ...
  }
}

パラメーター ファイルに値を設定する

最後に、Key Vault と Azure AD PowerShell コマンドからの出力値を使用してパラメーター ファイルを作成します。

Azure Service Fabric RM PowerShell モジュールを使用する予定がある場合は、クラスター証明書情報を設定する必要はありません。 クラスター セキュリティの自己署名証明書を自動的に生成するには、それらの情報を null のままにしておきます。

Note

RM モジュールでこれらの空のパラメーター値を取得して設定するには、パラメーター名が以下の名前と一致する必要があります。

"clusterCertificateThumbprint": {
    "value": ""
},
"certificateCommonName": {
    "value": ""
},
"clusterCertificateUrlValue": {
    "value": ""
},
"sourceVaultvalue": {
    "value": ""
},

アプリケーション証明書を使用している場合、または Key Vault にアップロードした既存のクラスターを使用している場合は、その情報を取得して設定する必要があります。

RM モジュールには、Microsoft Entra の構成を自動的に生成する機能はないので、クライアント アクセスに Microsoft Entra ID を使う場合は、ユーザーがそれを設定する必要があります。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        ...
        "clusterCertificateStoreValue": {
            "value": "My"
        },
        "clusterCertificateThumbprint": {
            "value": "<thumbprint>"
        },
        "clusterCertificateUrlValue": {
            "value": "https://myvault.vault.azure.net:443/secrets/myclustercert/4d087088df974e869f1c0978cb100e47"
        },
        "applicationCertificateStorevalue": {
            "value": "My"
        },
        "applicationCertificateUrlValue": {
            "value": "https://myvault.vault.azure.net:443/secrets/myapplicationcert/2e035058ae274f869c4d0348ca100f08"
        },
        "sourceVaultvalue": {
            "value": "/subscriptions/<guid>/resourceGroups/mycluster-keyvault/providers/Microsoft.KeyVault/vaults/myvault"
        },
        "aadTenantId": {
            "value": "<guid>"
        },
        "aadClusterApplicationId": {
            "value": "<guid>"
        },
        "aadClientApplicationId": {
            "value": "<guid>"
        },
        ...
    }
}

テンプレートのテスト

次の PowerShell コマンドを使用して、パラメーター ファイルで Resource Manager テンプレートをテストします。

Test-AzResourceGroupDeployment -ResourceGroupName "myresourcegroup" -TemplateFile .\azuredeploy.json -TemplateParameterFile .\azuredeploy.parameters.json

問題が発生し、不明なメッセージを受け取った場合は、オプションに "-Debug" を使用します。

Test-AzResourceGroupDeployment -ResourceGroupName "myresourcegroup" -TemplateFile .\azuredeploy.json -TemplateParameterFile .\azuredeploy.parameters.json -Debug

次の図は、キー コンテナーと Microsoft Entra の構成が Resource Manager テンプレートのどこに当てはまるのかを示したものです。

Resource Manager の依存関係マップ

次のステップ

クラスター用のテンプレートが完成したので、クラスターを Azure にデプロイする方法を学びます。 「運用環境の準備状況チェックリスト」をまだお読みでない場合は、 運用環境クラスターをデプロイする前にお読みください。

この記事でデプロイしたリソースの JSON 構文およびプロパティについては、次をご覧ください。