ARM テンプレートの作成
このセクションは、ARM テンプレートに精通しているユーザーを対象としています。App Layering Azure Deployments コネクター用のテンプレート作成に関する詳細情報を提供します。一般的な 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 プロパティが含まれます。このオブジェクトには、別の展開からの出力は含まれません。
キャッシュディスクの出力
展開の出力は、指定されている場合はブートイメージ展開に渡されます。そうでない場合は、マシン展開に渡されます。
App Layering に使用するディスクを明示的に指示するために、diskId という名前の出力を指定できます。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 アプライアンスに到達でき、またその逆も可能なネットワークに接続されている必要があります。
重要:
キャッシュディスク展開によって作成されたディスクを仮想マシンに接続しないでください。キャッシュディスクは共有リソースであり、読み取り専用と見なされます。ブートイメージ展開を使用しない場合は、ディスクのコピーを作成して代わりに接続してください。
マシンの要件
- 仮想マシンリソースを作成
- 仮想マシンが 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 を含めて、レイヤー化されたイメージ展開から参照できるようにする必要があります。
App Layering に使用する仮想マシンを明示的に指示するために、machineId という名前の出力を指定できます。machineId 出力が指定されていない場合、App Layering は自動的にそれを追加し、展開によって作成された最初の仮想マシンリソースの ID に設定します。
App Layering にマシンと通信するために使用する IP アドレスを明示的に指示するために、ipAddress という名前の出力を指定できます。ipAddress 出力が指定されていない場合、App Layering は仮想マシンリソースに接続されているプライマリネットワークカードのプライマリプライベートアドレスを使用します。
App Layering UI でイメージ公開タスクの最終ステータスとレイヤー作成タスクの必要なアクションステータスに追加されるメッセージを提供するために、message という名前の出力を指定できます。このメッセージは、レイヤー化されたイメージ展開が指定されていない場合にのみ、イメージ公開タスクの最終ステータスで使用されます。
-
マシン スターターテンプレートは、
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 イメージテンプレートで指定されたディスクの名前です。
レイヤー化されたイメージの出力
展開の出力は、他の展開には渡されません。ただし、App Layering UI でイメージ公開タスクの最終ステータスに追加されるメッセージを提供するために、message という名前の出力を指定できます。