Megosztás a következőn keresztül:


Kontextusváltás az Azure Automationben

A környezetváltás az, amikor az egyik folyamat környezete egy másik folyamatban módosítja a környezetet. Az Azure-környezet az Azure PowerShell-parancsmagok célját meghatározó adatok halmaza. A környezet a következő tulajdonságokból áll:

Property Description
Név A környezet neve.
Számla Az Azure-ral folytatott kommunikáció hitelesítéséhez használt felhasználónév vagy szolgáltatásnév.
Environment Az Azure globális vagy egy nemzeti Azure-felhőt jelöl, például az Azure Governmentt. Megadhatja egy hibrid felhőplatformot is, például az Azure Stacket.
Subscription A kezelni kívánt erőforrásokat tartalmazó Azure-előfizetést jelöli.
Tenant A Microsoft Entra ID dedikált és megbízható példánya, amely egyetlen szervezetet jelöl.
Hitelesítő adatok Az Azure által a személyazonosság ellenőrzéséhez és az Azure-beli erőforrásokhoz való hozzáférés engedélyezésének megerősítéséhez használt információk.

Amikor egy olyan fiók jelentkezik be, amely több előfizetéshez is hozzáfér, az előfizetések bármelyike hozzáadható a felhasználó környezetéhez. A megfelelő előfizetés garantálásához deklarálnia kell a csatlakozáskor. Használja például a következőt Add-AzAccount -Credential $Cred -subscription 'cd4dxxxx-xxxx-xxxx-xxxx-xxxxxxxx9749': . Problémák merülhetnek fel azonban, ha az egyik előfizetést kezelő runbookok ugyanabban a tesztkörnyezeti folyamatban futnak, mint a többi runbook, amelyek ugyanabból az Automation-fiókból egy másik előfizetés erőforrásait kezelik. Az egyik runbook által végrehajtott környezet módosítása hatással lehet a többi runbookra az alapértelmezett környezet használatával. Mivel a környezet olyan információkat tartalmaz, mint a használni kívánt hitelesítő adatok és a megcélzott előfizetés, a parancsmagok helytelen előfizetést célozhatnak meg, ami vagy engedélyek hibáit eredményezheti not found . Ezt a problémát környezetváltásnak nevezzük.

Azure-környezetek kezelése

Annak érdekében, hogy a runbookok ne fussanak a nem megfelelő előfizetésben lévő erőforrásokon, tekintse át az alábbi javaslatokat:

  1. Tiltsa le a tesztkörnyezet környezetének mentését az Automation-runbookban az egyes runbookok elején található alábbi paranccsal: Disable-AzContextAutosave -Scope Process.
  2. Az Azure PowerShell-parancsmagok támogatják a paramétert -DefaultProfile . Ez a paraméter az összes Az- és Azure Resource Manager- (AzureRM-) parancsmaghoz hozzáadva több szkript futtatását támogatja ugyanabban a folyamatban, így minden parancsmaghoz megadhatja, hogy melyik környezet legyen használva. Mentse a környezetobjektumot a runbookban, amikor létrejött, és minden alkalommal, amikor módosul. Ezután hivatkozzon rá minden olyan hívásban, amely az Az vagy az AzureRM parancsmaggal történt. For example, $AzureContext = Set-AzContext -SubscriptionId $subID.
  3. Adja át a környezeti objektumot például Get-AzVM -ResourceGroupName "myGroup" -DefaultProfile $AzureContexta PowerShell-parancsmagnak.

Íme egy PowerShell-runbook kódrészlete, amely egy rendszer által hozzárendelt felügyelt identitást használ a környezetváltás elkerülésére vonatkozó javaslatok alapján.

# Ensures you do not inherit an AzContext in your runbook
Disable-AzContextAutosave -Scope Process

# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context

# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

# Pass context object - even though the context had just been set
# This is the step that guarantees the context will not be switched.
Get-AzVM -ResourceGroupName "resourceGroupName" -DefaultProfile $AzureContext | Select Name

Lehetséges tünetek

Bár előfordulhat, hogy nem tapasztal problémát, ha nem követi ezeket a javaslatokat, a lehetőség létezik. A helyzet hátterében az időzítés áll; attól függ, hogy az egyes runbookok mit csinálnak abban az időpontban, amikor a másik runbook átváltja a környezetét. Íme néhány lehetséges hibaüzenet. Ezeket a hibaüzeneteket azonban a környezeten kívüli váltási feltételek okozhatják.

The subscription named <subscription name> cannot be found.

Get-AzVM : The client '<clientid>' with object id '<objectid>' does not have authorization to perform action 'Microsoft.Compute/virtualMachines/read' over scope '/subscriptions/<subcriptionIdOfSubscriptionWichDoesntContainTheVM>/resourceGroups/REsourceGroupName/providers/Microsoft.Compute/virtualMachines/VMName '.
   ErrorCode: AuthorizationFailed
   StatusCode: 403
   ReasonPhrase: Forbidden Operation
   ID : <AGuidRepresentingTheOperation> At line:51 char:7 + $vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $UNBV... +
Get-AzureRmResource : Resource group "SomeResourceGroupName" could not be found.
... resources = Get-AzResource -ResourceGroupName $group.ResourceGro ...
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzResource], CloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResourceCmdlet

Következő lépések