Mik azok az üzembehelyezési szkriptek?

Befejeződött

Ebben a leckében megtudhatja, hogyan terjesztheti ki az erőforrás az deploymentScripts Azure Resource Manager-sablonokat.

Az ARM-sablonok csodálatos dolgok. Ezek használatával deklarálhatja a felhőinfrastruktúra kívánt állapotát, és az API-k és a szolgáltatások eldönthetik, hogyan érheti el. Időnként azonban olyan műveleteket kell végrehajtania, amelyek nem az Azure Resource Manager által biztosítottak.

Mik azok az üzembehelyezési szkriptek?

deploymentScripts az erőforrások PowerShell- vagy Bash-szkriptek, amelyek docker-tárolóban futnak a sablontelepítés részeként. Az alapértelmezett tárolórendszerképek az Azure CLI-vel vagy az Azure PowerShell-lel érhetők el. Ezek a szkriptek az ARM-sablon feldolgozása során futnak, így egyéni viselkedést adhat hozzá az üzembehelyezési folyamathoz.

Az üzembehelyezési szkriptek felügyelt identitást használnak az Azure-ban való hitelesítéshez. A felügyelt identitás olyan szolgáltatásnév, amelynek hitelesítő adatait és életciklusát az Azure platform felügyeli. Az Azure PowerShell vagy az Azure CLI-parancsok ezt az identitást használják a környezettel kapcsolatos működéshez. Mivel hozzárendeli az identitást, ön határozza meg, hogy az erőforrás milyen deploymentScripts hatással lehet.

Az deploymentScripts erőforrás olyan kimenetet hoz létre, amelyet az üzembe helyezés más erőforrásai használhatnak. Ezután megkeresheti egy külső rendszer adatait, vagy adatokat adhat meg a környezet aktuális állapota alapján, hogy hatással legyen az üzemelő példány többi részére.

Az üzembehelyezési szkriptek működése

Az deploymentScripts erőforrások egy felhasználó által biztosított szkriptet (akár a sablonból, akár az URI-ból) és esetleg néhány támogató szkriptet használnak, és egy Azure-tárolópéldányban futtatják őket. A tárolópéldányhoz az Ön által megadott felügyelt identitás van hozzárendelve. A szkriptek és kimeneteik egy Azure Storage-fiók fájlmegosztásában vannak tárolva.

A sablon üzembe helyezésekor ellenőrzi, hogy van-e meglévő deploymentScripts erőforrás a célzott erőforráscsoportban. Ha igen, összehasonlítja a tulajdonságokat. Ha minden egyezik, semmi új nem történik. Ha az erőforrás nem létezik vagy módosult, az Azure Resource Manager létrehoz egy új tárolópéldányt, és a tárolópéldányon belül futtatja az üzembehelyezési szkripteket. A megadott kimenetek vissza lesznek adva az Azure Resource Managernek az üzembe helyezés későbbi szakaszában való használatra.

Üzembehelyezési szkriptstruktúra

Ha egyéni viselkedést szeretne hozzáadni egy ARM-sablonhoz, először az deploymentScripts erőforrással kell kezdenie. Legalább meg kell adnia a következő gyakori részleteket:

  • A name az deploymentScripts erőforráshoz.
  • Az type és apiVersion az értékek.
  • Az a hely (location érték), ahol a támogató erőforrások létrejönnek.
  • properties Üres objektum. Rövidesen hozzá fog jutni.

Két deploymentScripts-specifikus értékre van szükség:

  • kind: A futtatni kívánt szkript típusa (vagy AzurePowerShell AzureCLI).

    {
      "type": "Microsoft.Resources/deploymentScripts",
      "apiVersion": "2020-10-01",
      "name": "myFirstDeploymentScript",
      "location": "[resourceGroup().location]",
      "kind": "AzurePowerShell",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid": {}
        }
      }
    }
    
    resource myFirstDeploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
      name: 'myFirstDeploymentScript'
      location: resourceGroup().location
      kind: 'AzurePowerShell'
      identity: {
        type: 'UserAssigned'
        userAssignedIdentities: {
          '/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid': {}
        }
      }
    }
    
  • identity: A tárolópéldány által használt felügyelt identitás. A felügyelt identitást előre is létrehozhatja, és az alábbi példához hasonlóan megadhatja, vagy létrehozhatja a sablonban, és hivatkozhat rá (ezt fogja tenni a következő gyakorlatban).

    {
      "type": "Microsoft.Resources/deploymentScripts",
      "apiVersion": "2020-10-01",
      "name": "myFirstDeploymentScript",
      "location": "[resourceGroup().location]",
      "kind": "AzurePowerShell",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid": {}
        }
      }
    }
    
    resource myFirstDeploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
      name: 'myFirstDeploymentScript'
      location: resourceGroup().location
      kind: 'AzurePowerShell'
      identity: {
        type: 'UserAssigned'
        userAssignedIdentities: {
          '/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid': {}
        }
      }
    }
    

Miután beállította ezeket az elemeket, továbbléphet az properties deploymentScripts erőforrás szakaszára. Ennek fő része az scriptContent, amely megadja a ténylegesen végrehajtandó szkriptet:

