Üzembehelyezési szkriptek használata ARM-sablonokban

Megtudhatja, hogyan használhat üzembehelyezési szkripteket az Azure Resource Manager-sablonokban. Az erőforrással a deploymentScripts felhasználók szkripteket hajthatnak végre ARM-üzemelő példányokban, és áttekinthetik a végrehajtási eredményeket.

Tipp.

A Bicep használatát javasoljuk, mert ugyanazokkal a képességekkel rendelkezik, mint az ARM-sablonok, és a szintaxis használata egyszerűbb. További információ: Üzembe helyezési szkript.

Ezek a szkriptek olyan egyéni lépések végrehajtására használhatók, mint például:

  • Felhasználók hozzáadása egy címtárhoz.
  • Adatsík-műveleteket hajthat végre, például blobokat vagy magadatbázist másolhat.
  • Keresse meg és ellenőrizze a licenckulcsot.
  • Önaláírt tanúsítvány létrehozása.
  • Hozzon létre egy objektumot a Microsoft Entra-azonosítóban.
  • Ip-címblokkok keresése egyéni rendszerből.

Az üzembehelyezési szkript előnyei:

  • Könnyen kódelhető, használható és hibakeresésre használható. A kedvenc fejlesztői környezetekben üzembehelyezési szkripteket fejleszthet. A szkriptek beágyazhatók sablonokba vagy külső szkriptfájlokba.
  • Megadhatja a szkript nyelvét és platformát. Jelenleg az Azure PowerShell és az Azure CLI üzembehelyezési szkriptjei támogatottak a Linux-környezetben.
  • Parancssori argumentumok átadásának engedélyezése a szkriptnek.
  • Megadhatja a szkriptkimeneteket, és visszaadhatja őket az üzembe helyezéshez.

Az üzembehelyezési szkript erőforrása csak azokban a régiókban érhető el, ahol az Azure Container Instance elérhető. Tekintse meg az Azure Container Instances erőforrás-rendelkezésre állását az Azure-régiókban. Az üzembehelyezési szkript jelenleg csak nyilvános hálózatkezelést használ.

Fontos

Az üzembehelyezési szkriptszolgáltatás két támogató erőforrást igényel a szkriptek végrehajtásához és hibaelhárításához: egy tárfiókot és egy tárolópéldányt. Megadhat egy meglévő tárfiókot, ellenkező esetben a szkriptszolgáltatás létrehoz egyet. A két automatikusan létrehozott támogató erőforrást általában törli a szkriptszolgáltatás, amikor az üzembehelyezési szkript végrehajtása terminálállapotba kerül. A támogatási erőforrásokért a rendszer a törlésükig számláz. Az árinformációkért tekintse meg a Container Instances díjszabását és az Azure Storage díjszabását. További információ: Az üzembehelyezési szkript erőforrásainak törlése.

Feljegyzés

Az Azure-ba való bejelentkezés újrapróbálkozása már be van építve a burkolószkriptbe. Ha ugyanabban a sablonban ad engedélyeket, mint az üzembe helyezési szkriptek, az üzembehelyezési szkriptszolgáltatás 10 percig, 10 másodperces időközzel újra bejelentkezik, amíg a felügyelt identitásszerepkör-hozzárendelés replikálódik.

Képzési erőforrások

Ha lépésről lépésre szeretne többet megtudni az üzembehelyezési szkriptekről, tekintse meg az ARM-sablonok kibővítése üzembehelyezési szkriptek használatával című témakört.

A minimális engedélyek konfigurálása

Az üzembehelyezési szkript API 2020-10-01-es vagy újabb verziója esetén az üzembehelyezési szkript végrehajtásában két egyszerű résztvevő vesz részt:

  • Központi telepítési egyszerű (a sablon üzembe helyezéséhez használt egyszerű): ez a rendszernév az üzembe helyezési szkript erőforrásához szükséges mögöttes erőforrások létrehozásához használható – egy tárfiók és egy Azure-tárolópéldány. A minimális jogosultsági engedélyek konfigurálásához rendeljen hozzá egy egyéni szerepkört az alábbi tulajdonságokkal az üzembehelyezési egyszerű szolgáltatáshoz:

    {
      "roleName": "deployment-script-minimum-privilege-for-deployment-principal",
      "description": "Configure least privilege for the deployment principal in deployment script",
      "type": "customRole",
      "IsCustom": true,
      "permissions": [
        {
          "actions": [
            "Microsoft.Storage/storageAccounts/*",
            "Microsoft.ContainerInstance/containerGroups/*",
            "Microsoft.Resources/deployments/*",
            "Microsoft.Resources/deploymentScripts/*"
          ],
        }
      ],
      "assignableScopes": [
        "[subscription().id]"
      ]
    }
    

    Ha az Azure Storage és az Azure Container Instance erőforrás-szolgáltatók még nem lettek regisztrálva, hozzá kell adnia és Microsoft.ContainerInstance/register/actionhozzá kell adnia Microsoft.Storage/register/action azokat.

  • Központi telepítési szkriptnév: Ez az egyszerű szolgáltatás csak akkor szükséges, ha az üzembehelyezési szkriptnek hitelesítenie kell az Azure-ban, és meghívnia kell az Azure CLI-t/PowerShellt. Az üzembehelyezési szkript egyszerű megadásának két módja van:

    • Adjon meg egy felhasználó által hozzárendelt felügyelt identitást a identity tulajdonságban (lásd a mintasablonokat). Ha meg van adva, a szkriptszolgáltatás a központi telepítési szkript meghívása előtt hív Connect-AzAccount -Identity meg. A felügyelt identitásnak rendelkeznie kell a szükséges hozzáféréssel a művelet szkriptben való végrehajtásához. Jelenleg csak a felhasználó által hozzárendelt felügyelt identitás támogatott a identity tulajdonságban. Ha másik identitással szeretne bejelentkezni, használja a lista második metódusát.
    • Adja át a szolgáltatásnév hitelesítő adatait biztonságos környezeti változókként, majd meghívhatja az Csatlakozás-AzAccount vagy az login parancsprogramot az üzembehelyezési szkriptben.

    Felügyelt identitás használata esetén az üzembehelyezési tagnak szüksége van a felügyelt identitáskezelő szerepkörre (egy beépített szerepkörre) a felügyelt identitás erőforrásához rendelve.

Példasablonok

A következő JSON egy példa. További információ: a legújabb sablonséma.

{
  "type": "Microsoft.Resources/deploymentScripts",
  "apiVersion": "2020-10-01",
  "name": "runPowerShellInline",
  "location": "[resourceGroup().location]",
  "tags": {
    "tagName1": "tagValue1",
    "tagName2": "tagValue2"
  },
  "kind": "AzurePowerShell", // or "AzureCLI"
  "identity": {
    "type": "userAssigned",
    "userAssignedIdentities": {
      "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myID": {}
    }
  },
  "properties": {
    "forceUpdateTag": "1",
    "containerSettings": {
      "containerGroupName": "mycustomaci"
    },
    "storageAccountSettings": {
      "storageAccountName": "myStorageAccount",
      "storageAccountKey": "myKey"
    },
    "azPowerShellVersion": "9.7",  // or "azCliVersion": "2.47.0",
    "arguments": "-name \\\"John Dole\\\"",
    "environmentVariables": [
      {
        "name": "UserName",
        "value": "jdole"
      },
      {
        "name": "Password",
        "secureValue": "jDolePassword"
      }
    ],
    "scriptContent": "
      param([string] $name)
      $output = 'Hello {0}. The username is {1}, the password is {2}.' -f $name,${Env:UserName},${Env:Password}
      Write-Output $output
      $DeploymentScriptOutputs = @{}
      $DeploymentScriptOutputs['text'] = $output
    ", // or "primaryScriptUri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.ps1",
    "supportingScriptUris":[],
    "timeout": "PT30M",
    "cleanupPreference": "OnSuccess",
    "retentionInterval": "P1D"
  }
}

