📙

Azure Automationで配列の変数を扱う

2025/02/16に公開

はじめに

Azure Automationで、事前に変数を指定してRunbook内で使用することができます。
複合型を扱う場合は癖がありましたので、今回は配列を例にして記事にしました。

概要

配列型に限らず、複合型の変数を作成する際は以下のようになるようです。

  • PowerShellから作成する場合
    • 作成時にはNew-AzAutomationVariableを使用
    • Runbook内での取得時はGet-AutomationVariableを使用
      • オブジェクトの型はNewtonsoft.Json.Linqとして取得
  • ポータルから作成する場合
    • 作成時には、Json文字列などにして文字列型で保存
      • 複合型はポータルからは作成できません
    • Runbook内ではGet-AutomationVariableで取得した後、文字列をコンバート

参考

https://learn.microsoft.com/ja-jp/azure/automation/shared-resources/variables?tabs=azure-powershell

やってみた

環境は前回の記事で作成したものをそのまま使いました。Runbookは今回専用に新規作成しています。
https://zenn.dev/arbr/articles/19994b62d63ea3

PowerShellから作成し、Runbook内で取得

以下を参考にしました。

https://learn.microsoft.com/ja-jp/azure/automation/shared-resources/variables?tabs=azure-powershell#create-and-get-a-variable-in-windows-powershell

コマンドは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

コマンドの詳細は以下にあります。
https://github.com/Azure/azure-powershell/blob/main/src/Automation/Automation/help/New-AzAutomationVariable.md

コンソールから確認できます

次はRunbookの中に、取得するコマンドを記載します。Azureアカウントに接続しなくても取得できました。
注意点として、配列などの複合型は Newtonsoft.Json.Linq として帰ってきます。

# 変数取得
$retTestVar = Get-AutomationVariable -Name 'testvar'
# 中身確認。ConvertTo-Json では中身が見れない
$retTestVar.ToString() 

ポータルから編集すると、GUIでコマンドが指定できます。

結果は以下のようになります。

ポータルから作成し、Runbook内で取得

ポータルから指定する際の操作は、以下のページに記載されています。
https://learn.microsoft.com/ja-jp/azure/automation/shared-resources/variables?tabs=azure-powershell#create-and-get-a-variable-using-the-azure-portal

しかし変数をポータルから指定する際は、配列などの複合型は指定できません。

そのため今回は、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 とされています。結構な大きさの配列を指定できそうです。
https://learn.microsoft.com/ja-jp/azure/automation/automation-subscription-limits-faq#service-and-subscription-limits

おわりに

今回はAzure Automationで複合型の変数を指定する方法の一案を記事にしました。
Runbook内に情報を渡す手段として変数は大変便利かと思います。そのためいろんな型を指定するにはどうすればよいのか考えてみました。

この記事がどなたかのお役に立ちましたら幸いです。

Discussion