1. ホーム
  2. azure

[解決済み] New-AzureRmResourceGroupDeployment コマンドレットで追加のパラメータを渡す方法

2022-02-08 12:59:56

質問

New-AzureRmResourceGroupDeployment コマンドレットを使用して VM を作成するための powershell スクリプトを作成しています。

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

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

私の要件は、このスクリプトが実行されるたびに、VMNameの数字を増やさなければならないということです。例えば、VM Nameが現在 VMName1 にする必要があります。 VMName2 を使用すると、次回スクリプトを実行したときに 同様に VMName3 を実行すると、そのスクリプトは次回に実行されます。そのため virtualMachineName パラメータはハードコードされているため、現在はこのようなことは起こりません。どうにかして virtualMachineName を、json ファイルから取得するのではなく、スクリプト自体のパラメータとして使用します。

何かご指導いただければ幸いです。

どのように解決するのですか?

これは間違いなくできますし、幸いなことに方法も一握りです。

  1. インラインでパラメータを渡す . に書いてあります。 Azure PowerShell ドキュメント for Templates インラインパラメータをローカルパラメータファイルと共に使用することができ、インラインパラメータが優先されることを示します。該当する段落です。

    <ブロッククオート

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

    これは、VM Nameパラメータを明示的に制御することができるため価値がありますが、インラインパラメータを渡すかどうかは呼び出し側(この場合はあなた)次第です。これは ローカル パラメータファイルであり、リモートファイル (すなわち -TemplateParameterFile であって -TemplateParameterUri ). 結果として、次のようなコマンドになります。

    New-AzureRmResoruceGroupDeployment -Name VmDeployment `
      -TemplateFile C:\template\template.json `
      -TemplateParameterFile C:\template\parameters.json `
      -virtualMachineName VMName42
    
    
  2. オリジナルを変更する パラメータ.json . PowerShell/Python/Favorite-scripting-言語を使って、以下のようなパースを行うことができます。 paramters.json で、VM Nameパラメータを見つけ、整数のサフィックスを見つけ、それをインクリメントして、新しいバージョンでファイルを上書きします。これには、インラインパラメータを渡すことを覚えておく必要がないという利点がありますし、バージョン番号はすでに パラメータ.json . これは1つの大きな欠点があり、元のJSONを変更してしまうので、危険な場合があります。

  3. コピー パラメータ.json を編集し、一時的にコピーする . をコピーするスクリプトを書くことができます。 パラメータ.json を別の一時的なJSONファイルにコピーし、オプション2のようにコピー中にVM Nameパラメータをインクリメントします。この一時ファイルを New-AzureRmResourceGroupDeployment . これは、元の パラメータ.json ファイルを作成する必要がありますが、バージョン番号をどこかで追跡する必要があります (たとえば、別のローカルファイル、コマンドラインパラメータ、環境変数など)。

シンプルにするために、私はオプション1をお勧めします。これはすでにすぐに使えるし、外部スクリプトを必要としない。