Feljegyzés

A példa szemléltetésre szolgál. A tulajdonságok scriptContent , és primaryScriptUri nem létezhetnek egy sablonban.

Feljegyzés

A scriptContent egy többsoros szkriptet jelenít meg. Az Azure Portal és az Azure DevOps-folyamat nem tudja elemezni a többsoros üzembehelyezési szkripteket. A PowerShell-parancsokat (pontosvesszővel vagy \r\n vagy \n) egy sorba láncolhatja, vagy használhatja a primaryScriptUri tulajdonságot egy külső szkriptfájllal. Számos ingyenes JSON-sztring-feloldó/unescape-eszköz érhető el. Például: https://www.freeformatter.com/json-escape.html.

Tulajdonságérték részletei:

  • identity: A központi telepítési szkript API 2020-10-01-es vagy újabb verziója esetén a felhasználó által hozzárendelt felügyelt identitás nem kötelező, kivéve, ha azure-specifikus műveleteket kell végrehajtania a szkriptben. Az API 2019-10-01-preview verziójához felügyelt identitásra van szükség, mivel az üzembehelyezési szkriptszolgáltatás a szkriptek végrehajtásához használja. Ha az identitástulajdonság meg van adva, a szkriptszolgáltatás a felhasználói szkript meghívása előtt hív Connect-AzAccount -Identity meg. Jelenleg csak a felhasználó által hozzárendelt felügyelt identitás támogatott. Ha másik identitással szeretne bejelentkezni, meghívhatja Csatlakozás-AzAccountot a szkriptben.

  • tags: Üzembehelyezési szkriptcímkék. Ha az üzembehelyezési szkriptszolgáltatás létrehoz egy tárfiókot és egy tárolópéldányt, a címkék mindkét erőforrásnak átadódnak, amelyek felhasználhatók az azonosításukra. Ezen erőforrások azonosításának egy másik módja az "azscripteket" tartalmazó utótagok. További információkért tekintse meg az üzembehelyezési szkriptek figyelése és hibaelhárítása című témakört.

  • kind: Adja meg a szkript típusát. Jelenleg az Azure PowerShell és az Azure CLI-szkriptek támogatottak. Az értékek az AzurePowerShell és az AzureCLI.

  • forceUpdateTag: Ha ezt az értéket módosítja a sablontelepítések között, az üzembe helyezési szkript újrafuttatására kényszeríti. Ha a függvényeket vagy a newGuid()utcNow() függvényeket használja, mindkét függvény csak egy paraméter alapértelmezett értékében használható. További információ: Szkript futtatása többször.

  • containerSettings: Adja meg az Azure Container Instance testreszabására vonatkozó beállításokat. Az üzembehelyezési szkripthez új Azure Container Instance szükséges. Meglévő Azure Container Instance nem adható meg. A tárolócsoport nevét azonban testre szabhatja a következővel containerGroupName: . Ha nincs megadva, a rendszer automatikusan létrehozza a csoport nevét.

  • storageAccountSettings: Adja meg a meglévő tárfiók használatára vonatkozó beállításokat. Ha storageAccountName nincs megadva, a rendszer automatikusan létrehoz egy tárfiókot. Lásd: Meglévő tárfiók használata.

  • azPowerShellVersion/azCliVersion: Adja meg a használni kívánt modulverziót. Tekintse meg a támogatott Azure PowerShell-verziók listáját. A verzió határozza meg, hogy melyik tárolólemezképet használja:

    • A 9-nél nagyobb vagy egyenlő verzió az Ubuntu 22.04-et használja.
    • Az az 6-nál nagyobb vagy egyenlő, de 9-nél kisebb verzió az Ubuntu 20.04-et használja.
    • A 6-nál kisebb verzió az Ubuntu 18.04-et használja.

    Fontos

    Javasoljuk, hogy frissítsen az Ubuntu legújabb verziójára, mivel az Ubuntu 18.04 hamarosan lejár, és 2023. május 31-e után már nem kap biztonsági frissítéseket.

    Tekintse meg a támogatott Azure CLI-verziók listáját.

    Fontos

    Az üzembehelyezési szkript a Microsoft Container Registry (MCR) elérhető CLI-rendszerképeit használja. A parancssori felületi rendszerképek üzembehelyezési szkriptekhez való minősítése általában körülbelül egy hónapot vesz igénybe. Ne használja a 30 napon belül kiadott CLI-verziókat. A rendszerképek kiadási dátumait az Azure CLI kibocsátási megjegyzéseiben találja. Ha nem támogatott verziót használ, a hibaüzenet felsorolja a támogatott verziókat.

  • arguments: Adja meg a paraméterértékeket. Az értékek szóközök szerint vannak elválasztva.

    Az üzembehelyezési szkriptek a CommandLineToArgvW rendszerhívás meghívásával sztringek tömbjébe osztja az argumentumokat. Erre a lépésre azért van szükség, mert az argumentumok parancstulajdonságként lesznek átadva az Azure Container Instancenek, a parancstulajdonság pedig egy sztringtömb.

    Ha az argumentumok szökött karaktereket tartalmaznak, használja a JsonEscapert a karakterek duplázásához. Illessze be az eredeti feloldott sztringet az eszközbe, majd válassza az Escape lehetőséget. Az eszköz egy dupla sztringet ad ki. Az előző mintasablonban például az argumentum a következő -name \"John Dole\". A szökött sztring az -name \\\"John Dole\\\".

    Ha argumentumként szeretne átadni egy ARM-sablonparamétert, konvertálja az objektumot sztringgé a sztring() függvénnyel, majd a replace() függvénnyel cserélje le azokat \"\\\". Példa:

    replace(string(parameters('tables')), '\"', '\\\"')
    

    További információkért tekintse meg a mintasablont.

  • environmentVariables: Adja meg a szkriptnek átadni kívánt környezeti változókat. További információ: Üzembehelyezési szkriptek fejlesztése.

  • scriptContent: Adja meg a szkript tartalmát. Külső szkript futtatásához használja primaryScriptUri inkább. Példákért lásd : Beágyazott szkript használata és Külső szkript használata.

  • primaryScriptUri: Adjon meg egy nyilvánosan elérhető URL-címet az elsődleges üzembehelyezési szkripthez támogatott fájlkiterjesztésekkel. További információ: Külső szkriptek használata.

  • supportingScriptUris: Adjon meg egy nyilvánosan elérhető URL-címeket tartalmazó tömböt a támogatott fájlokhoz, amelyek vagy scriptContentprimaryScriptUria . További információ: Külső szkriptek használata.

  • timeout: Adja meg az ISO 8601 formátumban megadott maximális szkriptvégrehajtási időt. Az alapértelmezett érték a P1D.

  • cleanupPreference. Adja meg a két támogató üzembehelyezési erőforrás, a tárfiók és a tárolópéldány eltávolításának beállítását, amikor a szkript végrehajtása terminálállapotba kerül. Az alapértelmezett beállítás az Always, ami azt jelenti, hogy a terminálállapot ellenére törli a támogató erőforrásokat (Sikeres, Sikertelen, Megszakítva). További információ: Az üzembehelyezési szkript erőforrásainak törlése.

  • retentionInterval: Adja meg azt az időközt, amelynél a szolgáltatás megtartja az üzembehelyezési szkript erőforrását, miután az üzembehelyezési szkript végrehajtása elérte a terminálállapotot. Az üzembehelyezési szkript erőforrása törlődik, ha ez az időtartam lejár. Az időtartam az ISO 8601 mintán alapul. A megőrzési időköz 1 és 26 óra között van (PT26H). Ezt a tulajdonságot akkor használja a rendszer, ha cleanupPreference az OnExpiration értékre van állítva. További információ: Az üzembehelyezési szkript erőforrásainak törlése.

További példák

  • 1. minta: Hozzon létre egy kulcstartót, és használja az üzembehelyezési szkriptet egy tanúsítvány kulcstartóhoz való hozzárendeléséhez.
  • 2. példa: hozzon létre egy erőforráscsoportot az előfizetés szintjén, hozzon létre egy kulcstartót az erőforráscsoportban, majd üzembehelyezési szkripttel rendeljen hozzá egy tanúsítványt a kulcstartóhoz.
  • 3. minta: hozzon létre egy felhasználó által hozzárendelt felügyelt identitást, rendelje hozzá a közreműködői szerepkört az identitáshoz az erőforráscsoport szintjén, hozzon létre egy kulcstartót, majd az üzembehelyezési szkript használatával rendeljen hozzá egy tanúsítványt a kulcstartóhoz.
  • 4. minta: ugyanaz a forgatókönyv, mint a listában szereplő 1. minta. Létrejön egy új erőforráscsoport az üzembehelyezési szkript futtatásához. Ez a sablon előfizetési szintű sablon.
  • 5. minta: ugyanaz a forgatókönyv, mint a 4. minta. Ez a sablon egy erőforráscsoportszintű sablon.
  • 6. minta: manuálisan hozzon létre egy felhasználó által hozzárendelt felügyelt identitást, és rendelje hozzá a Microsoft Graph API-val Microsoft Entra-alkalmazások létrehozásához; az ARM-sablonban egy üzembehelyezési szkripttel hozzon létre egy Microsoft Entra-alkalmazást és szolgáltatásnevet, és adja ki az objektumazonosítókat és az ügyfélazonosítót.

Beágyazott szkriptek használata

Az alábbi sablon egy erőforrást definiált a Microsoft.Resources/deploymentScripts típussal. A kiemelt rész a beágyazott szkript.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "name": {
      "type": "string",
      "defaultValue": "\\\"John Dole\\\""
    },
    "utcValue": {
      "type": "string",
      "defaultValue": "[utcNow()]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deploymentScripts",
      "apiVersion": "2020-10-01",
      "name": "runPowerShellInlineWithOutput",
      "location": "[resourceGroup().location]",
      "kind": "AzurePowerShell",
      "properties": {
        "forceUpdateTag": "[parameters('utcValue')]",
        "azPowerShellVersion": "8.3",
        "scriptContent": "
          param([string] $name)
          $output = \"Hello {0}\" -f $name
          Write-Output $output
          $DeploymentScriptOutputs = @{}
          $DeploymentScriptOutputs['text'] = $output
        ",
        "arguments": "[concat('-name', ' ', parameters('name'))]",
        "timeout": "PT1H",
        "cleanupPreference": "OnSuccess",
        "retentionInterval": "P1D"
      }
    }
  ],
  "outputs": {
    "result": {
      "value": "[reference('runPowerShellInlineWithOutput').outputs.text]",
      "type": "string"
    }
  }
}

Feljegyzés

Mivel a beágyazott üzembehelyezési szkriptek dupla idézőjelek közé vannak zárva, az üzembehelyezési szkriptek sztringjeinek fordított perjel (\) használatával vagy egyetlen idézőjelben kell lenniük. Érdemes lehet sztring-helyettesítést is használni, ahogy az az előző JSON-mintában is látható.

A szkript egy paramétert vesz fel, és a paraméter értékét adja ki. DeploymentScriptOutputs a kimenetek tárolására szolgál. A kimenetek szakaszban a value sor bemutatja, hogyan érheti el a tárolt értékeket. Write-Output hibakeresési célra szolgál. A kimeneti fájl elérésének megismeréséhez tekintse meg az üzembehelyezési szkriptek figyelése és hibaelhárítása című témakört. A tulajdonságleírásokért tekintse meg a mintasablonokat.

A szkript futtatásához válassza a Kipróbálás lehetőséget a Cloud Shell megnyitásához, majd illessze be a következő kódot a rendszerhéj ablaktáblájába.

$resourceGroupName = Read-Host -Prompt "Enter the name of the resource group to be created"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location

New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.json"

Write-Host "Press [ENTER] to continue ..."

A kimenet a következőképpen fog kinézni:

Képernyőkép a Resource Manager-sablon üzembehelyezési szkriptjéről a Hello World outputról.

Külső szkriptek használata

A beágyazott szkripteken kívül külső szkriptfájlokat is használhat. Csak a ps1 fájlkiterjesztésű elsődleges PowerShell-szkriptek támogatottak. CLI-szkriptek esetén az elsődleges szkriptek bármilyen kiterjesztéssel (vagy bővítmény nélkül) rendelkezhetnek, feltéve, hogy a szkriptek érvényes bash-szkriptek. Külső szkriptfájlok használatához cserélje le a következőre scriptContentprimaryScriptUri: . Példa:

"primaryScriptUri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.ps1",

További információt a példasablonban talál.

A külső szkriptfájloknak elérhetőnek kell lenniük. Az Azure Storage-fiókokban tárolt szkriptfájlok biztonságossá tételéhez hozzon létre egy SAS-jogkivonatot, és foglalja bele a sablon URI-ba. Állítsa be a lejárati időt, hogy elegendő idő legyen az üzembe helyezés befejezéséhez. További információ: Privát ARM-sablon üzembe helyezése SAS-jogkivonattal.

Ön a felelős az üzembehelyezési szkript által hivatkozott szkriptek integritásának biztosításáért, vagy primaryScriptUrisupportingScriptUris. Csak megbízható szkriptekre hivatkozzon.

Támogató szkriptek használata

A bonyolult logikákat egy vagy több támogató szkriptfájlra bonthatja. A supportingScriptUris tulajdonság lehetővé teszi az URI-k tömbjének megadását a támogató szkriptfájlok számára, ha szükséges:

"scriptContent": "
    ...
    ./Create-Cert.ps1
    ...
"

