適用対象: ✔️ Linux VM ✔️ Windows VM ✔️ フレキシブル スケール セット
プロビジョニング時にスクリプトまたはその他のメタデータを Microsoft Azure 仮想マシン (VM) に挿入する必要がある場合があります。 Azureでは、カスタム データと呼ばれる機能を使用してこのシナリオをサポートしています。
カスタムデータは、"プロビジョニング" と呼ばれる最初のスタートアップ時またはセットアップ時に、VM で使用できるようになります。 プロビジョニングとは、VM の作成パラメーター (ホスト名、ユーザー名、パスワード、証明書、カスタム データ、キーなど) を VM で使用できるようにするプロセスです。 cloud-init などのプロビジョニング エージェントは、これらのパラメーターを処理します。
Note
Azureには、個別のユーザー データ機能も用意されています。 カスタム データとは異なり、ユーザー データは Azure Instance Metadata Service (IMDS) から取得でき、VM の有効期間中は永続的であり、VM を停止または再イメージ化することなく更新できます。 プロビジョニング後のアクセスまたは更新が必要な場合は、ユーザー データを使用します。最初の起動時にプロビジョニング エージェントによって処理されるペイロードが必要な場合は、カスタム データを使用します。
カスタム データを 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
カスタム データはバイナリ ファイルとして \AzureData\CustomData.bin%SystemDrive% に配置されますが、処理されません。 このファイルを処理するには、カスタム イメージをビルドし、CustomData.binを読み取るコードを記述 します。
%SystemDrive%\AzureData フォルダーはプロビジョニング中にセキュリティで保護されるため、NT AUTHORITY\SYSTEM と BUILTIN\Administrators のみがフル コントロールを持ち、これらのアクセス許可を継承CustomData.bin。 処理のために 他の場所CustomData.bin コピーする場合は、そのアクセス許可がファイルと共に転送されないため、宛先に対するアクセス許可を明示的に設定します。
Linux
Linux オペレーティング システムでは、カスタム データは ovf-env.xml ファイルを介して VM に渡されます。 このファイルは、プロビジョニング中に /var/lib/waagent ディレクトリにコピーされます。 便宜上、新しいバージョンの Linux エージェントを使い、Base64 でエンコードされたデータを /var/lib/waagent/CustomData にコピーします。
Azure では、現在、次の 2 つのプロビジョニング エージェントがサポートされています。
Linux エージェント。 既定で、エージェントではカスタム データが処理されません。 データが有効になっているカスタム イメージを作成する必要があります。 該当する設定は次のとおりです。
Provisioning.DecodeCustomDataProvisioning.ExecuteCustomData
カスタム データを有効にしてスクリプトを実行すると、スクリプトの実行が完了するまで、仮想マシンからは VM プロビジョニングの成功が報告されません。 スクリプトが VM プロビジョニングの合計時間の上限である 40 分を超えると、VM の作成は失敗します。
スクリプトの実行に失敗した場合、または実行中にエラーが発生した場合は、致命的なプロビジョニング エラーは発生しません。 スクリプトの完了状態を通知する通知パスを作成する必要があります。
カスタム データの実行をトラブルシューティングするには、/var/log/waagent.log を確認してください。
cloud-init。 既定では、このエージェントがカスタム データを処理します。 クラウド初期化構成やスクリプトなど、さまざまな形式のカスタム データを受け入れることができます。
Linux エージェントと同様に、構成処理の実行中にエラーが発生した場合、またはクラウド初期化でカスタム データが処理されている場合に、致命的なプロビジョニング エラーは発生しません。 スクリプトの完了状態を通知する通知パスを作成する必要があります。
ただし、Linux エージェントとは異なり、cloud init は、ユーザーのカスタム データ構成が完了するのを待たずに、VM の準備ができていることをプラットフォームに報告します。 トラブルシューティングなど、Azure でのクラウドの初期化の詳細については、「Azure での仮想マシンの cloud-init のサポート」を参照してください。
FAQ
VM の作成後にカスタム データを更新できますか?
単一の VM の場合、VM モデル内のカスタム データを更新することはできません。 ただし、Virtual Machine Scale Sets の場合は、カスタム データを更新できます。 詳細については、スケール セットの変更に関するページを参照してください。 仮想マシン スケール セットのモデルのカスタム データを更新する場合:
- スケール セット内の既存のインスタンスは、最新モデルにアップデートされて再イメージ化されるまで、更新されたカスタム データを取得しません。
- 新しいインスタンスは、新しいカスタム データを受け取ります。
カスタム データに機密性の高い値を配置できますか?
機密性の高いデータはカスタム データに格納しないことをお勧めします。 詳細については、「Azure のデータ セキュリティと暗号化のベスト プラクティス」を参照してください。
カスタム データは IMDS で使用できますか?
No. カスタム データは、Azure インスタンス メタデータ サービス (IMDS) を介して表示されません。 プロビジョニング後に VM 内からペイロードを取得する必要がある場合、または VM を停止または再イメージ化せずに更新する必要がある場合は、代わりに ユーザー データ 機能を使用します。 IMDS からのユーザー データの読み取りの詳細については、「 ユーザー データの取得」を参照してください。