ARM テンプレートのオーサリング
このセクションは、ARM テンプレートに精通しているユーザーを対象としています。App Layering Azure デプロイコネクタのオーサリングテンプレートに関する詳細情報を提供します。ARM テンプレートの一般的なオーサリング情報については、 Microsoft のマニュアルを参照してください。
入力
すべてのデプロイタイプには、al
という名前のオブジェクトという 1 つのパラメータが渡されます。このオブジェクトには、input
とcontext
2 つのプロパティがあります。input
プロパティは各デプロイタイプに固有のオブジェクトで、そのプロパティはデプロイタイプによって変わります。context
プロパティは、すべてのデプロイタイプで同じです。App Layering タスク、アイテム (レイヤーまたはイメージテンプレート)、および現在のデプロイに関連するコネクタ構成に関するデータが含まれています。パラメータオブジェクトの詳細については、「 Azure Deployments テンプレートパラメータ」を参照してください。
各テンプレートは、次のようにal
パラメータセクションでパラメータを宣言する必要があります。
{
...
"parameters": {
"al": {
"type": "object"
}
},
...
}
<!--NeedCopy-->
テンプレートはより多くのパラメータを宣言できますが、パラメータはすべてデフォルト値でなければなりません。そうでなければ、App Layering は彼らに価値を提供しません。これは、utcNow
など、パラメーターのデフォルト値セクションでのみ使用できる関数を使用する場合に役立ちます。
出力
すべての ARM テンプレートには出力があります。Azure Deployments コネクタを使用すると、テンプレート出力を使用して次のデプロイに情報を渡すことができます。また、一部のデフォルト動作をオーバーライドするためにも使用できます。
デプロイの出力は、al
テンプレートパラメータのinput
プロパティを使用して次のデプロイに渡されます。
たとえば、 キャッシュディスクデプロイメントに次のような出力があるとします 。
{
...
"outputs": {
"generation": {
"type": "string",
"value": "[variables('generation')]"
},
"name": {
"type": "string",
"value": "[variables('name')]"
},
}
...
}
<!--NeedCopy-->
ブートイメージデプロイメントは次の入力を受け取ります 。
{
"input":
{
"type": "BootImage",
"source": {
"generation": "V2",
"name": "MyCoolDiskName"
}
},
"context": {
...
}
}
<!--NeedCopy-->
input
オブジェクトのsource
プロパティには、キャッシュディスクデプロイテンプレートで指定された各出力のプロパティがあることに注意してください 。各出力の生成元は、デプロイのタイプによって異なります。
デプロイタイプの詳細
デプロイの種類ごとに入出力のセットが異なり、App Layering 操作の動作が変わる可能性があります。これらのデプロイメント固有の詳細は、このセクションで説明されています。
これらすべての概念を使用する実際の例については、「 スターターテンプレート」を参照してください。
キャッシュディスク
キャッシュディスクデプロイメントでは、マネージドディスクリソースを作成する必要があります。オプションで、ディスクに加えて他のリソースを作成できます。App Layering アプライアンスには、SAS トークン(アプライアンスによって生成された)を使用してディスクに書き込む権限が必要です。App Layering コンポジットエンジンを含むブートイメージは、作成後にディスクにアップロードされます。
キャッシュディスク要件
- 管理対象ディスクリソースを作成する必要があります
- 管理ディスクの
createOption
を"Upload"
に設定する必要があります - 管理ディスクは、
uploadSizeBytes
は"[parameters('al').input.uploadSize]"
のように入力で指定されたuploadSize
に設定する必要があります。 - App Layering アプライアンスは SAS トークンを使用して管理ディスクに書き込める必要があります
{
...
"resources": [
{
"type": "Microsoft.Compute/disks",
...
"properties": {
...
"creationData": {
"createOption": "Upload",
"uploadSizeBytes": "[parameters('al').input.uploadSize]"
}
...
}
}
]
...
}
<!--NeedCopy-->
キャッシュディスク入力
入力オブジェクトには、size
およびuploadSize
プロパティが含まれます。このオブジェクトには、別のデプロイメントからの出力は含まれません。
キャッシュディスク出力
デプロイの出力は、 ブートイメージデプロイメントが指定されている場合 、そのデプロイに渡されます。それ以外の場合は、 マシンデプロイメントに渡されます 。
diskId
という名前の出力を指定して、App Layering にどのディスクを使用するかを明示的に伝えることができます。diskId
出力を指定しない場合、App Layering は自動的に出力を追加し、デプロイによって作成された最初の管理対象ディスクリソースのリソース ID に設定します。diskId
で指定されたディスクには、App Layering コンポジットエンジンのブートイメージがアップロードされています。
ブートイメージ
このデプロイでは、 キャッシュディスクデプロイによって作成された管理ディスクからリソースが作成されます 。作成するリソースの種類に関する厳しい要件はありません。ただし、仮想マシンの作成時に OS ディスクのソースとして使用できるリソース (コンピュートギャラリーのイメージバージョンなど) を作成する必要があります。
ブートイメージディスク要件
- 入力として渡された ID のディスクと同じ内容の VM の OS ディスクを作成するために使用できるリソースを作成する必要があります。
例として、入力diskId
をソースとして使用するコンピュートギャラリーの画像バージョン:
{
...
"resources": [
{
"type": "Microsoft.Compute/galleries/images/versions",
...
"properties": {
...
"storageProfile": {
"osDiskImage": {
"source": {
"id": "[parameters('al').input.source.diskId]"
}
}
}
...
}
}
]
...
}
<!--NeedCopy-->
ブートイメージ入力
入力オブジェクトにはsource
プロパティが含まれます 。source
は、キャッシュディスクデプロイメントの出力を表し 、各出力のプロパティが指定されています。作成するリソースのソースのdiskId
プロパティを使用してください。
ブートイメージ出力
ブートイメージデプロイの出力は 、 マシンデプロイに渡されます 。特別な出力や必要な出力はありません。ただし、作成したリソースから VM を作成するために必要なデータ(リソース ID など)を含める必要があります。
マシン
マシンデプロイでは 、仮想マシンリソースを作成する必要があります。仮想マシンには、 コンポジットマシンのファイアウォールポート内部接続に従って、App Layering アプライアンスにアクセスできるネットワークに接続し、その逆も接続できるネットワークに接続する必要があります。
重要:
キャッシュディスクのデプロイで作成されたディスクを仮想マシンに接続しないでください 。 キャッシュディスクは共有リソースであり 、読み取り専用と見なされます。 ブートイメージデプロイメントを使用しない場合は 、ディスクのコピーを作成して代わりに添付してください。
マシン要件
- 仮想マシンリソースを作成する必要があります
- 仮想マシンは、App Layering アプライアンスとの通信が可能なネットワークに接続されている必要があります。
- 仮想マシンの OS ディスクは、 **ブートイメージまたはキャッシュディスクリソースをソースとして使用して作成する必要があります** 。
- 仮想マシンの OS ディスクサイズを
"[parameters('al').input.disk.size]"
に設定する必要があります - 仮想マシンの
userData
プロパティを"[parameters('al').input.vm.userData]"
に設定する必要があります
{
...
"resources": [
{
"type": "Microsoft.Compute/disks",
"name": "[variables('diskName')]",
...
"properties": {
...
"creationData": {
"createOption": "Copy",
"sourceResourceId": "[parameters('al').input.disk.image.diskId]"
},
"diskSizeGB": "[parameters('al').input.disk.size]",
...
}
},
{
"type": "Microsoft.Compute/virtualMachines",
...
"dependsOn": [
"[resourceId('Microsoft.Compute/disks', variables('diskName'))]"
],
...
"properties": {
...
"storageProfile": {
"osDisk": {
...
"createOption": "Attach",
"managedDisk": {
"id": "[resourceId('Microsoft.Compute/disks', variables('diskName'))]"
}
},
"dataDisks": []
},
...
"userData": "[parameters('al').input.vm.userData]"
...
}
}
]
...
}
<!--NeedCopy-->
マシン入力
入力オブジェクトには、disk
およびvm
プロパティが含まれます。
disk.image
プロパティには、 ブートイメージデプロイメントからの出力が指定されている場合 、その出力が含まれます。それ以外の場合は、 キャッシュディスクデプロイメントの出力が含まれます 。disk.size
プロパティには、ディスクのサイズが GB 単位で格納されます。
vm.userData
プロパティには、作成した仮想マシンに割り当てる必要があるユーザーデータが含まれています。
マシン出力
マシン展開の出力は 、 レイヤー化されたイメージ展開が指定されている場合 、その展開に渡されます。 Layered Image デプロイを使用している場合は、 Layered Image デプロイで参照できるように、出力に VM または OS ディスクの ID を含める必要があります。
machineId
という名前の出力を指定して、どの仮想マシンを使用するかをApp Layering に明示的に伝えることができます。machineId
出力を指定しない場合、App Layering は自動的に出力を追加し、デプロイによって作成された最初の仮想マシンリソースのリソース ID に設定します。
ipAddress
という名前の出力を指定して、マシンとの通信にどの IP アドレスを使用するかをApp Layering に明示的に伝えることができます。ipAddress
出力を指定しない場合、App Layering は仮想マシンリソースに接続されたプライマリネットワークカードのプライマリプライベートアドレスを使用します。
message
という名前の出力を指定して、App Layering UIのイメージ公開タスクの最終ステータスおよびレイヤー作成タスクのアクション必須ステータスに追加されるメッセージを提供できます。このメッセージは、 レイヤー化されたイメージの展開が指定されていない場合のイメージ公開タスクの最終ステータスでのみ使用されます 。
-
マシンスターターテンプレートは、
message
出力パラメーターを Azure ポータルのマシンへのリンクに設定します。
レイヤードイメージ
Layered Image デプロイでは、 仮想マシンまたはマシンデプロイによって作成された他のリソースからリソースを作成します 。作成するリソースの種類に関する厳しい要件はありません。ただし、マシン作成サービス (MCS) などのProvisioning サービスへの入力として使用できるリソースが作成されます。コンピュートギャラリーの画像リソースはその良い例です。
レイヤードイメージディスク要件
- Provisioning サービスが仮想マシンを作成するために使用できるリソースを作成します。
例として、次のコードブロックは、入力diskId
をソースとして使用してコンピュートギャラリーの画像バージョンを作成します。これは、 マシンのデプロイに 、マシンのOSディスクのIDに設定されたdiskId
という名前の出力が含まれていることを前提としています。
{
...
"resources": [
{
"type": "Microsoft.Compute/galleries/images",
"name": "[format('{0}/{1}', variables('galleryName'), variables('name'))]",
...
"resources": [
{
"type": "versions",
...
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('name'))]"
],
...
"properties": {
...
"storageProfile": {
"osDiskImage": {
"source": {
"id": "[parameters('al').input.source.diskId]"
}
}
}
...
}
}
]
}
],
...
}
<!--NeedCopy-->
レイヤード画像入力
入力オブジェクトには、source
およびdiskName
プロパティが含まれます。source
は、 マシンデプロイメントの出力を表し 、各出力のプロパティが指定されています。diskName
プロパティは、App Layering イメージテンプレートで指定されたディスクの名前です。
レイヤードイメージ出力
デプロイメントの出力は、他のデプロイメントには渡されません。ただし、 message
という名前の出力を指定すると、App Layering UI のイメージ公開タスクの最終ステータスにメッセージを追加できます。