"supportingScriptUris": [
  "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/create-cert.ps1"
],

A támogató szkriptfájlok meghívhatók beágyazott és elsődleges szkriptfájlokból is. A támogató szkriptfájlok nem korlátozzák a fájlkiterjesztést.

A program a futtatókörnyezetben másolja azscripts/azscriptinput a támogató fájlokat. Használjon relatív elérési utat a beágyazott szkriptekből és az elsődleges szkriptfájlokból származó támogató fájlokra való hivatkozáshoz.

PowerShell-szkriptek kimeneteinek használata

Az alábbi sablon bemutatja, hogyan adhat át értékeket két deploymentScripts erőforrás között:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "name": {
      "type": "string",
      "defaultValue": "John Dole"
    },
    "utcValue": {
      "type": "string",
      "defaultValue": "[utcNow()]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deploymentScripts",
      "apiVersion": "2020-10-01",
      "name": "scriptInTemplate1",
      "location": "[resourceGroup().location]",
      "kind": "AzurePowerShell",
      "properties": {
        "forceUpdateTag": "[parameters('utcValue')]",
        "azPowerShellVersion": "8.3",
        "timeout": "PT1H",
        "arguments": "[concat('-name', ' ', concat('\\\"', parameters('name'), '\\\"'))]",
        "scriptContent": "
          param([string] $name)
          $output = 'Hello {0}' -f $name
          Write-Output $output
          $DeploymentScriptOutputs = @{}
          $DeploymentScriptOutputs['text'] = $output
        ",
        "cleanupPreference": "Always",
        "retentionInterval": "P1D"
      }
    },
    {
      "type": "Microsoft.Resources/deploymentScripts",
      "apiVersion": "2020-10-01",
      "name": "scriptInTemplate2",
      "location": "[resourceGroup().location]",
      "kind": "AzurePowerShell",
      "dependsOn": [
        "scriptInTemplate1"
      ],
      "properties": {
        "forceUpdateTag": "[parameters('utcValue')]",
        "azPowerShellVersion": "8.3",
        "timeout": "PT1H",
        "arguments": "[concat('-textToEcho', ' ', concat('\\\"', reference('scriptInTemplate1').outputs.text, '\\\"'))]",
        "scriptContent": "
          param([string] $textToEcho)
          Write-Output $textToEcho
          $DeploymentScriptOutputs = @{}
          $DeploymentScriptOutputs['text'] = $textToEcho
        ",
        "cleanupPreference": "Always",
        "retentionInterval": "P1D"
      }
    }
  ],
  "outputs": {
    "result": {
      "value": "[reference('scriptInTemplate2').outputs.text]",
      "type": "string"
    }
  }
}

Az első erőforrásban definiál egy úgynevezett $DeploymentScriptOutputsváltozót, és a kimeneti értékek tárolására használja. Ha a kimeneti értéket egy másik erőforrásból szeretné elérni a sablonon belül, használja a következőt:

reference('<ResourceName>').outputs.text

Parancssori felületi szkriptek kimeneteinek használata

Az Azure PowerShell üzembehelyezési szkriptekkel ellentétben a CLI/bash nem tesz közzé gyakori változót a szkriptkimenetek tárolásához. Ehelyett egy környezeti változót használ, amely a AZ_SCRIPTS_OUTPUT_PATH szkriptkimenetek fájljának helyét jelzi. Amikor arm-sablonon belül futtat üzembehelyezési szkriptet, a Bash-rendszerhéj automatikusan konfigurálja ezt a környezeti változót. Előre definiált értéke /mnt/azscripts/azscriptoutput/scriptoutputs.json. A kimeneteknek meg kell felelniük egy érvényes JSON-sztringobjektum-struktúrának. A fájl tartalmát kulcs-érték párként kell formázni. Egy sztringtömböt például {"MyResult": [ "foo", "bar"] } néven kell menteni. A rendszer csak a tömberedmények (például [ "foo", "bar" ]) tárolását tekinti érvénytelennek.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "identity": {
      "type": "string"
    },
    "utcValue": {
      "type": "string",
      "defaultValue": "[utcNow()]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deploymentScripts",
      "apiVersion": "2020-10-01",
      "name": "runBashWithOutputs",
      "location": "[resourceGroup().location]",
      "kind": "AzureCLI",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "[parameters('identity')]": {
          }
        }
      },
      "properties": {
        "forceUpdateTag": "[parameters('utcValue')]",
        "AzCliVersion": "2.40.0",
        "timeout": "PT30M",
        "arguments": "'foo' 'bar'",
        "environmentVariables": [
          {
            "name": "UserName",
            "value": "jdole"
          },
          {
            "name": "Password",
            "secureValue": "jDolePassword"
          }
        ],
        "scriptContent": "result=$(az keyvault list); echo \"arg1 is: $1\"; echo \"arg2 is: $2\"; echo \"Username is: $UserName\"; echo \"password is: $Password\"; echo $result | jq -c '{Result: map({id: .id})}' > $AZ_SCRIPTS_OUTPUT_PATH",
        "cleanupPreference": "OnExpiration",
        "retentionInterval": "P1D"

A jq az előző mintában használatos. A tároló lemezképeivel együtt. Lásd: Fejlesztési környezet konfigurálása.

Meglévő tárfiók használata

Egy tárfiókra és egy tárolópéldányra van szükség a szkript végrehajtásához és hibaelhárításához. Lehetősége van meglévő tárfiók megadására, ellenkező esetben a tárfiókot és a tárolópéldányt a szkriptszolgáltatás automatikusan létrehozza. Meglévő tárfiók használatára vonatkozó követelmények:

  • A támogatott tárfióktípusok a következők:

    Termékváltozat Támogatott típus
    Premium_LRS FileStorage
    Premium_ZRS FileStorage
    Standard_GRS Storage, StorageV2
    Standard_GZRS StorageV2
    Standard_LRS Storage, StorageV2
    Standard_RAGRS Storage, StorageV2
    Standard_RAGZRS StorageV2
    Standard_ZRS StorageV2

    Ezek a kombinációk támogatják a fájlmegosztásokat. További információ: Azure-fájlmegosztás és tárfióktípusok létrehozása.

  • A tárfiók tűzfalszabályai még nem támogatottak. További információ: Azure Storage-tűzfalak és virtuális hálózatok konfigurálása.

  • Az üzembehelyezési tagnak rendelkeznie kell a tárfiók kezeléséhez szükséges engedélyekkel, beleértve az olvasást, a létrehozást és a fájlmegosztások törlését.

Meglévő tárfiók megadásához adja hozzá a következő JSON-t a következő tulajdonságelemhez Microsoft.Resources/deploymentScripts:

"storageAccountSettings": {
  "storageAccountName": "myStorageAccount",
  "storageAccountKey": "myKey"
},
  • storageAccountName: adja meg a tárfiók nevét.

  • storageAccountKey: adja meg az egyik tárfiókkulcsot. A listKeys() függvénnyel lekérheti a kulcsot. Példa:

    "storageAccountSettings": {
        "storageAccountName": "[variables('storageAccountName')]",
        "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value]"
    }
    

A teljes Microsoft.Resources/deploymentScripts definíciós mintát a mintasablonok között talál.

Meglévő tárfiók használata esetén a szkriptszolgáltatás egyedi névvel hoz létre fájlmegosztást. Tekintse meg az üzembehelyezési szkript erőforrásainak megtisztítása című témakört, amelyből megtudhatja, hogy a szkriptszolgáltatás hogyan tisztítja meg a fájlmegosztást.

Üzembehelyezési szkriptek fejlesztése

Nem ismétlődő hibák kezelése

Az üzembehelyezési szkript változójának használatával szabályozhatja, hogy a PowerShell hogyan reagáljon a $ErrorActionPreference nem ismétlődő hibákra. Ha a változó nincs beállítva az üzembehelyezési szkriptben, a szkriptszolgáltatás az alapértelmezett Continue értéket használja.

A szkriptszolgáltatás sikertelenre állítja az erőforrás-kiépítési állapotot, ha a szkript a beállítás $ErrorActionPreferenceellenére hibát tapasztal.

Környezeti változók használata

Az üzembehelyezési szkript a következő környezeti változókat használja:

Környezeti változó Alapértelmezett érték Fenntartott rendszer
AZ_SCRIPTS_AZURE_ENVIRONMENT AzureCloud N
AZ_SCRIPTS_CLEANUP_PREFERENCE OnExpiration N
AZ_SCRIPTS_OUTPUT_PATH <>AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY/<AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME> I
AZ_SCRIPTS_PATH_INPUT_DIRECTORY /mnt/azscripts/azscriptinput I
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY /mnt/azscripts/azscriptoutput I
AZ_SCRIPTS_PATH_U Standard kiadás R_SCRIPT_FILE_NAME Azure PowerShell: userscript.ps1; Azure CLI: userscript.sh I
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME primaryscripturi.config I
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME supportingscripturi.config I
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME scriptoutputs.json I
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME executionresult.json I
AZ_SCRIPTS_U Standard kiadás R_ASSIGNED_IDENTITY /Előfizetések/ N

A használatról AZ_SCRIPTS_OUTPUT_PATHtovábbi információt a CLI-szkript kimeneteinek használata című témakörben talál.

Biztonságos sztringek átadása üzembehelyezési szkriptnek

A tárolópéldányokban környezeti változók (EnvironmentVariable) beállítása lehetővé teszi a tároló által futtatott alkalmazás vagy szkript dinamikus konfigurációját. Az üzembe helyezési szkript a nem biztonságos és biztonságos környezeti változókat ugyanúgy kezeli, mint az Azure Container Instancet. További információ: Környezeti változók beállítása tárolópéldányokban. Példa: Mintasablonok.

A környezeti változók maximális megengedett mérete 64 KB.

Üzembehelyezési szkriptek monitorozása és hibaelhárítása

A szkriptszolgáltatás létrehoz egy tárfiókot (hacsak nem ad meg egy meglévő tárfiókot) és egy tárolópéldányt a szkript végrehajtásához. Ha ezeket az erőforrásokat a szkriptszolgáltatás automatikusan hozza létre, mindkét erőforrás azscripts utótagja szerepel az erőforrásnevekben.

Képernyőkép a Resource Manager-sablon üzembehelyezési szkriptjének erőforrásnevéről.

A felhasználói szkriptet, a végrehajtási eredményeket és az stdout fájlt a tárfiók fájlmegosztásai tárolják. Van egy nevű azscriptsmappa. A mappában két további mappa található a bemenethez és a kimeneti fájlokhoz: azscriptinput és azscriptoutput.

A kimeneti mappa tartalmaz egy executionresult.json és a szkript kimeneti fájlja. A szkriptvégrehajtási hibaüzenet a executionresult.json jelenik meg. A kimeneti fájl csak a szkript sikeres végrehajtásakor jön létre. A bemeneti mappa tartalmaz egy rendszer PowerShell-szkriptfájlt és a felhasználó üzembehelyezési szkriptfájljait. A felhasználói üzembehelyezési szkriptfájlt lecserélheti egy módosított fájlra, és újrafuttathatja az üzembehelyezési szkriptet az Azure-tárolópéldányból.

Az Azure Portal használata

Az üzembehelyezési szkript erőforrásának üzembe helyezése után az erőforrás az Azure Portal erőforráscsoportja alatt lesz felsorolva. Az alábbi képernyőképen egy üzembehelyezési szkript erőforrásának Áttekintés lapja látható:

Képernyőkép a Resource Manager-sablon üzembehelyezési szkript portáljának áttekintéséről.

Az áttekintési oldal megjeleníti az erőforrás néhány fontos információját, például a kiépítési állapotot, a tárfiókot, a tárolópéldányt és a naplókat.

A bal oldali menüben megtekintheti az üzembehelyezési szkript tartalmát, a szkriptnek átadott argumentumokat és a kimenetet. Az üzembehelyezési szkripthez tartozó sablont is exportálhatja, beleértve az üzembe helyezési szkriptet is.

A PowerShell használata

Az Azure PowerShell használatával kezelheti az üzembehelyezési szkripteket az előfizetés vagy az erőforráscsoport hatókörében:

A Get-AzDeploymentScript kimenet a következőhöz hasonló:

Name                : runPowerShellInlineWithOutput
Id                  : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0618rg/providers/Microsoft.Resources/deploymentScripts/runPowerShellInlineWithOutput
ResourceGroupName   : myds0618rg
Location            : centralus
SubscriptionId      : 01234567-89AB-CDEF-0123-456789ABCDEF
ProvisioningState   : Succeeded
Identity            : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/mydentity1008rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami
ScriptKind          : AzurePowerShell
AzPowerShellVersion : 9.7
StartTime           : 5/11/2023 7:46:45 PM
EndTime             : 5/11/2023 7:49:45 PM
ExpirationDate      : 5/12/2023 7:49:45 PM
CleanupPreference   : OnSuccess
StorageAccountId    : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0618rg/providers/Microsoft.Storage/storageAccounts/ftnlvo6rlrvo2azscripts
ContainerInstanceId : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0618rg/providers/Microsoft.ContainerInstance/containerGroups/ftnlvo6rlrvo2azscripts
Outputs             :
                      Key                 Value
                      ==================  ==================
                      text                Hello John Dole

RetentionInterval   : P1D
Timeout             : PT1H

Az Azure parancssori felület használatával

Az Azure CLI használatával kezelheti az üzembehelyezési szkripteket az előfizetés vagy az erőforráscsoport hatókörében:

A listaparancs kimenete a következőhöz hasonló:

[
  {
    "arguments": "'foo' 'bar'",
    "azCliVersion": "2.40.0",
    "cleanupPreference": "OnExpiration",
    "containerSettings": {
      "containerGroupName": null
    },
    "environmentVariables": null,
    "forceUpdateTag": "20231101T163748Z",
    "id": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0624rg/providers/Microsoft.Resources/deploymentScripts/runBashWithOutputs",
    "identity": {
      "tenantId": "01234567-89AB-CDEF-0123-456789ABCDEF",
      "type": "userAssigned",
      "userAssignedIdentities": {
        "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/myidentity/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
          "clientId": "01234567-89AB-CDEF-0123-456789ABCDEF",
          "principalId": "01234567-89AB-CDEF-0123-456789ABCDEF"
        }
      }
    },
    "kind": "AzureCLI",
    "location": "centralus",
    "name": "runBashWithOutputs",
    "outputs": {
      "Result": [
        {
          "id": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/mytest/providers/Microsoft.KeyVault/vaults/mykv1027",
          "resourceGroup": "mytest"
        }
      ]
    },
    "primaryScriptUri": null,
    "provisioningState": "Succeeded",
    "resourceGroup": "mytest",
    "retentionInterval": "1 day, 0:00:00",
    "scriptContent": "result=$(az keyvault list); echo \"arg1 is: $1\"; echo $result | jq -c '{Result: map({id: .id})}' > $AZ_SCRIPTS_OUTPUT_PATH",
    "status": {
      "containerInstanceId": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/mytest/providers/Microsoft.ContainerInstance/containerGroups/eg6n7wvuyxn7iazscripts",
      "endTime": "2023-11-01T16:39:12.080950+00:00",
      "error": null,
      "expirationTime": "2023-11-02T16:39:12.080950+00:00",
      "startTime": "2023-11-01T16:37:53.139700+00:00",
      "storageAccountId": null
    },
    "storageAccountSettings": {
      "storageAccountKey": null,
      "storageAccountName": "dsfruro267qwb4i"
    },
    "supportingScriptUris": null,
    "systemData": {
      "createdAt": "2023-10-31T19:06:57.060909+00:00",
      "createdBy": "someone@contoso.com",
      "createdByType": "User",
      "lastModifiedAt": "2023-11-01T16:37:51.859570+00:00",
      "lastModifiedBy": "someone@contoso.com",
      "lastModifiedByType": "User"
    },
    "tags": null,
    "timeout": "0:30:00",
    "type": "Microsoft.Resources/deploymentScripts"
  }
]

A REST API használata

Az üzembehelyezési szkript erőforrás-telepítési adatait az erőforráscsoport szintjén és az előfizetés szintjén is lekérheti a REST API használatával:

/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>?api-version=2020-10-01
/subscriptions/<SubscriptionID>/providers/microsoft.resources/deploymentScripts?api-version=2020-10-01

Az alábbi példa az ARMClientet használja:

armclient login
armclient get /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/myrg/providers/microsoft.resources/deploymentScripts/myDeployementScript?api-version=2020-10-01

Az eredmény az alábbihoz hasonlóan fog kinézni:

{
  "kind": "AzurePowerShell",
  "identity": {
    "type": "userAssigned",
    "tenantId": "01234567-89AB-CDEF-0123-456789ABCDEF",
    "userAssignedIdentities": {
      "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myidentity1008rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
        "principalId": "01234567-89AB-CDEF-0123-456789ABCDEF",
        "clientId": "01234567-89AB-CDEF-0123-456789ABCDEF"
      }
    }
  },
  "location": "centralus",
  "systemData": {
    "createdBy": "someone@contoso.com",
    "createdByType": "User",
    "createdAt": "2023-05-11T02:59:04.7501955Z",
    "lastModifiedBy": "someone@contoso.com",
    "lastModifiedByType": "User",
    "lastModifiedAt": "2023-05-11T02:59:04.7501955Z"
  },
  "properties": {
    "provisioningState": "Succeeded",
    "forceUpdateTag": "20220625T025902Z",
    "azPowerShellVersion": "9.7",
    "scriptContent": "\r\n          param([string] $name)\r\n          $output = \"Hello {0}\" -f $name\r\n          Write-Output $output\r\n          $DeploymentScriptOutputs = @{}\r\n          $DeploymentScriptOutputs['text'] = $output\r\n        ",
    "arguments": "-name \\\"John Dole\\\"",
    "retentionInterval": "P1D",
    "timeout": "PT1H",
    "containerSettings": {},
    "status": {
      "containerInstanceId": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0624rg/providers/Microsoft.ContainerInstance/containerGroups/64lxews2qfa5uazscripts",
      "storageAccountId": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0624rg/providers/Microsoft.Storage/storageAccounts/64lxews2qfa5uazscripts",
      "startTime": "2023-05-11T02:59:07.5951401Z",
      "endTime": "2023-05-11T03:00:16.7969234Z",
      "expirationTime": "2023-05-12T03:00:16.7969234Z"
    },
    "outputs": {
      "text": "Hello John Dole"
    },
    "cleanupPreference": "OnSuccess"
  },
  "id": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0624rg/providers/Microsoft.Resources/deploymentScripts/runPowerShellInlineWithOutput",
  "type": "Microsoft.Resources/deploymentScripts",
  "name": "runPowerShellInlineWithOutput"
}

A következő REST API adja vissza a naplót:

/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>/logs?api-version=2020-10-01

Csak az üzembehelyezési szkript erőforrásainak törlése előtt működik.

A deploymentScripts erőforrás portálon való megtekintéséhez válassza a Rejtett típusok megjelenítése lehetőséget:

Képernyőkép a Resource Manager-sablon üzembehelyezési parancsfájljáról a rejtett típusok megjelenítésével a portálon.

Üzembehelyezési szkript erőforrásainak törlése

A két automatikusan létrehozott támogató erőforrás soha nem tudja kiélvezni az deploymentScript erőforrást, kivéve, ha hiba történt a törlésükkor. A támogató erőforrások életciklusát a cleanupPreference tulajdonság szabályozza, az erőforrás életciklusát pedig deploymentScript a retentionInterval tulajdonság szabályozza:

  • cleanupPreference: Adja meg a két támogató erőforrás törlési beállítását, amikor a szkript végrehajtása terminálállapotba kerül. A támogatott értékek a következők:

    • Mindig: Törölje a két támogató erőforrást, ha a szkript végrehajtása terminálállapotba kerül. Meglévő tárfiók használata esetén a szkriptszolgáltatás törli a szolgáltatás által létrehozott fájlmegosztást. Mivel az erőforrás továbbra deploymentScripts is jelen lehet a támogató erőforrások törlése után, a szkriptszolgáltatás megőrzi a szkriptvégrehajtási eredményeket, például az stdoutot, a kimeneteket és a visszatérési értéket az erőforrások törlése előtt.

    • OnSuccess: Csak akkor törölje a két támogató erőforrást, ha a szkript végrehajtása sikeres. Meglévő tárfiók használata esetén a szkriptszolgáltatás csak akkor távolítja el a fájlmegosztást, ha a szkript végrehajtása sikeres.

      Ha a szkript végrehajtása nem sikerül, a szkriptszolgáltatás megvárja, amíg lejár, retentionInterval mielőtt megtisztítja a támogató erőforrásokat, majd az üzembehelyezési szkript erőforrását.

    • OnExpiration: A két támogató erőforrást csak akkor törölje, ha a retentionInterval beállítás lejárt. Meglévő tárfiók használata esetén a szkriptszolgáltatás eltávolítja a fájlmegosztást, de megtartja a tárfiókot.

    A tárolópéldány és a tárfiók a cleanupPreference. Ha azonban a szkript meghiúsul, és cleanupPreference nem mindig van beállítva, az üzembe helyezési folyamat automatikusan egy órán keresztül vagy a tároló megtisztításáig tartja a tárolót. A szkript hibaelhárításához használhatja az időt. Ha a sikeres üzembe helyezés után is futtatni szeretné a tárolót, adjon hozzá egy alvó lépést a szkripthez. Például adja hozzá a Start-Sleep parancsot a szkript végéhez. Ha nem adja hozzá az alvó lépést, a tároló terminálállapotra van állítva, és akkor sem érhető el, ha még nem törölték.

  • retentionInterval: Adja meg az deploymentScript erőforrás megőrzésének és lejártának és törlésének időtartamát.

Feljegyzés

Nem ajánlott a tárfiókot és a szkriptszolgáltatás által létrehozott tárolópéldányt más célokra használni. A szkript életciklusától függően előfordulhat, hogy a két erőforrás el lesz távolítva.

Az automatikusan létrehozott tárfiók és tárolópéldány nem törölhető, ha az üzembe helyezési szkript egy CanNotDelete-zárolással rendelkező erőforráscsoportban van üzembe helyezve. A probléma megoldásához az üzembehelyezési szkriptet zárolások nélkül helyezheti üzembe egy másik erőforráscsoportban. Lásd a mintasablonok 4. és 5. mintáját.

Szkript többszöri futtatása

Az üzembehelyezési szkript végrehajtása idempotens művelet. Ha egyik deploymentScripts erőforrástulajdonság sem módosul (beleértve a beágyazott szkriptet is), a szkript nem fut a sablon ismételt üzembe helyezésekor. Az üzembehelyezési szkriptszolgáltatás összehasonlítja a sablon erőforrásneveit az ugyanazon erőforráscsoportban lévő meglévő erőforrásokkal. Két lehetőség közül választhat, ha ugyanazt az üzembehelyezési szkriptet többször szeretné végrehajtani:

  • Módosítsa az erőforrás nevét deploymentScripts . Használja például az utcNow sablonfüggvényt erőforrásnévként vagy az erőforrásnév részeként. Az erőforrás nevének módosítása új deploymentScripts erőforrást hoz létre. Jó a szkriptek végrehajtásának előzményeinek megőrzéséhez.

    Feljegyzés

    A utcNow függvény csak egy paraméter alapértelmezett értékében használható.

  • Adjon meg egy másik értéket a forceUpdateTag sablontulajdonságban. Használja például utcNow értékként.

Feljegyzés

Írja meg az idempotens üzembehelyezési szkripteket. Ez biztosítja, hogy ha véletlenül újra futnak, az ne okozzon rendszerváltozásokat. Ha például az üzembehelyezési szkriptet használja egy Azure-erőforrás létrehozásához, ellenőrizze, hogy az erőforrás nem létezik-e a létrehozása előtt, hogy a szkript sikeres legyen, vagy ne hozza létre újra az erőforrást.

A fejlesztési környezet konfigurálása

Az üzembehelyezési szkript fejlesztési környezeteként előre konfigurált tárolórendszerképet használhat. További információ: Fejlesztési környezet konfigurálása üzembehelyezési szkriptekhez sablonokban.

A szkript sikeres tesztelése után üzembehelyezési szkriptként használhatja a sablonjaiban.

Üzembehelyezési szkript hibakódjai

Hibakód Leírás
DeploymentScriptInvalidOperation A sablon üzembehelyezési szkriptjének erőforrásdefiníciója érvénytelen tulajdonságneveket tartalmaz.
DeploymentScriptResourceConflict Nem törölhető olyan üzembehelyezési szkripterőforrás, amely nemterminális állapotban van, és a végrehajtás nem haladta meg az 1 órát. Vagy nem futtathatja újra ugyanazt az üzembehelyezési szkriptet ugyanazzal az erőforrás-azonosítóval (ugyanazzal az előfizetéssel, erőforráscsoportnévvel és erőforrásnévvel), de a szkript törzsének tartalma egyszerre eltérő.
DeploymentScriptOperationFailed Az üzembehelyezési szkript művelete belsőleg meghiúsult. Lépjen kapcsolatba a Microsoft ügyfélszolgálatával.
DeploymentScriptStorageAccountAccessKeyNotSpecified A hozzáférési kulcs nincs megadva a meglévő tárfiókhoz.
DeploymentScriptContainerGroupContainsInvalidContainers Az üzembehelyezési szkriptszolgáltatás által létrehozott tárolócsoportot külsőleg módosították, és érvénytelen tárolókat adtak hozzá.
DeploymentScriptContainerGroupInNonterminalState Két vagy több üzembehelyezési szkripterőforrás ugyanazt az Azure-tárolópéldánynevet használja ugyanabban az erőforráscsoportban, és egyikük még nem fejezte be a végrehajtást.
DeploymentScriptStorageAccountInvalidKind A BlobBlobStorage vagy BlobStorage típus meglévő tárfiókja nem támogatja a fájlmegosztásokat, ezért nem használható.
DeploymentScriptStorageAccountInvalidKindAndSku A meglévő tárfiók nem támogatja a fájlmegosztásokat. A támogatott tárfióktípusok listáját a Meglévő tárfiók használata című témakörben találja.
DeploymentScriptStorageAccountNotFound A tárfiók nem létezik, vagy egy külső folyamat vagy eszköz törölte.
DeploymentScriptStorageAccountWithServiceEndpointEnabled A megadott tárfiók szolgáltatásvégponttal rendelkezik. A szolgáltatásvégponttal rendelkező tárfiókok nem támogatottak.
DeploymentScriptStorageAccountInvalidAccessKey Érvénytelen hozzáférési kulcs van megadva a meglévő tárfiókhoz.
DeploymentScriptStorageAccountInvalidAccessKeyFormat Érvénytelen tárfiókkulcs-formátum. Lásd: Tárfiók hozzáférési kulcsok kezelése.
DeploymentScriptExceededMaxAllowedTime Az üzembehelyezési szkript végrehajtási ideje túllépte az üzembehelyezési szkript erőforrásdefiníciójában megadott időtúllépési értéket.
DeploymentScriptInvalidOutputs Az üzembehelyezési szkript kimenete nem érvényes JSON-objektum.
DeploymentScriptContainerInstancesServiceLoginFailure A felhasználó által hozzárendelt felügyelt identitás 10 kísérlet után, 1 perces időközzel nem tudott bejelentkezni.
DeploymentScriptContainerGroupNotFound Az üzembe helyezési szkriptszolgáltatás által létrehozott tárolócsoportot egy külső eszköz vagy folyamat törölte.
DeploymentScriptDownloadFailure Nem sikerült letölteni egy támogató szkriptet. Lásd: Támogató szkript használata.
DeploymentScriptError A felhasználói szkript hibát jelzett.
DeploymentScriptBootstrapScriptExecutionFailed A bootstrap-szkript hibát jelzett. A bootstrap-szkript az üzembehelyezési szkript végrehajtását vezénylő rendszerszkript.
DeploymentScriptExecutionFailed Ismeretlen hiba az üzembehelyezési szkript végrehajtása során.
DeploymentScriptContainerInstancesServiceUnavailable Az Azure Container Instance (ACI) létrehozásakor az ACI szolgáltatás nem érhető el.
DeploymentScriptContainerGroupInNonterminalState Az Azure Container Instance (ACI) létrehozásakor egy másik üzembehelyezési szkript ugyanazt az ACI-nevet használja ugyanabban a hatókörben (ugyanaz az előfizetés, erőforráscsoportnév és erőforrásnév).
DeploymentScriptContainerGroupNameInvalid A megadott Azure Container Instance Name (ACI) nem felel meg az ACI követelményeinek. Lásd: Az Azure Container Instances gyakori hibáinak elhárítása.

A Microsoft Graph használata üzembehelyezési szkripten belül

Az üzembehelyezési szkriptek a Microsoft Graph használatával hozhatnak létre és használhatnak objektumokat a Microsoft Entra ID-ban.

Parancsok

Az Azure CLI üzembehelyezési szkriptjeinek használatakor a az ad parancscsoporton belüli parancsokkal dolgozhat alkalmazások, szolgáltatásnevek, csoportok és felhasználók számára. A parancs használatával közvetlenül is meghívhatja a az rest Microsoft Graph API-kat.

Az Azure PowerShell üzembehelyezési szkriptjeinek használatakor a Invoke-RestMethod parancsmaggal közvetlenül meghívhatja a Microsoft Graph API-kat.

Engedélyek

Az üzembehelyezési szkript által használt identitást engedélyezni kell a Microsoft Graph API-val való együttműködéshez, a megfelelő engedélyekkel az általa végrehajtott műveletekhez. Az identitást a sablon központi telepítésén kívül kell engedélyeznie, például egy felhasználó által hozzárendelt felügyelt identitás előzésével és a Microsoft Graph alkalmazásszerepkörének hozzárendelésével. További információkért tekintse meg ezt a rövid útmutatót.

Privát virtuális hálózat elérése

A Microsoft.Resources/deploymentScripts 2023-08-01-es verziójával néhány további konfigurációval futtathat üzembehelyezési szkripteket magánhálózatokon.

  • Hozzon létre egy felhasználó által hozzárendelt felügyelt identitást, és adja meg a identity tulajdonságban. Az identitás hozzárendeléséhez lásd : Identitás.

  • Hozzon létre egy tárfiókot a következő beállítással allowSharedKeyAccesstrue , és adja meg a meglévő tárfiók használatához szükséges üzembehelyezési szkriptet. Meglévő tárfiók megadásához lásd : Meglévő tárfiók használata. A tárfiókhoz további konfigurációra van szükség.

    1. Nyissa meg a tárfiókot az Azure Portalon.

    2. A bal oldali menüben válassza a Hozzáférés-vezérlés (IAM) lehetőséget, majd a Szerepkör-hozzárendelések lapot.

    3. Adja hozzá a szerepkört Storage File Data Privileged Contributor a felhasználó-hozzárendelés által felügyelt identitáshoz.

    4. A bal oldali menü Biztonság + hálózatkezelés területén válassza a Hálózatkezelés, majd a Tűzfalak és virtuális hálózatok lehetőséget.

    5. Válassza az Engedélyezve lehetőséget a kijelölt virtuális hálózatok és IP-címek közül.

      Képernyőkép a tárfiók privát hálózat elérésére való konfigurálásáról.

    6. A Virtuális hálózatok területen adjon hozzá egy alhálózatot. A képernyőképen az alhálózat neve dspvnVnet.

    7. A Kivételek csoportban válassza az Azure-szolgáltatások engedélyezése a megbízható szolgáltatások listájában a tárfiók eléréséhez.

Az alábbi ARM-sablon bemutatja, hogyan konfigurálhatja a környezetet üzembehelyezési szkript futtatásához:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "prefix": {
      "type": "string",
      "maxLength": 10
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "userAssignedIdentityName": {
      "type": "string",
      "defaultValue": "[format('{0}Identity', parameters('prefix'))]"
    },
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('{0}stg{1}', parameters('prefix'), uniqueString(resourceGroup().id))]"
    },
    "vnetName": {
      "type": "string",
      "defaultValue": "[format('{0}Vnet', parameters('prefix'))]"
    },
    "subnetName": {
      "type": "string",
      "defaultValue": "[format('{0}Subnet', parameters('prefix'))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2023-09-01",
      "name": "[parameters('vnetName')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "10.0.0.0/16"
          ]
        },
        "enableDdosProtection": false,
        "subnets": [
          {
            "name": "[parameters('subnetName')]",
            "properties": {
              "addressPrefix": "10.0.0.0/24",
              "serviceEndpoints": [
                {
                  "service": "Microsoft.Storage"
                }
              ],
              "delegations": [
                {
                  "name": "Microsoft.ContainerInstance.containerGroups",
                  "properties": {
                    "serviceName": "Microsoft.ContainerInstance/containerGroups"
                  }
                }
              ]
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-01-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "networkAcls": {
          "bypass": "AzureServices",
          "virtualNetworkRules": [
            {
              "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]",
              "action": "Allow",
              "state": "Succeeded"
            }
          ],
          "defaultAction": "Deny"
        },
        "allowSharedKeyAccess": true
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName'))]"
      ]
    },
    {
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
      "apiVersion": "2023-07-31-preview",
      "name": "[parameters('userAssignedIdentityName')]",
      "location": "[parameters('location')]"
    },
    {
      "type": "Microsoft.Authorization/roleAssignments",
      "apiVersion": "2022-04-01",
      "scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('storageAccountName'))]",
      "name": "[guid(tenantResourceId('Microsoft.Authorization/roleDefinitions', '69566ab7-960f-475b-8e7c-b3118f30c6bd'), resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]",
      "properties": {
        "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')), '2023-07-31-preview').principalId]",
        "roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', '69566ab7-960f-475b-8e7c-b3118f30c6bd')]",
        "principalType": "ServicePrincipal"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName'))]"
      ]
    }
  ]
}

Az üzembe helyezés teszteléséhez az alábbi ARM-sablont használhatja:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "prefix": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "utcValue": {
      "type": "string",
      "defaultValue": "[utcNow()]"
    },
    "storageAccountName": {
      "type": "string"
    },
    "vnetName": {
      "type": "string"
    },
    "subnetName": {
      "type": "string"
    },
    "userAssignedIdentityName": {
      "type": "string"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deploymentScripts",
      "apiVersion": "2023-08-01",
      "name": "[format('{0}DS', parameters('prefix'))]",
      "location": "[parameters('location')]",
      "identity": {
        "type": "userAssigned",
        "userAssignedIdentities": {
          "[format('{0}', resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')))]": {}
        }
      },
      "kind": "AzureCLI",
      "properties": {
        "forceUpdateTag": "[parameters('utcValue')]",
        "azCliVersion": "2.47.0",
        "storageAccountSettings": {
          "storageAccountName": "[parameters('storageAccountName')]"
        },
        "containerSettings": {
          "subnetIds": [
            {
              "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]"
            }
          ]
        },
        "scriptContent": "echo \"Hello world!\"",
        "retentionInterval": "P1D",
        "cleanupPreference": "OnExpiration"
      }
    }
  ]
}

Következő lépések

Ebben a cikkben megismerhette az üzembehelyezési szkriptek használatát. Üzembehelyezési szkript oktatóanyagának végigjárása: