パラメータや関数を含むポリシー定義をARMテンプレートデプロイするときの注意点

Published: feedback 共有

ARMテンプレートデプロイによってAzure Policyの定義を作成しようと考えています。

ポリシー定義内にパラメータや関数を利用していると構文エラーとなりテンプレートデプロイに失敗してしまいます。

どのようにすればこのようなポリシー定義をARMテンプレートを利用してデプロイできますか?

回答

パラメータや関数の”[]”をエスケープする必要があります。

関数を利用した文字列の先頭に”[“を追加してエスケープ処理をしてください。


ARM テンプレートの構文と式 - エスケープ文字

解説

ポリシー定義内でパラメータやconcat関数を利用するときには、”[]”を利用する必要があります。

例えば下記のドキュメントをご確認頂くと、concatやparametersの利用のために”[]”を利用している様が

改めてご確認頂けるかと思います。


Azure Policy パターン: パラメーター

1
2
3
4
5
6
"if": {
"not": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"equals": "[parameters('tagValue')]"
}
},

この、「[concat…)]」の部分や、「[parameters….)]」の部分がARMテンプレートデプロイ用の式であると解釈されてしまいます。

これはポリシー定義用のものであり、ARMテンプレートに解釈されるタイミングでは通常の文字列として認識させたいため

上記の例の場合には下記の様にエスケープ文字を利用します。

“[[concat”や”[[parameters”と、先頭に”[“が追加されている部分にご注目下さい。

1
2
3
4
5
6
"if": {
"not": {
"field": "[[concat('tags[', parameters('tagName'), ']')]",
"equals": "[[parameters('tagValue')]"
}
},

参考ドキュメント






2021 年 6 月 4 日時点の内容となります。

本記事の内容は予告なく変更される場合がございますので予めご了承ください。



※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。