Vývoj skriptu nasazení v Bicep

Tento článek obsahuje příklady, které vám ukážou , jak vyvíjet skript nasazení v Bicep.

Prostředky skriptu nasazení můžou mít dobu trvání nasazení. Pro efektivní vývoj a testování těchto skriptů zvažte vytvoření vyhrazeného vývojového prostředí, jako je instance kontejneru Azure (ACI) nebo instance Dockeru. Další informace najdete v tématu Vytvoření vývojového prostředí.

Syntaxe

Následující soubor Bicep je příkladem prostředku skriptu nasazení. Další informace najdete v nejnovějším schématu skriptu nasazení.

resource <symbolic-name> 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: '<resource-name>'
  location: resourceGroup().location
  tags: {}
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '<user-assigned-identity-id>': {}
    }
  }
  kind: 'AzureCLI'
  properties: {
    storageAccountSettings: {
      storageAccountName: '<storage-account-name>'
      storageAccountKey: '<storage-account-key>'
    }
    containerSettings: {
      containerGroupName: '<container-group-name>'
      subnetIds: [
        {
          id: '<subnet-id>'
        }
      ]
    }
    environmentVariables: []
    azCliVersion: '2.52.0'
    arguments: '<script-arguments>'
    scriptContent: '''<azure-cli-or-azure-powershell-script>''' // or primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/inlineScript.ps1'
    supportingScriptUris: []
    timeout: 'P1D'
    cleanupPreference: 'OnSuccess'
    retentionInterval: 'P1D'
    forceUpdateTag: '1'
  }
}

