Azure Automation で変数を管理する

変数アセットとは、Automation アカウント内のすべての Runbook と DSC 構成に使用できる値です。 それらの管理は、Azure portal または PowerShell を使用して行うか、Runbook または DSC 構成内で行うことができます。

Automation 変数は、次のシナリオで役立ちます。

  • 複数の Runbook または DSC 構成で値を共有する。

  • 同じ Runbook または DSC 構成の複数のジョブで値を共有する。

  • Runbook または DSC 構成によって使用される値を、ポータルまたは PowerShell コマンド ラインから管理する。 例としては、共通する構成アイテムのセット (VM 名の詳細なリスト、特定のリソース グループ、AD ドメイン名など) があります。

Azure Automation では、変数が保存されるので、Runbook または DSC 構成が失敗した場合でも使用できます。 この動作により、ある Runbook または DSC 構成で設定した値を、別の Runbook で使用したり、次の実行時に同じ Runbook または DSC 構成で使用したりすることができます。

Azure Automation では、暗号化された各変数を安全に保存します。 変数の作成時に、Azure Automation を使用して、セキュリティで保護された資産となるようにその変数の暗号化とストレージを指定できます。 変数を作成した後は、変数を再作成せずにその暗号化の状態を変更することはできません。 まだ暗号化されていない機密データが格納されている Automation アカウントの変数がある場合は、それらを削除し、暗号化された変数として再作成する必要があります。 Microsoft Defender for Cloud の推奨事項は、「Automation アカウント変数は、暗号化する必要がある」で説明されているように、すべての Azure Automation 変数を暗号化することです。 このセキュリティの推奨事項から除外する暗号化されていない変数がある場合は、「推奨事項とセキュリティ スコアからリソースを除外する」を参照して除外規則を作成してください。

Note

Azure Automation でセキュリティ保護される資産としては、資格情報、証明書、接続、暗号化された変数などがあります。 これらの資産は、各 Automation アカウント用に生成された一意のキーを使って暗号化され、Azure Automation に保存されます。 Azure Automation では、キーはシステムによって管理される Key Vault に格納されます。 セキュリティで保護された資産を保存する前に、Automation によって Key Vault からキーが読み込まれ、それを使用して資産が暗号化されます。

変数の型

Azure portal を使用して変数を作成する場合、変数値を入力するための適切なコントロールをポータルに表示できるように、ドロップダウン ボックスの一覧からデータ型を指定する必要があります。 Azure Automation で使用できる変数の型を次に示します。

  • String
  • Integer
  • DateTime
  • ブール型
  • Null

変数は、指定されているデータ型に限定されません。 別の型の値を指定する場合は、Windows PowerShell を使用して変数を設定する必要があります。 Not defined を指定した場合、変数の値は Null に設定されます。 Set-AzAutomationVariable コマンドレットまたは内部 Set-AutomationVariable コマンドレットを使用して値を設定する必要があります。 Set-AutomationVariable は、Azure sandbox 環境内または Windows Hybrid Runbook Worker 上での実行が意図された Runbook で使用します。

Azure portal を使用して、複合型の変数の値を作成したり変更したりすることはできません。 ただし、Windows PowerShell を使用すると、任意の型の値を指定できます。 複合型は、PSObject 型 PSCustomObject ではなく、複合オブジェクト型の Newtonsoft.Json.Linq.JProperty として取得されます。

配列またはハッシュ テーブルを作成し、それを変数に保存することによって、複数の値を 1 つの変数に格納することができます。

Note

VM 名の変数に使用できる文字数は最大 80 文字です。 リソース グループの変数には最大 90 文字まで使用できます。 「Azure リソースの名前付け規則と制限事項」を参照してください。

変数にアクセスするための PowerShell コマンドレット

PowerShell を使用して Automation 変数を作成および管理するためのコマンドレットを次の表に示します。 これらは、Az モジュールに付属しています。

コマンドレット 説明
Get-AzAutomationVariable 既存の変数の値を取得します。 値が単純型である場合、その同じ型が取得されます。 それが複合型の場合は、PSCustomObject 型が取得されます。 1
New-AzAutomationVariable 新しい変数を作成し、その値を設定します。
Remove-AzAutomationVariable 既存の変数を削除します。
Set-AzAutomationVariable 既存の変数の値を設定します。

1 暗号化された変数の値を取得するために、このコマンドレットを使用することはできません。 それを行う唯一の方法は、Runbook または DSC 構成で内部 Get-AutomationVariable コマンドレットを使用することです。 たとえば、暗号化された変数の値を表示するには、Runbook を作成して変数を取得し、それを出力ストリームに書き込むことができます。

$encryptvar = Get-AutomationVariable -Name TestVariable
Write-output "The encrypted value of the variable is: $encryptvar"

変数にアクセスするための内部コマンドレット

Runbook および DSC 構成内の変数にアクセスするための内部コマンドレットを次の表に示します。 これらのコマンドレットには、グローバル モジュール Orchestrator.AssetManagement.Cmdlets が付属しています。 詳細については、「内部コマンドレット」を参照してください。

内部コマンドレット 説明
Get-AutomationVariable 既存の変数の値を取得します。
Set-AutomationVariable 既存の変数の値を設定します。

Note

Runbook または DSC 構成で、Get-AutomationVariable コマンドレットの Name パラメーターに変数を使用することは避けてください。 変数を使用すると、デザイン時に、Runbook と Automation 変数との間の依存関係の検出が複雑になる可能性があります。

変数にアクセスするための Python 関数

Python 2 および 3 Runbook の変数にアクセスするには、次の表の関数を使用します。 Python 3 Runbook は現在プレビュー段階です。

Python 関数 説明
automationassets.get_automation_variable 既存の変数の値を取得します。
automationassets.set_automation_variable 既存の変数の値を設定します。

Note

資産関数にアクセスするには、お使いの Python Runbook の上部にある automationassets モジュールをインポートする必要があります。

変数を作成して取得する

Note

変数の暗号化を削除する場合は、変数を削除し、暗号化せずに再作成する必要があります。

Azure portal を使用して変数を作成して取得する

  1. [Automation アカウント] から、左側のペインで、[共有リソース][変数] を選択します。
  2. [変数] ページで [変数の追加] を選択します。
  3. [新しい変数] ページでオプションを設定してから、[作成] を選択して新しい変数を保存します。

Note

暗号化された変数を保存したら、ポータルでそれを表示することはできません。 更新のみ可能です。

Windows PowerShell で変数を作成して取得する

Runbook または DSC 構成では、New-AzAutomationVariable コマンドレットを使用して新しい変数を作成し、その初期値を設定します。 変数が暗号化されている場合、呼び出しで Encrypted パラメーターを使用する必要があります。 スクリプトでは、Get-AzAutomationVariable を使用して変数の値を取得できます。

Note

PowerShell スクリプトでは、暗号化された値を取得できません。 これを行う唯一の方法は、内部 Get-AutomationVariable コマンドレットを使用することです。

次の例は、文字列型の変数を作成してから、その値を返す方法を示しています。

$rgName = "ResourceGroup01"
$accountName = "MyAutomationAccount"
$variableValue = "My String"

New-AzAutomationVariable -ResourceGroupName "ResourceGroup01" 
-AutomationAccountName "MyAutomationAccount" -Name 'MyStringVariable' `
-Encrypted $false -Value 'My String'
$string = (Get-AzAutomationVariable -ResourceGroupName "ResourceGroup01" `
-AutomationAccountName "MyAutomationAccount" -Name 'MyStringVariable').Value

次の例は、複合型の変数を作成してから、そのプロパティを取得する方法を示しています。 ここでは、Get-AzVM のプロパティのサブセットを指定し、仮想マシン オブジェクトを使用しています。

$rgName = "ResourceGroup01"
$accountName = "MyAutomationAccount"

$vm = Get-AzVM -ResourceGroupName "ResourceGroup01" -Name "VM01" | Select Name, Location, Extensions
New-AzAutomationVariable -ResourceGroupName "ResourceGroup01" -AutomationAccountName "MyAutomationAccount" -Name "MyComplexVariable" -Encrypted $false -Value $vm

$vmValue = Get-AzAutomationVariable -ResourceGroupName "ResourceGroup01" `
-AutomationAccountName "MyAutomationAccount" -Name "MyComplexVariable"

$vmName = $vmValue.Value.Name
$vmTags = $vmValue.Value.Tags

テキスト形式の Runbook の例

次の例は、テキスト形式の Runbook で変数を設定し取得する方法を示しています。 このサンプルでは、numberOfIterations および numberOfRunnings という名前の整数変数と、sampleMessage という名前の文字列変数を作成することを想定しています。

$rgName = "ResourceGroup01"
$accountName = "MyAutomationAccount"

$numberOfIterations = Get-AutomationVariable -Name "numberOfIterations"
$numberOfRunnings = Get-AutomationVariable -Name "numberOfRunnings"
$sampleMessage = Get-AutomationVariable -Name "sampleMessage"

Write-Output "Runbook has been run $numberOfRunnings times."

for ($i = 1; $i -le $numberOfIterations; $i++) {
    Write-Output "$i`: $sampleMessage"
}
Set-AutomationVariable -Name numberOfRunnings -Value ($numberOfRunnings += 1)

グラフィカルな Runbook の例

グラフィカル Runbook では、Get-AutomationVariable または Set-AutomationVariable 内部コマンドレットのアクティビティを追加できます。 グラフィカル エディターの [ライブラリ] ペインで各変数を右クリックし、目的のアクティビティを選択するだけです。

Add variable to canvas

次の図は、グラフィカルな Runbook で変数を単純な値で更新するサンプル アクティビティを示しています。 この例では、Get-AzVM のアクティビティによって 1 つの Azure 仮想マシンが取得され、そのコンピューター名が既存の Automation の文字列型の変数に保存されます。 このコードでは出力に 1 つのオブジェクトのみが含まれると予期されるため、リンクがパイプラインとシーケンスのいずれであっても関係ありません。

Set simple variable

次のステップ