6

以下のように、New-AzureRmResourceGroupDeployment コマンドレットを使用して VM を作成するための PowerShell スクリプトを作成しています。

New-AzureRmResourceGroupDeployment -Name VmDeployment  `
  -TemplateFile C:\template\template.json `
  -TemplateParameterFile C:\template\parameters.json

これは、VM の作成に使用されます。には、ハードコードされた などのparameters.jsonパラメータがいくつかあります。 現在、これらのスクリプトを自動化しようとしています。つまり、何らかの条件が満たされるたびに、ツールから独自に実行されます。 virtualMachineNamenetworkInterfaceName

ここでの私の要件は、このスクリプトが実行されるたびに、 VMName の数を増やす必要があることです。VM 名が今VMName1だとするとVMName2、次にスクリプトを実行するときはそうである必要があります。VMName3次回スクリプトを実行するときも同様です。パラメータはハードコードされているため、virtualMachineName現在は発生していません。とにかくvirtualMachineName、jsonファイルから取得するのではなく、スクリプト自体にパラメーターとして渡すことができますか.

どんなガイダンスも高く評価されています.Thanks!

4

1 に答える 1

11

間違いなくこれを行うことができます。幸いなことに、いくつかの方法もあります。

  1. インライン パラメータを渡します。テンプレート用のAzure PowerShell ドキュメントには、ローカル パラメーター ファイルでインライン パラメーターを使用でき、インライン パラメーターが優先されることが記載されています。関連段落:

同じ展開操作で、インライン パラメーターとローカル パラメーター ファイルを使用できます。たとえば、ローカル パラメーター ファイルでいくつかの値を指定し、デプロイ中に他の値をインラインで追加できます。ローカル パラメーター ファイルとインラインの両方でパラメーターの値を指定すると、インライン値が優先されます。

これは、VM 名パラメーターを明示的に制御できるため価値がありますが、インライン パラメーターを渡すのは呼び出し元 (この場合はユーザー) 次第です。これはローカルパラメータ ファイルでのみ機能し、リモート ファイルでは機能しないことに注意してください(つまり-TemplateParameterFile、 ではありません-TemplateParameterUri)。結果のコマンドは次のようになります。

    New-AzureRmResourceGroupDeployment -Name VmDeployment `
      -TemplateFile C:\template\template.json `
      -TemplateParameterFile C:\template\parameters.json `
      -virtualMachineName VMName42
  1. 元のparameters.json を変更します。PowerShell/Python/Favorite-scripting-language を記述して、 paramters.jsonを解析し、VM Name パラメーターを見つけ、整数のサフィックスを見つけてインクリメントし、新しいバージョンでファイルを上書きできます。これには、インライン パラメーターを渡すことを覚えておく必要がないという利点があり、既にparameters.jsonに格納されているため、バージョン番号を追跡する必要がありません。これには大きな欠点が 1 つあります。元の JSON が変更されるため、危険な場合があります。

  2. parameters.jsonをコピーし、一時コピーを変更しますparameters.jsonを別の一時 JSON ファイルにコピーするスクリプトを記述し、オプション 2 と同様に、コピー中に VM 名パラメーターをインクリメントできます。この一時ファイルを に渡しますNew-AzureRmResourceGroupDeploymentこれには、元のparameters.jsonファイルを変更しないという利点がありますが、どこかでバージョン番号を追跡する必要があります (たとえば、別のローカル ファイル、コマンド ライン パラメーター、環境変数など)。

簡単にするために、オプション 1 をお勧めします。このオプションはすぐに使用でき、外部スクリプトは必要ありません。

于 2018-08-28T17:17:28.173 に答える