Ve skriptu nasazení zadejte tyto hodnoty vlastností:

  • tags: Zadejte značky skriptu nasazení. Pokud služba skriptu nasazení vytvoří dva podpůrné prostředky (účet úložiště a instanci kontejneru), předají se značky oběma prostředkům. Značky můžete použít k identifikaci prostředků. Dalším způsobem, jak tyto podpůrné prostředky identifikovat, je jejich přípony, které obsahují azscripts. Další informace najdete v tématu Monitorování a řešení potíží se skripty nasazení.

  • identity: Pro verzi 2020-10-01 rozhraní API skriptu nasazení nebo novější je spravovaná identita přiřazená uživatelem nepovinná, pokud ve skriptu nepotřebujete provádět žádné akce specifické pro Azure nebo spouštíte skript nasazení v privátní síti. Verze 2019-10-01-preview rozhraní API vyžaduje spravovanou identitu, protože ji služba skriptů nasazení používá ke spuštění skriptů.

    Když zadáte identity vlastnost, služba skript volání Connect-AzAccount -Identity před vyvoláním uživatelského skriptu. V současné době se podporuje jenom spravovaná identita přiřazená uživatelem. Pokud se chcete přihlásit pomocí jiné identity ve skriptu nasazení, můžete volat Connect-AzAccount. Další informace najdete v tématu Konfigurace minimálních oprávnění.

  • kind: Zadejte typ skriptu nebo AzurePowerShell AzureCLI. Kromě kindtoho musíte zadat azPowerShellVersion vlastnost nebo azCliVersion vlastnost.

  • storageAccountSettings: Zadejte nastavení pro použití existujícího účtu úložiště. Pokud storageAccountName není zadaný, účet úložiště se vytvoří automaticky. Další informace najdete v tématu Použití existujícího účtu úložiště.

  • containerSettings: Přizpůsobte název instance kontejneru Azure. Informace o konfiguraci názvu skupiny kontejneru najdete v části Konfigurace instance kontejneru dále v tomto článku. Informace o konfiguraci spuštění subnetIds skriptu nasazení v privátní síti naleznete v tématu Přístup k privátní virtuální síti.

  • environmentVariables: Zadejte proměnné prostředí, které se mají předat skriptu.

  • azPowerShellVersion/azCliVersion: Zadejte verzi modulu, která se má použít.

    Podívejte se na seznam podporovaných verzí Azure CLI.

    Důležité

    Skript nasazení používá dostupné image rozhraní příkazového řádku z Registr artefaktů Microsoft. Certifikace image rozhraní příkazového řádku pro skript nasazení obvykle trvá přibližně jeden měsíc. Nepoužívejte verze rozhraní příkazového řádku vydané během posledních 30 dnů. Pokud chcete zjistit data vydání imagí, přečtěte si poznámky k verzi Azure CLI. Pokud používáte nepodporovanou verzi, zobrazí se v chybové zprávě seznam podporovaných verzí.

  • arguments: Zadejte hodnoty parametrů. Hodnoty jsou oddělené mezerami.

    Skript nasazení rozdělí argumenty do pole řetězců vyvoláním systémového volání CommandLineToArgvW . Tento krok je nezbytný, protože argumenty se předávají jako vlastnost příkazu službě Azure Container Instances a vlastnost příkazu je pole řetězců.

    Pokud argumenty obsahují řídicí znaky, poklikejte uvozené znaky. Například v předchozí ukázkové syntaxi Bicep je -name \"John Dole\"argument . Uchvácený řetězec je -name \\"John Dole\\".

    Pokud chcete předat parametr Bicep typu object jako argument, převeďte objekt na řetězec pomocí funkce string() a potom pomocí funkce replace() nahraďte všechny uvozovky (") dvojitými uvozovkami (\\"). Příklad:

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

    Další informace najdete v ukázkovém souboru Bicep.

  • scriptContent: Zadejte obsah skriptu. Může to být vložený skript nebo soubor externího skriptu, který jste naimportovali pomocí funkce loadTextContent . Další informace najdete v části Vložený vs. externí soubor dále v tomto článku. Pokud chcete spustit externí skript, použijte primaryScriptUri místo toho.

  • primaryScriptUri: Zadejte veřejně přístupnou adresu URL primárního skriptu nasazení s podporovanými příponami souborů. Další informace naleznete v části Použití externích skriptů dále v tomto článku.

  • supportingScriptUris: Zadejte pole veřejně přístupných adres URL pro podpůrné soubory, které jsou volána buď nebo scriptContent primaryScriptUri. Další informace najdete v části Vložený vs. externí soubor dále v tomto článku.

  • timeout: Zadejte maximální povolenou dobu spuštění skriptu ve formátu ISO 8601. Výchozí hodnota je P1D.

  • forceUpdateTag: Změna této hodnoty mezi nasazeními souborů Bicep vynutí opětovné spuštění skriptu nasazení. Pokud použijete newGuid() funkci nebo utcNow() funkci, můžete ji použít pouze ve výchozí hodnotě parametru. Další informace najdete v části Spuštění skriptu více než jednou později v tomto článku.

  • cleanupPreference. Určete předvolbu pro vyčištění dvou podpůrných prostředků nasazení (účet úložiště a instance kontejneru), když se spuštění skriptu dostane do stavu terminálu. Výchozí nastavení je Always, které volá odstranění podpůrných prostředků bez ohledu na stav terminálu (Succeeded, Failednebo Canceled). Další informace najdete v části Vyčištění prostředků skriptu nasazení dále v tomto článku.

  • retentionInterval: Zadejte interval, pro který služba uchovává prostředek skriptu nasazení po spuštění skriptu nasazení dosáhne stavu terminálu. Prostředek skriptu nasazení se odstraní, když vyprší platnost této doby trvání. Doba trvání je založena na vzoru ISO 8601. Interval uchovávání je mezi 1 hodinou (PT1H) a 26 hodinami (PT26H). Tuto vlastnost použijete, pokud cleanupPreference je nastavena na OnExpirationhodnotu . Další informace najdete v části Vyčištění prostředků skriptu nasazení dále v tomto článku.

Další ukázky

  • Ukázka 1: Vytvořte trezor klíčů a pomocí skriptu nasazení přiřaďte k trezoru klíčů certifikát.
  • Ukázka 2: Vytvoření skupiny prostředků na úrovni předplatného, vytvoření trezoru klíčů ve skupině prostředků a následné přiřazení certifikátu k trezoru klíčů pomocí skriptu nasazení
  • Ukázka 3: Vytvoření spravované identity přiřazené uživatelem, přiřazení role přispěvatele k identitě na úrovni skupiny prostředků, vytvoření trezoru klíčů a následné přiřazení certifikátu k trezoru klíčů pomocí skriptu nasazení
  • Ukázka 4: Ručně vytvořte spravovanou identitu přiřazenou uživatelem a přiřaďte jí oprávnění k vytváření aplikací Microsoft Entra pomocí rozhraní Microsoft Graph API. V souboru Bicep pomocí skriptu nasazení vytvořte aplikaci Microsoft Entra a instanční objekt a výstup ID objektu a ID klienta.

Vložený vs. externí soubor

Skript nasazení se může nacházet v souboru Bicep nebo ho můžete uložit externě jako samostatný soubor.

Použití vloženého skriptu

Následující soubor Bicep ukazuje, jak používat vložený skript.

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: 'set -e; output="Hello $1"; echo $output'
    retentionInterval: 'P1D'
  }
}

Pokud příkaz vrátí nenulový stav, zahrňte set -e do skriptu povolení okamžitého ukončení. Tento postup zjednodušuje procesy ladění chyb.

Načtení souboru skriptu

Pomocí funkce loadTextContent načtěte soubor skriptu jako řetězec. Tato funkce umožňuje udržovat skript v externím souboru a přistupovat k němu jako skript nasazení. Cesta zadaná pro soubor skriptu je relativní vzhledem k souboru Bicep.

Vložený skript můžete extrahovat z předchozího souboru Bicep do souboru hello.sh a pak ho umístit do podsložky s názvem skripty.

output="Hello $1"
echo $output

Potom můžete předchozí soubor Bicep upravit jako v následujícím příkladu:

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

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'loadTextContentCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: loadTextContent('./scripts/hello.sh')
    retentionInterval: 'P1D'
  }
}

Použití externích skriptů

Místo vložených skriptů můžete použít soubory externích skriptů. Podporují se jenom primární skripty PowerShellu s rozšířením .ps1 . U skriptů rozhraní příkazového řádku můžou primární skripty přenášet všechna platná rozšíření skriptů Bash nebo vůbec žádné rozšíření. Pokud chcete použít soubory externích skriptů, prohodte scriptContent ho pomocí primaryScriptUri.

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

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'externalScriptCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/hello.sh'
    arguments: '-name ${name}'
    retentionInterval: 'P1D'
  }
}

Soubory externích skriptů musí být přístupné. Pokud chcete pomoct zabezpečit soubory skriptu uložené v účtech úložiště Azure, vygenerujte token sdíleného přístupového podpisu (SAS) a zahrňte ho do identifikátoru URI šablony. Nastavte vypršení platnosti tak, aby bylo možné dokončit nasazení dostatek času. Další informace najdete v tématu Nasazení privátní šablony ARM s tokenem SAS.

Zodpovídáte za zajištění integrity skriptu, na který skript nasazení odkazuje (nebo primaryScriptUri supportingScriptUris). Odkazujte pouze na skripty, kterým důvěřujete.

Použití podpůrných skriptů

Složité logiky můžete oddělit do jednoho nebo více podpůrných souborů skriptů. supportingScriptUris Pomocí vlastnosti v případě potřeby zadejte pole identifikátorů URI podpůrným souborům skriptu.

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

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'supportingScriptCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: 'output="Hello $1"; echo $output; ./hello.sh "$1"'
    supportingScriptUris: [
      'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/master/samples/deployment-script/hello.sh'
    ]
    retentionInterval: 'P1D'
  }
}

Podpůrné soubory skriptů můžete volat z vložených skriptů i souborů primárních skriptů. Podpůrné soubory skriptů nemají žádná omezení přípony souboru.

Podpůrné soubory se zkopírují do azscripts/azscriptinput za běhu. Relativní cestu použijte k odkazování na podpůrné soubory z vložených skriptů a souborů primárních skriptů.

Přístup k prostředkům Azure

Pokud chcete získat přístup k prostředkům Azure, musíte tento identity prvek nakonfigurovat. Následující soubor Bicep ukazuje, jak načíst seznam trezorů klíčů Azure. Udělení oprávnění pro správu přiřazení uživatele pro přístup k trezoru klíčů je také nezbytné.

param identity string
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'listKvCLI'
  location: location
  kind: 'AzureCLI'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${identity}': {}
    }
  }
  properties: {
    azCliVersion: '2.52.0'
    scriptContent: 'result=$(az keyvault list); echo $result | jq -c \'{Result: map({id: .id})}\' > $AZ_SCRIPTS_OUTPUT_PATH'
    retentionInterval: 'P1D'
  }
}

output result object = deploymentScript.properties.outputs

Poznámka:

Logika opakování pro přihlášení k Azure je teď integrovaná do skriptu obálky. Pokud udělíte oprávnění ve stejném souboru Bicep jako skripty nasazení, služba skriptů nasazení opakuje přihlášení po dobu 10 minut (s 10sekundovými intervaly), dokud se přiřazení role spravované identity nereplikuje.

Práce s výstupy

Přístup ke zpracování výstupů se liší podle typu skriptu, který používáte – Azure CLI nebo Azure PowerShellu.

Skript nasazení Azure CLI používá proměnnou prostředí s názvem AZ_SCRIPTS_OUTPUT_PATH označující umístění souboru pro výstupy skriptu. Když spouštíte skript nasazení v souboru Bicep, prostředí Bash automaticky nakonfiguruje tuto proměnnou prostředí za vás. Její předdefinovaná hodnota je nastavena jako /mnt/azscripts/azscriptoutput/scriptoutputs.json.

Výstupy musí odpovídat platné struktuře objektu řetězce JSON. Obsah souboru by měl být formátovaný jako pár klíč/hodnota. Například uložte pole řetězců jako { "MyResult": [ "foo", "bar"] }. Ukládání pouze výsledků pole, například [ "foo", "bar" ], je neplatné.

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

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

output text string = deploymentScript.properties.outputs.text

Předchozí ukázka používá jq pro vytváření výstupů. Nástroj jq se dodává s imagemi kontejneru. Další informace najdete v tématu Konfigurace vývojového prostředí.

Používání proměnných prostředí

Předání zabezpečených řetězců do skriptu nasazení

Proměnné prostředí (EnvironmentVariable) v instancích kontejneru můžete nastavit tak, aby poskytovaly dynamickou konfiguraci aplikace nebo skriptu, který kontejner spouští. Skript nasazení zpracovává nezabezpečené a zabezpečené proměnné prostředí stejným způsobem jako Služba Azure Container Instances. Další informace najdete v tématu Nastavení proměnných prostředí v instancích kontejneru.

Maximální povolená velikost proměnných prostředí je 64 kB.

param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'passEnvVariablesCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    environmentVariables: [
      {
        name: 'UserName'
        value: 'jdole'
      }
      {
        name: 'Password'
        secureValue: 'jDolePassword'
      }
    ]
    scriptContent: 'echo "Username is :$Username"; echo "Password is: $Password"'
    retentionInterval: 'P1D'
  }
}

Proměnné prostředí definované systémem

Následující tabulka obsahuje seznam systémově definovaných proměnných prostředí:

Proměnná prostředí Výchozí hodnota (CLI) Výchozí hodnota (PowerShell) Rezervovaný systém
AZ_SCRIPTS_AZURE_ENVIRONMENT AzureCloud AzureCloud No
AZ_SCRIPTS_CLEANUP_PREFERENCE Always Always Ne
AZ_SCRIPTS_OUTPUT_PATH /mnt/azscripts/azscriptoutput/scriptoutputs.json Nelze použít Ano
AZ_SCRIPTS_PATH_INPUT_DIRECTORY /mnt/azscripts/azscriptinput|/mnt/azscripts/azscriptinput Nelze použít Ano
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY /mnt/azscripts/azscriptoutput|/mnt/azscripts/azscriptoutput Nelze použít Ano
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME userscript.sh userscript.ps1 Ano
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME primaryscripturi.config primaryscripturi.config Ano
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME supportingscripturi.config supportingscripturi.config Ano
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME scriptoutputs.json scriptoutputs.json Ano
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME executionresult.json executionresult.json Ano
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY Nelze použít Nelze použít No

Ukázku použití AZ_SCRIPTS_OUTPUT_PATHnajdete v části Práce s výstupy v dřívější části tohoto článku.

Pro přístup k proměnným prostředí použijte následující kód.

param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'listEnvVariablesCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    scriptContent: 'echo "AZ_SCRIPTS_AZURE_ENVIRONMENT is : $AZ_SCRIPTS_AZURE_ENVIRONMENT",echo "AZ_SCRIPTS_CLEANUP_PREFERENCE	is : $AZ_SCRIPTS_CLEANUP_PREFERENCE",echo "AZ_SCRIPTS_OUTPUT_PATH	is : $AZ_SCRIPTS_OUTPUT_PATH",echo "AZ_SCRIPTS_PATH_INPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_INPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME is : $AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME",echo "AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME	is : $AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME	is : $AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME	is : $AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME",echo "AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME	is : $AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME",echo "AZ_SCRIPTS_USER_ASSIGNED_IDENTITY	is : $AZ_SCRIPTS_USER_ASSIGNED_IDENTITY"'
    retentionInterval: 'P1D'
  }
}

