2017-05-12 2 views
0

私はAzure Resource Manager(ARM)テンプレートを作成していますが、うまくいかないという問題があります。私たちはいくつかの開発環境(サンドボックス、開発、プロダクションなど)を持っており、私が望むものを達成するための最善の方法を頭で覆そうとしています。ARM変数を使用してオブジェクト変数のフィールドを選択する

ビルドしている環境を特定するための環境パラメータを定義するパラメータファイルを入力します。たとえば、 "dev"環境用のものがあります(より多くのパラメータがありますが、これは関連性があります)。

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
     "environment": { 
      "value": "dev" 
     } 
    } 
} 

私は現在、私は環境に基づいて値を引き出すことができるようにしたいARMテンプレート、いくつかの変数の内側にありますが、私は私のARMテンプレートを構築するのに問題を抱えているとエラーメッセージが(ひどいですAzure CLIを使用して検証すると「不正な文字列」が表示され、ビルドエージェントがリソースを展開しようとすると「BadRequest」が表示されます。私はさらに後でテンプレート内のリソースを定義する際に使用するため、「envValue1」と「envValue2」の変数を定義するには、これらのフィールドを使用したい

"sampleObject": { 
      "sbx": { 
       "value1": true, 
       "value2": true 
      }, 
      "dev": { 
       "value1": true, 
       "value2": true 
      }, 
      "prd": { 
       "value1": false, 
       "value2": true 
      } 
} 

ので、私がしようとしていた:

私は次のように変数を定義している場合

"environmentParams": "[variables('sampleObject')[parameters('environment')]]", 
"envValue1": "[variables('environmentParams').value1]", 
"envValue2": "[variables('environmentParams').value2]" 

しかし、上記は機能していないように見えますが、私はこれが問題を引き起こす前にテンプレート内の他のすべてを使用しています。具体的に私はそれが私が前にオブジェクト変数の作品をつかむために"[variables('environmentParams').value1]" を使用している人々のいくつかの例を見つけることができます

"environmentParams": "[variables('sampleObject')[parameters('environment')]]" 

ラインだと思うが、私は前に行っているように私はparameters('environment)'作品に渡すことができれば、私は不確かですこの方法では何も見つけられません。

私は間違っていますか?オブジェクトの一部を取得するために環境パラメータを渡すことは可能ですか?私は以下を試してきましたが、これまでに何も働いていませんでした(Azure CLIを使用してリソースを作成するテスト)。

"[variables('sampleObject')[parameters('environment')]]" 
"[variables('sampleObject').[parameters('environment')]]" 

私がしようとしていることができない場合、人々はどのように複数の環境を管理しますか?彼らはすべてをパラメータファイルに置き換えてしまいますが、ARMテンプレートを見て環境間の違いを確認するのは難しいですか?

+0

これは完全にうまく見えます: '' environmentParams ': "[variables(' sampleObject ')[parameters(' environment ')]]"、 ' – 4c74356b41

答えて

3
{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
     "environment": { 
      "type": "String" 
     } 
    }, 
    "variables": { 
     "sampleObject": { 
      "sbx": { 
       "value1": true, 
       "value2": true 
      }, 
      "dev": { 
       "value1": true, 
       "value2": true 
      }, 
      "prd": { 
       "value1": false, 
       "value2": true 
      } 
     }, 
     "value": "[variables('sampleObject')[parameters('environment')]]", 
     "othervar": "[variables('value').value1]" 
    }, 
    "resources": [ ], 
    "outputs": { 
     "we": { 
      "type": "Bool", 
      "value": "[variables('value').value1]" 
     } 
    } 
} 

これは完全に問題なく動作しますが、ドット表記を使用してオブジェクトのプロパティに簡単にアクセスできます。このサンプルを使用できます。

しかし、あなたが行うことはできません。

"[variables('sampleObject').[parameters('environment')]]" 

ですから、プロパティにアクセスするための変数を使用している場合、ドットなし。

+0

正しい構文を確認していただきありがとうございます。私はこれが私が持っていた問題だと確信していましたが、それは別のものであることは明らかです。 –

関連する問題