Azure Automationで配列の変数を扱う
はじめに
Azure Automationで、事前に変数を指定してRunbook内で使用することができます。
複合型を扱う場合は癖がありましたので、今回は配列を例にして記事にしました。
概要
配列型に限らず、複合型の変数を作成する際は以下のようになるようです。
- PowerShellから作成する場合
- 作成時には
New-AzAutomationVariable
を使用 - Runbook内での取得時は
Get-AutomationVariable
を使用- オブジェクトの型は
Newtonsoft.Json.Linq
として取得
- オブジェクトの型は
- 作成時には
- ポータルから作成する場合
- 作成時には、Json文字列などにして文字列型で保存
- 複合型はポータルからは作成できません
- Runbook内では
Get-AutomationVariable
で取得した後、文字列をコンバート
- 作成時には、Json文字列などにして文字列型で保存
参考
やってみた
環境は前回の記事で作成したものをそのまま使いました。Runbookは今回専用に新規作成しています。
PowerShellから作成し、Runbook内で取得
以下を参考にしました。
コマンドはAzure Cloud Shellで実行しました。
# 配列の宣言
$testArray = @( "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderName}/ {resourceType}/{resourceName1}",
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderName}/ {resourceType}/{resourceName2}",
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderName}/ {resourceType}/{resourceName3}"
)
# 確認用コマンド
$testArray | ConvertTo-Json
# パラメータを変数に格納
$rgName = "rg-test-automation"
$autoAccoName = "autoacco-test"
$varName = "testvar"
# 変数の作成
New-AzAutomationVariable -ResourceGroupName $rgName `
-AutomationAccountName $autoAccoName `
-Name $varName `
-Encrypted $false `
-Value $testArray
コマンドの詳細は以下にあります。
コンソールから確認できます
次はRunbookの中に、取得するコマンドを記載します。Azureアカウントに接続しなくても取得できました。
注意点として、配列などの複合型は Newtonsoft.Json.Linq として帰ってきます。
# 変数取得
$retTestVar = Get-AutomationVariable -Name 'testvar'
# 中身確認。ConvertTo-Json では中身が見れない
$retTestVar.ToString()
ポータルから編集すると、GUIでコマンドが指定できます。
結果は以下のようになります。
ポータルから作成し、Runbook内で取得
ポータルから指定する際の操作は、以下のページに記載されています。
しかし変数をポータルから指定する際は、配列などの複合型は指定できません。
そのため今回は、JSON文字列を指定してRunbook内部で配列型に変換するようにします。
JSON文字列は以下を指定しました。
[
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderName}/ {resourceType}/{resourceName1}",
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderName}/ {resourceType}/{resourceName2}",
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderName}/ {resourceType}/{resourceName3}"
]
次はRunbookの記述です。中で取得し変換していきます。
# 変数取得し変換
$retTestVar = Get-AutomationVariable -Name 'testvar2' | ConvertFrom-Json
# 中身確認
$retTestVar
$retTestVar.GetType()
$retTestVar | ConvertTo-Json
以下のような結果を得られました。
指定できる文字列のサイズ
以下のページに制限が記載されており、"変数の値フィールドの最大文字数"として 1,048,576 とされています。結構な大きさの配列を指定できそうです。
おわりに
今回はAzure Automationで複合型の変数を指定する方法の一案を記事にしました。
Runbook内に情報を渡す手段として変数は大変便利かと思います。そのためいろんな型を指定するにはどうすればよいのか考えてみました。
この記事がどなたかのお役に立ちましたら幸いです。
Discussion