Použití existujícího účtu úložiště

Aby se skript spustil a umožnil řešení potíží, potřebujete účet úložiště a instanci kontejneru. Můžete buď určit existující účet úložiště, nebo nechat službu skriptů vytvořit účet úložiště i instanci kontejneru automaticky.

Tady jsou požadavky pro použití existujícího účtu úložiště:

  • Následující tabulka uvádí podporované typy účtů. Sloupec pro úrovně odkazuje na hodnotu parametru nebo --sku parametru-SkuName. Sloupec podporovaných typů odkazuje na -Kind parametr nebo --kind parametr.

    Úroveň Podporovaný typ
    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

    Tyto kombinace podporují sdílené složky. Další informace najdete v tématu Vytvoření sdílené složky Azure a typů účtů úložiště.

  • Pravidla brány firewall pro účty úložiště se zatím nepodporují. Další informace najdete v tématu Konfigurace virtuálních sítí a bran firewall Azure Storage.

  • Instanční objekt nasazení musí mít oprávnění ke správě účtu úložiště, který zahrnuje čtení, vytváření a odstraňování sdílených složek. Další informace najdete v tématu Konfigurace minimálních oprávnění.

  • Vlastnost allowSharedKeyAccess účtu úložiště musí být nastavena na truehodnotu . Jediným způsobem, jak připojit účet úložiště ve službě Azure Container Instance (ACI), je prostřednictvím přístupového klíče.

Pokud chcete zadat existující účet úložiště, přidejte do elementu Microsoft.Resources/deploymentScriptsvlastnosti následující kód Bicep:

param storageAccountName string = 'myStorageAccount'

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  ...
  properties: {
    ...
    storageAccountSettings: {
      storageAccountName: storageAccountName
      storageAccountKey: listKeys(resourceId('Microsoft.Storage/storageAccounts', storageAccountName), '2023-01-01').keys[0].value
    }
  }
}

Kompletní Microsoft.Resources/deploymentScripts ukázku definice najdete v části Syntaxe výše v tomto článku.

Když použijete existující účet úložiště, služba skriptů vytvoří sdílenou složku s jedinečným názvem. Informace o tom, jak služba skriptů vyčistí sdílenou složku, najdete v části Vyčištění prostředků skriptu nasazení dále v tomto článku.

Konfigurace instance kontejneru

Skript nasazení vyžaduje novou instanci kontejneru Azure. Nemůžete zadat existující instanci kontejneru. Název skupiny kontejneru ale můžete přizpůsobit pomocí .containerGroupName Pokud nezadáte název skupiny, automaticky se vygeneruje. Pro vytvoření této instance kontejneru jsou vyžadovány další konfigurace. Další informace najdete v tématu Konfigurace minimálních oprávnění.

Můžete také zadat subnetId hodnoty pro spuštění skriptu nasazení v privátní síti. Další informace najdete v tématu Přístup k privátní virtuální síti.

param containerGroupName string = 'mycustomaci'
param subnetId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet'

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  ...
  properties: {
    ...
    containerSettings: {
      containerGroupName: containerGroupName
      subnetIds: [
        {
          id: subnetId
        }
      ]
    }
  }
}

Spuštění skriptu více než jednou

Spuštění skriptu nasazení je idempotentní operace. Pokud žádné vlastnosti deploymentScripts prostředku, včetně vloženého skriptu, neproběhne při opětovném nasazení souboru Bicep žádné změny.

Služba skriptů nasazení porovnává názvy prostředků v souboru Bicep s existujícími prostředky ve stejné skupině prostředků. Pokud chcete spustit stejný skript nasazení vícekrát, existují dvě možnosti:

  • Změňte název prostředku deploymentScripts . Například jako název prostředku nebo jako součást názvu prostředku použijte funkci UTCNow. Funkci můžete použít utcNow pouze ve výchozí hodnotě parametru.

    Změna názvu prostředku vytvoří nový deploymentScripts prostředek. Je dobré udržovat historii spouštění skriptů.

  • Zadejte jinou hodnotu ve forceUpdateTag vlastnosti. Například použijte utcNow jako hodnotu.

Napište skripty nasazení, které zajistí idempotenci, takže náhodné opakované spuštění nebude mít za následek změny systému. Pokud například vytváříte prostředek Azure prostřednictvím skriptu nasazení, ověřte jeho nepřítomnost před vytvořením a ujistěte se, že skript buď proběhne úspěšně, nebo se vyhne redundantnímu vytvoření prostředku.

Použití Microsoft Graphu ve skriptu nasazení

Skript nasazení může použít Microsoft Graph k vytvoření a práci s objekty v Microsoft Entra ID.

Příkazy

Když používáte skripty nasazení Azure CLI, můžete pomocí příkazů ve az ad skupině příkazů pracovat s aplikacemi, instančními objekty, skupinami a uživateli. Rozhraní Microsoft Graph API můžete také přímo vyvolat pomocí az rest příkazu.

Pokud používáte skripty nasazení Azure PowerShellu, můžete pomocí Invoke-RestMethod této rutiny přímo vyvolat rozhraní Microsoft Graph API.

Oprávnění

Identita, kterou skript nasazení používá, musí být autorizovaná pro práci s rozhraním Microsoft Graph API s příslušnými oprávněními pro operace, které provádí. Identitu musíte autorizovat mimo soubor Bicep, například tak, že předem vytvoříte spravovanou identitu přiřazenou uživatelem a přiřadíte jí roli aplikace pro Microsoft Graph. Další informace najdete v tomto příkladu rychlého startu.

Vyčištění prostředků skriptu nasazení

Oba automaticky vytvořené podpůrné prostředky nemohou prostředek nikdy prožít deploymentScript , pokud je neodstraní selhání. Vlastnost cleanupPreference řídí životní cyklus podpůrných prostředků. Vlastnost retentionInterval řídí životní cyklus deploymentScript prostředku. Tady je postup, jak používat tyto vlastnosti:

  • cleanupPreference: Určete předvolbu čištění dvou podpůrných prostředků, když se spuštění skriptu dostane do stavu terminálu. Podporované hodnoty jsou:

    • Always: Odstraňte dva podpůrné prostředky po spuštění skriptu v terminálovém stavu. Pokud používáte existující účet úložiště, služba skriptů odstraní sdílenou složku, kterou služba vytvořila. deploymentScripts Vzhledem k tomu, že prostředek může být stále k dispozici po vyčištění podpůrných prostředků, služba skriptů zachová výsledky spuštění skriptu (například stdout), výstupy a návratovou hodnotu před odstraněním prostředků.

    • OnSuccess: Odstraňte tyto dva podpůrné prostředky pouze v případech, kdy je spuštění skriptu úspěšné. Pokud používáte existující účet úložiště, služba skriptů odebere sdílenou složku pouze v případě, že je spuštění skriptu úspěšné.

      Pokud spuštění skriptu není úspěšné, služba skriptů počká, dokud retentionInterval nevyprší platnost hodnoty, než vyčistí podpůrné prostředky a pak prostředek skriptu nasazení.

    • OnExpiration: Odstraňte tyto dva podpůrné prostředky pouze v případech, kdy retentionInterval vypršela platnost nastavení. Pokud používáte existující účet úložiště, služba skriptů odebere sdílenou složku, ale zachová účet úložiště.

    Instance kontejneru a účet úložiště se odstraní podle cleanupPreference hodnoty. Pokud ale skript selže a cleanupPreference není nastavený na Always, proces nasazení automaticky udržuje kontejner spuštěný po dobu jedné hodiny nebo dokud se kontejner nevyčistí. Čas můžete použít k řešení potíží se skriptem.

    Pokud chcete kontejner nechat spuštěný po úspěšném nasazení, přidejte do skriptu krok spánku. Například na konec skriptu přidejte Start-Sleep . Pokud krok spánku nepřidáte, kontejner je nastavený na stav terminálu a není k němu přístup, i když jste ho ještě neodstranili.

  • retentionInterval: Zadejte časový interval, po který deploymentScript bude prostředek zachován před vypršením jeho platnosti a odstraněním.

Poznámka:

Nedoporučujeme používat účet úložiště a instanci kontejneru, kterou služba skriptů generuje pro jiné účely. Tyto dva prostředky můžou být odebrány v závislosti na životním cyklu skriptu.

Další kroky

V tomto článku jste zjistili, jak vytvořit prostředky skriptu nasazení. Další informace najdete v tématech: