ARM テンプレートの作成
このセクションは、ARM テンプレートに精通しているユーザーを対象としています。App Layering Azure Deployments コネクター用のテンプレート作成に関する詳細情報を提供します。一般的な ARM テンプレート作成情報については、Microsoft ドキュメントを参照してください。
入力
すべてのデプロイタイプには、al という名前のオブジェクトであるパラメーターが 1 つ渡されます。このオブジェクトには、input と context の 2 つのプロパティがあります。input プロパティは各デプロイタイプに固有のオブジェクトであり、そのプロパティはデプロイタイプによって異なります。context プロパティはすべてのデプロイタイプで同じです。これには、現在のデプロイに関連付けられている App Layering タスク、アイテム (レイヤーまたはイメージテンプレート)、およびコネクター構成に関するデータが含まれています。パラメーターオブジェクトの詳細については、「Azure Deployments Template Parameter」を参照してください。
各テンプレートは、そのパラメーターセクションで 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 コンポジティングエンジンブートイメージがアップロードされます。
ブートイメージ
このデプロイは、キャッシュディスクのデプロイによって作成されたマネージドディスクからリソースを作成します。作成されるリソースのタイプに関する厳密な要件はありません。ただし、VM を作成する際に 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 アプライアンスに到達できるネットワークに接続されている必要があり、その逆も同様です。詳細については、「Firewall ports internal connections for Compositing machine」を参照してください。
重要:
キャッシュディスクのデプロイによって作成されたディスクを仮想マシンに接続しないでください。キャッシュディスクは共有リソースであり、読み取り専用と見なされます。ブートイメージのデプロイを使用しない場合は、ディスクのコピーを作成して代わりに接続してください。
マシンの要件
- 仮想マシンリソースを作成する必要があります
- 仮想マシンは、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 プロパティには、作成された仮想マシンに割り当てる必要があるユーザーデータが含まれています。
マシンの出力
マシンのデプロイの出力は、指定されている場合はレイヤードイメージのデプロイに渡されます。レイヤードイメージのデプロイを使用している場合は、レイヤードイメージのデプロイから参照できるように、VM または OS ディスクの ID を出力に含める必要があります。
machineId という名前の出力を指定して、App Layering に使用する仮想マシンを明示的に指示できます。machineId 出力が指定されていない場合、App Layering は自動的にそれを追加し、デプロイによって作成された最初の仮想マシンリソースの ID に設定します。
ipAddress という名前の出力を指定して、App Layering にマシンとの通信に使用する IP アドレスを明示的に指示できます。ipAddress 出力が指定されていない場合、App Layering は仮想マシンリソースに接続されているプライマリネットワークカードのプライマリプライベートアドレスを使用します。
message という名前の出力を指定して、イメージ公開タスクの最終ステータスと、App Layering UI のレイヤー作成タスクの必要なアクションステータスに追加されるメッセージを提供できます。このメッセージは、レイヤードイメージのデプロイが指定されていない場合にのみ、イメージ公開タスクの最終ステータスで使用されます。
-
マシン スターターテンプレートは、
message出力パラメーターを Azure ポータルのマシンへのリンクに設定します
レイヤードイメージ
レイヤードイメージのデプロイは、マシンのデプロイによって作成された仮想マシンまたは他のリソースからリソースを作成します。作成されるリソースのタイプに関する厳密な要件はありません。ただし、Machine Creation Services™ (MCS) などのプロビジョニングサービスへの入力として使用できるリソースを作成します。コンピューティングギャラリーイメージリソースが良い例です。
レイヤードイメージディスクの要件
- プロビジョニングサービスが仮想マシンを作成するために使用できるリソースを作成します
例として、次のコードブロックは、入力 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 のイメージ公開タスクの最終ステータスに追加されるメッセージを提供できます。