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

1 minute read

質問

ARMテンプレートデプロイによってAzure Policyの定義を作成しようと考えています。
ポリシー定義内にパラメータや関数を利用していると構文エラーとなりテンプレートデプロイに失敗してしまいます。
どのようにすればこのようなポリシー定義をARMテンプレートを利用してデプロイできますか?

回答

パラメータや関数の”[]”をエスケープする必要があります。
関数を利用した文字列の先頭に”[“を追加してエスケープ処理をしてください。

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

解説

ポリシー定義内でパラメータやconcat関数を利用するときには、”[]”を利用する必要があります。
例えば下記のドキュメントをご確認頂くと、concatやparametersの利用のために”[]”を利用している様が
改めてご確認頂けるかと思います。

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

"if": {
    "not": {
        "field": "[concat('tags[', parameters('tagName'), ']')]",
        "equals": "[parameters('tagValue')]"
    }
},

この、「[concat…)]」の部分や、「[parameters….)]」の部分がARMテンプレートデプロイ用の式であると解釈されてしまいます。
これはポリシー定義用のものであり、ARMテンプレートに解釈されるタイミングでは通常の文字列として認識させたいため
上記の例の場合には下記の様にエスケープ文字を利用します。
“[[concat”や”[[parameters”と、先頭に”[“が追加されている部分にご注目下さい。

"if": {
    "not": {
        "field": "[[concat('tags[', parameters('tagName'), ']')]",
        "equals": "[[parameters('tagValue')]"
    }
},

参考ドキュメント






2021 年 6 月 4 日時点の内容となります。
本記事の内容は予告なく変更される場合がございますので予めご了承ください。



タグ:

更新日時: