Mik azok az üzembehelyezési szkriptek?
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
azdeploymentScripts
erőforráshoz. - Az
type
ésapiVersion
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 (vagyAzurePowerShell
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ó $DeploymentScriptOutputs
létrehozásával adja vissza. A példaszkript inicializálja a kivonattáblát, majd létrehoz egy úgynevezett text
kimenetet, 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.