"properties": {
  "scriptContent": "
      $output = 'Hello Learner!'
      Write-Output $output
      $DeploymentScriptOutputs = @{}
      $DeploymentScriptOutputs['text'] = $output
  ",
}
properties: {
  scriptContent: '''
    $output = 'Hello Learner!'
    Write-Output $output
    $DeploymentScriptOutputs = @{}
    $DeploymentScriptOutputs['text'] = $output
  '''
}

Figyelje meg, hogy a scriptContent függvény többsoros sztringet használ. A Bicep-ben a sztring előtt és után három idézőjel''' használatával adhat meg többsoros sztringet.

Az üzembe helyezési szkriptek gyakran adják vissza a kimeneteket az üzembe helyezésnek. Ha például szkripttel keres egy API-ból származó információkat, az adatokat kimenetként továbbíthatja az üzembe helyezésnek. Az üzembe helyezés más erőforrásai ezután saját definícióikban használhatják az információkat.

PowerShell-szkriptek esetén a kimeneteket egy kivonattáblának nevezett változó $DeploymentScriptOutputslétrehozásával adja vissza. A példaszkript inicializálja a kivonattáblát, majd létrehoz egy úgynevezett textkimenetet, amely a helyi változóból veszi az $output értékét:

$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
$output = 'Hello Learner!'
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output

Tipp.

Üzembehelyezési szkripteket is írhat a Bashben. Ha Bash-szkriptből szeretne kimeneteket létrehozni, létre kell hoznia egy JSON-fájlt a AZ_SCRIPTS_OUTPUT_PATH környezeti változó által megadott helyen.

properties A szakaszban megadhatja a különböző lehetőségeket deploymentScripts is. Ebben a modulban egyszerűnek tartjuk, és csak annyit adunk hozzá, hogy a szkript futtasson. Legalább meg kell adnia az Azure PowerShell vagy az Azure CLI használni kívánt verzióját, egy futtatandó szkriptet és egy megőrzési időközt.

A megőrzési időköz az, hogy mennyi ideig kell megőrizni az eredményeket, ha meg szeretné tartani az erőforrásokat. Alapértelmezés szerint a szkript futtatása után az eredmények el lesznek távolítva.

"properties": {
  "azPowerShellVersion": "3.0",
  "scriptContent": "
      $output = 'Hello Learner!'
      Write-Output $output
      $DeploymentScriptOutputs = @{}
      $DeploymentScriptOutputs['text'] = $output
  ",
  "retentionInterval": "P1D"
}
properties: {
  azPowerShellVersion: '3.0'
  scriptContent: '''
    $output = 'Hello Learner!'
    Write-Output $output
    $DeploymentScriptOutputs = @{}
    $DeploymentScriptOutputs['text'] = $output
  '''
  retentionInterval: 'P1D'
}

A teljes sablon a következőképpen nézne ki:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Resources/deploymentScripts",
      "apiVersion": "2020-10-01",
      "name": "myFirstDeploymentScript",
      "location": "[resourceGroup().location]",
      "kind": "AzurePowerShell",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid": {}
        }
      },
      "properties": {
        "azPowerShellVersion": "3.0",
        "scriptContent": "
            $output = 'Hello Learner!'
            Write-Output $output
            $DeploymentScriptOutputs = @{}
            $DeploymentScriptOutputs['text'] = $output
        ",
        "retentionInterval": "P1D"
      }
    }
  ],
  "outputs": {
    "scriptResult": {
      "type": "string",
      "value": "[reference('myFirstDeploymentScript').outputs.text]"
    }
  }
}
resource myFirstDeploymentScript 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: 'myFirstDeploymentScript'
  location: resourceGroup().location
  kind: 'AzurePowerShell'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/deploymenttest/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myscriptingid': {}
    }
  }
  properties: {
    azPowerShellVersion: '3.0'
    scriptContent: '''
      $output = 'Hello Learner!'
      Write-Output $output
      $DeploymentScriptOutputs = @{}
      $DeploymentScriptOutputs['text'] = $output
    '''
    retentionInterval: 'P1D'
  }
}

output scriptResult string = myFirstDeploymentScript.properties.outputs.text

Szkriptfájlok belefoglalása

A szkriptek sablonokba ágyazása nehézkes, nehezen olvasható és érthető, és nehezen módosítható. A Bicep a loadTextContent() függvény használatával ágyaz be egy külső szövegfájlt az üzembe helyezésbe. Amikor a Bicep átalakítja a sablont JSON-ra, beágyazza a külső fájlt az általa kibocsátott sablonba.

Tegyük fel, hogy a Myscript.ps1 nevű PowerShell-fájl ugyanabban a mappában van, mint a Bicep-sablon. A Bicep-et a következőképpen adhatja meg a fájl beágyazásához:

properties: {
  azPowerShellVersion: '3.0'
  scriptContent: loadTextContent('myscript.ps1')
  retentionInterval: 'P1D'
}

Az erőforrás összes tulajdonságát megtalálja az deploymentScripts ARM-sablon referenciadokumentációjában.