Share via


Üzembehelyezési szkriptek használata a Bicepben

A deploymentScripts erőforrás használatával szkripteket futtathat Bicep-környezetekben, és áttekintheti a végrehajtási eredményeket. Az alábbi szkriptekkel egyéni lépéseket hajthat végre, például:

  • Felhasználók hozzáadása egy címtárhoz.
  • Adatsík-műveletek végrehajtása; például blobok másolása vagy adatbázis magolása.
  • 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 szkriptek előnyei a következők:

  • Könnyen kódokat, használatot és hibakeresést végezhetnek. A kedvenc fejlesztői környezetekben üzembehelyezési szkripteket fejleszthet. A szkriptek beágyazhatók Bicep-fájlokba 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.
  • Engedélyezheti a parancssori argumentumok átadását 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 Instances elérhető. További információ: Erőforrás-rendelkezésre állás az Azure-tárolópéldányokhoz az Azure-régiókban.

Figyelmeztetés

Az üzembehelyezési szkriptszolgáltatás két további erőforrást igényel a szkriptek futtatásához és hibaelhárításához: egy tárfiókot és egy tárolópéldányt. A szolgáltatás általában az üzembe helyezési szkript befejeződése után törli ezeket az erőforrásokat. Ezekért az erőforrásokért díjat kell fizetnie, amíg el nem távolítja őket.

A díjszabással kapcsolatos informá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.

Képzési erőforrások

Ha lépésről lépésre szeretné megismerni az üzembehelyezési szkripteket, tekintse meg a Bicep- és 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-verziójának vagy újabb verziójának 2020-10-01 esetében két egyszerű résztvevő vesz részt az üzembehelyezési szkript végrehajtásában:

  • Üzembe helyezési egyszerű: Ez az egyszerű fájl a Bicep-fájl üzembe helyezésére szolgál. Olyan mögöttes erőforrásokat hoz létre, amelyek a központi telepítési szkript erőforrásának futtatásához szükségesek – egy tárfiókot és egy Azure-tárolópéldányt. 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 Instances erőforrás-szolgáltatók nincsenek regisztrálva, mindenképpen adja hozzá Microsoft.Storage/register/action és Microsoft.ContainerInstance/register/action.

  • Központi telepítési szkriptnév: Ez a rendszernév csak akkor szükséges, ha az üzembehelyezési szkriptnek hitelesítenie kell az Azure-ban, és meghívnia kell az Azure CLI-t vagy a 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 az üzembehelyezési szkript erőforrásszintaxisát.) Ha felhasználó által hozzárendelt felügyelt identitást ad meg, a szkriptszolgáltatás az üzembehelyezé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 hívja meg az Csatlakozás-AzAccount vagy az login metódust az üzembehelyezési szkriptben.

    Felügyelt identitás használata esetén az üzembe helyezési tagnak szüksége van a felügyelt identitás erőforrásához hozzárendelt beépített felügyelt identitáskezelői szerepkörre.

Jelenleg nincs beépített szerepkör az üzembehelyezési szkript engedélyeinek konfigurálásához.

Üzembehelyezési szkriptek létrehozása

Az alábbi példa egy egyszerű Bicep-fájlt mutat be egy üzembehelyezési szkripterőforrással. A szkript egy sztringparamétert vesz fel, és létrehoz egy másik sztringet.

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'inlineCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: 'echo "The argument is ${name}."; jq -n -c --arg st "Hello ${name}" \'{"text": $st}\' > $AZ_SCRIPTS_OUTPUT_PATH'
    retentionInterval: 'PT1H'
  }
}

output text string = deploymentScript.properties.outputs.text

