次の方法で共有


Azure 仮想マシンでのカスタム データと cloud-init

適用対象: ✔️ Linux VM ✔️ Windows VM ✔️ フレキシブル スケール セット

プロビジョニング時にスクリプトまたはその他のメタデータを Microsoft Azure 仮想マシン (VM) に挿入する必要がある場合があります。 他のクラウドでは、この概念は多くの場合、"ユーザー データ" と呼ばれます。 Microsoft Azure には、"カスタム データ" と呼ばれる同様の機能があります。

カスタムデータは、"プロビジョニング" と呼ばれる最初のスタートアップ時またはセットアップ時に、VM で使用できるようになります。 プロビジョニングとは、VM の作成パラメーター (ホスト名、ユーザー名、パスワード、証明書、カスタム データ、キーなど) を VM で使用できるようにするプロセスです。 Linux エージェントまたは cloud-init などのプロビジョニング エージェントにより、プロセス パラメーターを処理できます。

カスタム データを VM に渡す

カスタム データを使用するには、変換を実行する CLI ツール (Azure CLI など) を使用していない限り、データを API に渡す前に、コンテンツを Base64 でエンコードする必要があります。 そのサイズは 64 KB を超えることはできません。

CLI では、次の例に示すように、カスタム データをファイルとして渡すことができます。 ファイルは Base64 に変換されます。

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image Ubuntu2204 \
  --custom-data cloud-init.txt \
  --generate-ssh-keys

Azure Resource Manager には、base64 関数があります。

"name": "[parameters('virtualMachineName')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2019-07-01",
"location": "[parameters('location')]",
"dependsOn": [
..],
"variables": {
        "customDataBase64": "[base64(parameters('stringData'))]"
    },
"properties": {
..
    "osProfile": {
        "computerName": "[parameters('virtualMachineName')]",
        "adminUsername": "[parameters('adminUsername')]",
        "adminPassword": "[parameters('adminPassword')]",
        "customData": "[variables('customDataBase64')]"
        },

カスタム データの処理

VM にインストールされているプロビジョニング エージェントは、プラットフォームとの通信を処理し、データをファイル システムに配置します。

Windows

カスタム データは、バイナリ ファイルとして %SYSTEMDRIVE%\AzureData\CustomData.bin に配置されますが、処理されません。 このファイルを処理する場合は、カスタム イメージをビルドし、CustomData.bin を処理するコードを記述する必要があります。

Linux

Linux オペレーティング システムでは、カスタム データは ovf-env.xml ファイルを介して VM に渡されます。 このファイルは、プロビジョニング中に /var/lib/waagent ディレクトリにコピーされます。 便宜上、新しいバージョンの Linux エージェントを使い、Base64 でエンコードされたデータを /var/lib/waagent/CustomData にコピーします。

Azure では、現在、次の 2 つのプロビジョニング エージェントがサポートされています。

  • Linux エージェント。 既定で、エージェントではカスタム データが処理されません。 データが有効になっているカスタム イメージを作成する必要があります。 該当する設定は次のとおりです。

    • Provisioning.DecodeCustomData
    • Provisioning.ExecuteCustomData

    カスタム データを有効にしてスクリプトを実行すると、スクリプトの実行が完了するまで、仮想マシンからは VM プロビジョニングの成功が報告されません。 スクリプトが VM プロビジョニングの合計時間の上限である 40 分を超えると、VM の作成は失敗します。

    スクリプトの実行に失敗した場合、または実行中にエラーが発生した場合は、致命的なプロビジョニング エラーは発生しません。 スクリプトの完了状態を通知する通知パスを作成する必要があります。

    カスタム データの実行をトラブルシューティングするには、/var/log/waagent.log を確認してください。

  • cloud-init。 既定では、このエージェントがカスタム データを処理します。 クラウド初期化構成やスクリプトなど、さまざまな形式のカスタム データを受け入れることができます。

    Linux エージェントと同様に、構成処理の実行中にエラーが発生した場合、またはクラウド初期化でカスタム データが処理されている場合に、致命的なプロビジョニング エラーは発生しません。 スクリプトの完了状態を通知する通知パスを作成する必要があります。

    ただし、Linux エージェントとは異なり、cloud init は、ユーザーのカスタム データ構成が完了するのを待たずに、VM の準備ができていることをプラットフォームに報告します。 トラブルシューティングなど、Azure でのクラウドの初期化の詳細については、「Azure での仮想マシンの cloud-init のサポート」を参照してください。

よく寄せられる質問

VM の作成後にカスタム データを更新できますか?

単一の VM の場合、VM モデル内のカスタム データを更新することはできません。 ただし、Virtual Machine Scale Sets の場合は、カスタム データを更新できます。 詳細については、スケール セットの変更に関するページを参照してください。 仮想マシン スケール セットのモデルのカスタム データを更新する場合:

  • スケール セット内の既存のインスタンスは、最新モデルにアップデートされて再イメージ化されるまで、更新されたカスタム データを取得しません。
  • 新しいインスタンスは、新しいカスタム データを受け取ります。

カスタム データに機密性の高い値を配置できますか?

機密性の高いデータはカスタム データに格納しないことをお勧めします。 詳細については、「Azure のデータ セキュリティと暗号化のベスト プラクティス」を参照してください。

カスタム データは IMDS で使用できますか?

カスタム データは、Azure Instance Metadata Service (IMDS) では使用できません。 代わりに、IMDS でユーザー データを使用することをお勧めします。 詳細については、Azure Instance Metadata Service を介したユーザー データに関するページをご覧ください。