Az üzembehelyezési szkript erőforrásainak létrehozásáról további információt az üzembehelyezési szkriptek létrehozása című témakörben talál. Az üzembehelyezési parancsfájl-erőforrás szkriptjeinek létrehozásához javasoljuk, hogy hozzon létre egy dedikált szkriptfejlesztési környezetet, például egy Azure-tárolópéldányt vagy egy Docker-rendszerképet. A szkriptek fejlesztése és alapos tesztelése után integrálhatja vagy meghívhatja a szkriptfájlokat az üzembehelyezési szkript erőforrásából. További információ: Szkriptfejlesztési környezetek konfigurálása.

Mentse a szkriptet egy inlineScript.bicep fájlban, majd telepítse az erőforrást a következő szkripttel:

$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 -TemplateFile "inlineScript.bicep"

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

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

Üzembehelyezési parancsfájl-erőforrás üzembe helyezésekor szüksége lesz egy tárfiókra a felhasználói szkript, a végrehajtási eredmények és a stdout fájl tárolásához. Megadhatja saját tárfiókját. További információ: Meglévő tárfiók használata.

A saját tárfiók megadásának alternatíva a beállítás cleanupPreferenceOnExpiration. Ezután konfiguráljon retentionInterval egy időtartamot, amely elegendő időt biztosít a kimenetek áttekintésére a tárfiók eltávolítása előtt. További információ: Az üzembehelyezési szkript erőforrásainak törlése.

Adja hozzá a cleanupPreference tulajdonságot az előző Bicep-fájlhoz, és állítsa az értéket a következőre OnExpiration: . Az alapértelmezett érték Always. Emellett állítsa ( rentalInterval egy óra) vagy rövidebb értékre PT1H .

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'inlineCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: 'echo "The argument is ${name}."; jq -n -c --arg st "Hello ${name}" \'{"text": $st}\' > $AZ_SCRIPTS_OUTPUT_PATH'
    cleanupPreference: 'OnExpiration'
    retentionInterval: 'PT1H'
  }
}

output text string = deploymentScript.properties.outputs.text

A Bicep-fájl sikeres üzembe helyezése után az eredmények ellenőrzéséhez használja az Azure Portalt, az Azure CLI-t, az Azure PowerShellt vagy a REST API-t.

Azure Portal

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 Áttekintés lap az üzembehelyezési szkript erőforrásán kívül a két támogató erőforrást is felsorolja. A támogató erőforrások a megőrzési idő lejárta után törlődnek.

Figyelje meg, hogy mindkét támogató erőforrás neve tartalmazza az azscripts utótagot, mert ezek az erőforrások automatikusan létrejönnek. A támogató erőforrások azonosításának másik módja a címkék használata.

Képernyőkép egy üzembehelyezési szkript erőforráscsoportról.

Válassza ki a telepítési szkript erőforrását a listából. Az üzembehelyezési szkript erőforrásának Áttekintés lapján fontos információk jelennek meg az erőforrásról, például a kiépítési állapotról és a két támogató erőforrásról (Tárfiók és Tárolópéldány). A Naplók területen a szkript nyomtatási szövege látható.

Képernyőkép az üzembehelyezési szkript erőforrásáról.

Válassza a Kimenetek lehetőséget a szkript kimeneteinek megjelenítéséhez.

Képernyőkép az üzembehelyezési szkript kimenetéről.

Térjen vissza az erőforráscsoporthoz, válassza ki a tárfiókot, válassza a Fájlmegosztások lehetőséget, majd válassza ki a megosztás nevét hozzáfűző azscriptekkel rendelkező fájlmegosztást. Két mappa jelenik meg a listában: azscriptinput és azscriptoutput. A kimeneti mappa egy executionresult.json fájlt és egy szkriptkimeneti fájlt tartalmaz. A executionresult.json fájl tartalmazza a szkriptvégrehajtási hibaüzenetet. A kimeneti fájl csak akkor jön létre, ha sikeresen futtatja a szkriptet.

Képernyőkép az üzembehelyezési szkript kimeneti mappájának tartalmáról.

A bemeneti mappa tartalmazza a rendszerszkriptfájlt és a felhasználói üzembehelyezési szkriptfájlt. 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.

Azure CLI

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 az alábbi példához hasonló:

{
  "arguments": "John Dole",
  "azCliVersion": "2.52.0",
  "cleanupPreference": "OnExpiration",
  "containerSettings": {
    "containerGroupName": null
  },
  "environmentVariables": null,
  "forceUpdateTag": null,
  "id": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/dsDemo/providers/Microsoft.Resources/deploymentScripts/inlineCLI",
  "identity": null,
  "kind": "AzureCLI",
  "location": "centralus",
  "name": "inlineCLI",
  "outputs": {
    "text": "Hello John Dole"
  },
  "primaryScriptUri": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "dsDemo",
  "retentionInterval": "1:00:00",
  "scriptContent": "echo \"The argument is John Dole.\"; jq -n -c --arg st \"Hello John Dole\" '{\"text\": $st}' > $AZ_SCRIPTS_OUTPUT_PATH",
  "status": {
    "containerInstanceId": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/dsDemo/providers/Microsoft.ContainerInstance/containerGroups/jgczqtxom5oreazscripts",
    "endTime": "2023-12-11T20:20:12.149468+00:00",
    "error": null,
    "expirationTime": "2023-12-11T21:20:12.149468+00:00",
    "startTime": "2023-12-11T20:18:26.674492+00:00",
    "storageAccountId": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/dsDemo/providers/Microsoft.Storage/storageAccounts/jgczqtxom5oreazscripts"
  },
  "storageAccountSettings": null,
  "supportingScriptUris": null,
  "systemData": {
    "createdAt": "2023-12-11T19:45:32.239063+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-12-11T20:18:26.183565+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "timeout": "1 day, 0:00:00",
  "type": "Microsoft.Resources/deploymentScripts"
}

Azure PowerShell

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ő példához hasonló:

Name                : inlinePS
Id                  : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/dsDemo/providers/Microsoft.Resources/deploymentScripts/inlinePS
ResourceGroupName   : dsDemo
Location            : centralus
SubscriptionId      : 01234567-89AB-CDEF-0123-456789ABCDEF
ProvisioningState   : Succeeded
Identity            :
ScriptKind          : AzurePowerShell
AzPowerShellVersion : 10.0
StartTime           : 12/11/2023 9:45:50 PM
EndTime             : 12/11/2023 9:46:59 PM
ExpirationDate      : 12/11/2023 10:46:59 PM
CleanupPreference   : OnExpiration
StorageAccountId    : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/dsDemo/providers/Microsoft.Storage/storageAccounts/ee5o4rmoo6ilmazscripts
ContainerInstanceId : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/dsDemo/providers/Microsoft.ContainerInstance/containerGroups/ee5o4rmoo6ilmazscripts
Outputs             :
                      Key                 Value
                      ==================  ==================
                      text                Hello John Dole.

RetentionInterval   : PT1H
Timeout             : P1D

REST API

A REST API-val információkat kaphat az üzembehelyezési szkript erőforrásáról az erőforráscsoport szintjén és az előfizetés szintjén:

/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. Az ARMClient nem támogatott Microsoft-eszköz.

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

A kimenet a következő példához hasonló:

{
  "kind": "AzureCLI",
  "identity": null,
  "location": "centralus",
  "systemData": {
    "createdAt": "2023-12-11T19:45:32.239063+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-12-11T20:18:26.183565+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "properties": {
    "provisioningState": "Succeeded",
    "azCliVersion": "2.52.0",
    "scriptContent": "echo \"The argument is John Dole.\"; jq -n -c --arg st \"Hello John Dole\" '{\"text\": $st}' > $AZ_SCRIPTS_OUTPUT_PATH",
    "arguments": "John Dole",
    "retentionInterval": "1:00:00",
    "timeout": "1 day, 0:00:00",
    "containerSettings": {
      "containerGroupName": null
    },
    "status": {
      "containerInstanceId": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/dsDemo/providers/Microsoft.ContainerInstance/containerGroups/jgczqtxom5oreazscripts",
      "endTime": "2023-12-11T20:20:12.149468+00:00",
      "error": null,
      "expirationTime": "2023-12-11T21:20:12.149468+00:00",
      "startTime": "2023-12-11T20:18:26.674492+00:00",
      "storageAccountId": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/dsDemo/providers/Microsoft.Storage/storageAccounts/jgczqtxom5oreazscripts"
    },
    "outputs": {
      "text": "Hello John Dole"
    },
    "cleanupPreference": "OnSuccess"
  },
  "id": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/dsDemo/providers/Microsoft.Resources/deploymentScripts/inlineCLI",
  "type": "Microsoft.Resources/deploymentScripts",
  "name": "inlineCLI",
}

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.


Üzembehelyezési szkript hibakódjai

Az alábbi táblázat az üzembehelyezési szkript hibakódjait sorolja fel:

Hibakód Leírás
DeploymentScriptInvalidOperation A Bicep-fájlban található üzembehelyezési szkript erőforrásdefiníciója érvénytelen tulajdonságneveket tartalmaz.
DeploymentScriptResourceConflict Nem törölhet üzembehelyezési szkripterőforrást, ha nemtermi állapotban van, és a végrehajtás nem haladta meg az egy ó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 A központi telepíté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.
DeploymentScriptExistingStorageNotInSameSubscriptionAsDeploymentScript Az üzembe helyezés során biztosított meglévő tároló nem található abban az előfizetésben, amelyben a szkript üzembe van helyezve.
DeploymentScriptStorageAccountInvalidKind Az adott vagy BlobStorage típusú meglévő tárfiók nem támogatja a BlobBlobStorage 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áért lásd : Meglévő tárfiók használata.
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 rendelkezik szolgáltatásvégponttal. A szolgáltatásvégponttal rendelkező tárfiókok nem támogatottak.
DeploymentScriptStorageAccountInvalidAccessKey Érvénytelen hozzáférési kulcs lett megadva a meglévő tárfiókhoz.
DeploymentScriptStorageAccountInvalidAccessKeyFormat A tárfiókkulcs formátuma érvénytelen. 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 nem tudott bejelentkezni 10 kísérlet után, egyperces időközökkel.
DeploymentScriptContainerGroupNotFound Egy külső eszköz vagy folyamat törölt egy tárolócsoportot, amelyet az üzembehelyezési szkriptszolgáltatás hozott létre.
DeploymentScriptDownloadFailure Nem sikerült letölteni egy támogató szkriptet. Lásd: Támogató szkriptek használata.
DeploymentScriptError A felhasználói szkript hibát jelzett.
DeploymentScriptBootstrapScriptExecutionFailed A bootstrap-szkript hibát jelzett. A bootstrap-szkript az a rendszerszkript, amely az üzembehelyezési szkript végrehajtását vezényli.
DeploymentScriptExecutionFailed Ismeretlen hiba történt az üzembehelyezési szkript végrehajtása során.
DeploymentScriptContainerInstancesServiceUnavailable A tárolópéldány létrehozása során az Azure Container Instances szolgáltatás "szolgáltatás nem érhető el" hibaüzenetet jelzett.
DeploymentScriptContainerGroupInNonterminalState Egy tárolópéldány létrehozása során egy másik üzembehelyezési szkript ugyanazt a tárolópéldánynevet használta ugyanabban a hatókörben (ugyanaz az előfizetés, erőforráscsoport neve és erőforrásnév).
DeploymentScriptContainerGroupNameInvalid A megadott tárolópéldánynév nem felel meg az Azure Container Instances követelményeinek. Lásd: Az Azure Container Instances gyakori hibáinak elhárítása.

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

Néhány további konfigurációval futtathat üzembehelyezési szkripteket magánhálózatokon. További információ: Privát virtuális hálózat elérése.

Következő lépések

Ebben a cikkben megismerhette az üzembehelyezési szkriptek használatát. További információ: