Dela via


Konfigurera utvecklingsmiljön för distributionsskript i Bicep-filer

Lär dig hur du skapar en utvecklingsmiljö för att utveckla och testa distributionsskript med en distributionsskriptbild. Du kan antingen skapa en Azure-containerinstans eller använda Docker. Båda alternativen beskrivs i den här artikeln.

Förutsättningar

Azure PowerShell-container

Om du inte har något Azure PowerShell-distributionsskript kan du skapa en hello.ps1-fil med hjälp av följande innehåll:

param([string] $name)
$output = 'Hello {0}' -f $name
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
param([string] $name, [string] $subscription)
$output = 'Hello {0}' -f $name
#Write-Output $output

Connect-AzAccount -UseDeviceAuthentication
Set-AzContext -subscription $subscription

$kv = Get-AzKeyVault
#Write-Output $kv

$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['greeting'] = $output
$DeploymentScriptOutputs['kv'] = $kv.resourceId
Write-Output $DeploymentScriptOutputs

I ett Azure PowerShell-distributionsskript används variabeln $DeploymentScriptOutputs för att lagra utdatavärdena. Mer information om hur du arbetar med Azure PowerShell-utdata finns i Arbeta med utdata.

Azure CLI-container

För en Azure CLI-containeravbildning kan du skapa en hello.sh fil med hjälp av följande innehåll:

FIRSTNAME=$1
LASTNAME=$2
OUTPUT="{\"name\":{\"displayName\":\"$FIRSTNAME $LASTNAME\",\"firstName\":\"$FIRSTNAME\",\"lastName\":\"$LASTNAME\"}}"
echo -n "Hello "
echo $OUTPUT | jq -r '.name.displayName'

I ett Azure CLI-distributionsskript lagrar en miljövariabel med namnet AZ_SCRIPTS_OUTPUT_PATH platsen för skriptets utdatafil. Miljövariabeln är inte tillgänglig i containern för utvecklingsmiljön. Mer information om hur du arbetar med Azure CLI-utdata finns i Arbeta med utdata från CLI-skript.

Använda Azure PowerShell-containerinstans

Om du vill skapa Azure PowerShell-skript på datorn måste du skapa ett lagringskonto och montera lagringskontot till containerinstansen. Så att du kan ladda upp skriptet till lagringskontot och köra skriptet på containerinstansen. Lagringskontot som du skapar för att testa skriptet är inte samma lagringskonto som distributionsskripttjänsten använder för att köra skriptet. Distributionsskripttjänsten skapar ett unikt namn som en filresurs vid varje körning.

Skapa en Azure PowerShell-containerinstans

Följande Bicep-fil skapar en containerinstans och en filresurs och monterar sedan filresursen till containeravbildningen.

@description('Specify a project name that is used for generating resource names.')
param projectName string

@description('Specify the resource location.')
param location string = resourceGroup().location

@description('Specify the container image.')
param containerImage string = 'mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7'

@description('Specify the mount path.')
param mountPath string = '/mnt/azscripts/azscriptinput'

var storageAccountName = toLower('${projectName}store')
var fileShareName = '${projectName}share'
var containerGroupName = '${projectName}cg'
var containerName = '${projectName}container'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

resource fileShare 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-01-01' = {
  name: '${storageAccountName}/default/${fileShareName}'
  dependsOn: [
    storageAccount
  ]
}

resource containerGroup 'Microsoft.ContainerInstance/containerGroups@2023-05-01' = {
  name: containerGroupName
  location: location
  properties: {
    containers: [
      {
        name: containerName
        properties: {
          image: containerImage
          resources: {
            requests: {
              cpu: 1
              memoryInGB: json('1.5')
            }
          }
          ports: [
            {
              protocol: 'TCP'
              port: 80
            }
          ]
          volumeMounts: [
            {
              name: 'filesharevolume'
              mountPath: mountPath
            }
          ]
          command: [
            '/bin/sh'
            '-c'
            'pwsh -c \'Start-Sleep -Seconds 1800\''
          ]
        }
      }
    ]
    osType: 'Linux'
    volumes: [
      {
        name: 'filesharevolume'
        azureFile: {
          readOnly: false
          shareName: fileShareName
          storageAccountName: storageAccountName
          storageAccountKey: storageAccount.listKeys().keys[0].value
        }
      }
    ]
  }
}

Standardvärdet för monteringssökvägen är /mnt/azscripts/azscriptinput. Det här är sökvägen i containerinstansen där den monteras på filresursen.

Standardcontaineravbildningen som anges i Bicep-filen är mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Se en lista över alla Azure PowerShell-versioner som stöds.

Bicep-filen pausar containerinstansen efter 1 800 sekunder. Du har 30 minuter på dig innan containerinstansen hamnar i ett avslutat tillstånd och sessionen avslutas.

Använd följande skript för att distribuera Bicep-filen:

$projectName = Read-Host -Prompt "Enter a project name that is used to generate resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$templateFile = Read-Host -Prompt "Enter the Bicep file path and file name"
$resourceGroupName = "${projectName}rg"

New-AzResourceGroup -Location $location -name $resourceGroupName
New-AzResourceGroupDeployment -resourceGroupName $resourceGroupName -TemplateFile $templatefile -projectName $projectName

Ladda upp distributionsskriptet

Ladda upp distributionsskriptet till lagringskontot. Här är ett exempel på ett PowerShell-skript:

$projectName = Read-Host -Prompt "Enter the same project name that you used earlier"
$fileName = Read-Host -Prompt "Enter the deployment script file name with the path"

$resourceGroupName = "${projectName}rg"
$storageAccountName = "${projectName}store"
$fileShareName = "${projectName}share"

$context = (Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName).Context
Set-AzStorageFileContent -Context $context -ShareName $fileShareName -Source $fileName -Force

Du kan också ladda upp filen med hjälp av Azure Portal eller Azure CLI.

Testa distributionsskriptet

  1. I Azure Portal öppnar du resursgruppen där du distribuerade containerinstansen och lagringskontot.

  2. Öppna containergruppen. Standardnamnet för containergruppen är projektnamnet som läggs till med cg. Containerinstansen är i tillståndet Körs .

  3. I resursmenyn väljer du Containrar. Namnet på containerinstansen är projektnamnet som läggs till med containern.

    Skärmbild av alternativet anslut containerinstans för distributionsskript i Azure Portal.

  4. Välj Anslut och välj sedan Anslut. Om du inte kan ansluta till containerinstansen startar du om containergruppen och försöker igen.

  5. Kör följande kommandon i konsolfönstret:

    cd /mnt/azscripts/azscriptinput
    ls
    pwsh ./hello.ps1 "John Dole"
    

    Utdata är Hello John Dole.

    Skärmbild av distributionsskriptet ansluter containerinstanstestutdata som visas i konsolen.

Använda en Azure CLI-containerinstans

Om du vill skapa Azure CLI-skript på datorn skapar du ett lagringskonto och monterar lagringskontot till containerinstansen. Sedan kan du ladda upp skriptet till lagringskontot och köra skriptet på containerinstansen. Lagringskontot som du skapar för att testa skriptet är inte samma lagringskonto som distributionsskripttjänsten använder för att köra skriptet. Distributionsskripttjänsten skapar ett unikt namn som en filresurs vid varje körning.

Skapa en Azure CLI-containerinstans

Följande Bicep-fil skapar en containerinstans och en filresurs och monterar sedan filresursen till containeravbildningen:

@description('Specify a project name that is used for generating resource names.')
param projectName string

@description('Specify the resource location.')
param location string = resourceGroup().location

@description('Specify the container image.')
param containerImage string = 'mcr.microsoft.com/azure-cli:2.9.1'

@description('Specify the mount path.')
param mountPath string = '/mnt/azscripts/azscriptinput'

var storageAccountName = toLower('${projectName}store')
var fileShareName = '${projectName}share'
var containerGroupName = '${projectName}cg'
var containerName = '${projectName}container'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

resource fileshare 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-04-01' = {
  name: '${storageAccountName}/default/${fileShareName}'
  dependsOn: [
    storageAccount
  ]
}

resource containerGroup 'Microsoft.ContainerInstance/containerGroups@2023-05-01' = {
  name: containerGroupName
  location: location
  properties: {
    containers: [
      {
        name: containerName
        properties: {
          image: containerImage
          resources: {
            requests: {
              cpu: 1
              memoryInGB: json('1.5')
            }
          }
          ports: [
            {
              protocol: 'TCP'
              port: 80
            }
          ]
          volumeMounts: [
            {
              name: 'filesharevolume'
              mountPath: mountPath
            }
          ]
          command: [
            '/bin/bash'
            '-c'
            'echo hello; sleep 1800'
          ]
        }
      }
    ]
    osType: 'Linux'
    volumes: [
      {
        name: 'filesharevolume'
        azureFile: {
          readOnly: false
          shareName: fileShareName
          storageAccountName: storageAccountName
          storageAccountKey: storageAccount.listKeys().keys[0].value
        }
      }
    ]
  }
}

Standardvärdet för monteringssökvägen är /mnt/azscripts/azscriptinput. Det här är sökvägen i containerinstansen där den monteras på filresursen.

Standardcontaineravbildningen som anges i Bicep-filen är mcr.microsoft.com/azure-cli:2.9.1. Se en lista över Azure CLI-versioner som stöds. Distributionsskriptet använder tillgängliga CLI-avbildningar från Microsoft Container Registry (MCR). Det tar ungefär en månad att certifiera en CLI-avbildning för ett distributionsskript. Använd inte DE CLI-versioner som släpptes inom 30 dagar. Information om hur du hittar versionsdatum för avbildningarna finns i Viktig information om Azure CLI. Om du använder en version som inte stöds visas de versioner som stöds i felmeddelandet.

Bicep-filen pausar containerinstansen efter 1 800 sekunder. Du har 30 minuter på dig innan containerinstansen hamnar i ett terminaltillstånd och sessionen avslutas.

Så här distribuerar du Bicep-filen:

$projectName = Read-Host -Prompt "Enter a project name that is used to generate resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$templateFile = Read-Host -Prompt "Enter the Bicep file path and file name"
$resourceGroupName = "${projectName}rg"

New-AzResourceGroup -Location $location -name $resourceGroupName
New-AzResourceGroupDeployment -resourceGroupName $resourceGroupName -TemplateFile $templatefile -projectName $projectName

Ladda upp distributionsskriptet

Ladda upp distributionsskriptet till lagringskontot. Följande skript är ett PowerShell-exempel:

$projectName = Read-Host -Prompt "Enter the same project name that you used earlier"
$fileName = Read-Host -Prompt "Enter the deployment script file name with the path"

$resourceGroupName = "${projectName}rg"
$storageAccountName = "${projectName}store"
$fileShareName = "${projectName}share"

$context = (Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName).Context
Set-AzStorageFileContent -Context $context -ShareName $fileShareName -Source $fileName -Force

Du kan också ladda upp filen med hjälp av Azure Portal eller Azure CLI.

Testa distributionsskriptet

  1. I Azure Portal öppnar du resursgruppen där du distribuerade containerinstansen och lagringskontot.

  2. Öppna containergruppen. Standardnamnet för containergruppen är projektnamnet som läggs till med cg. Containerinstansen visas i tillståndet Körs .

  3. I resursmenyn väljer du Containrar. Namnet på containerinstansen är projektnamnet som läggs till med containern.

    Skärmbild av alternativet anslut containerinstans för distributionsskript i Azure Portal.

  4. Välj Anslut och välj sedan Anslut. Om du inte kan ansluta till containerinstansen startar du om containergruppen och försöker igen.

  5. Kör följande kommandon i konsolfönstret:

    cd /mnt/azscripts/azscriptinput
    ls
    ./hello.sh John Dole
    

    Utdata är Hello John Dole.

    Skärmbild av utdata från containerinstanstestet för distributionsskriptet som visas i konsolen.

Använda Docker

Du kan använda en förkonfigurerad Docker-containeravbildning som utvecklingsmiljö för distributionsskript. Information om hur du installerar Docker finns i Hämta Docker. Du måste också konfigurera fildelning för att montera katalogen, som innehåller distributionsskripten i Docker-containern.

  1. Hämta containeravbildningen för distributionsskriptet till den lokala datorn:

    docker pull mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
    

    I exemplet används version PowerShell 4.3.0.

    Så här hämtar du en CLI-avbildning från en MCR:

    docker pull mcr.microsoft.com/azure-cli:2.52.0
    

    I det här exemplet används version CLI 2.52.0. Distributionsskriptet använder cli-containrars standardbilder.

  2. Kör Docker-avbildningen lokalt.

    docker run -v <host drive letter>:/<host directory name>:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
    

    Ersätt värddrivrutinsbeteckningen> och< värdkatalognamnet> med en befintlig mapp på den delade enheten.< Mappen mappas till mappen /data i containern. Om du till exempel vill mappa D:\docker:

    docker run -v d:/docker:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
    

    -det innebär att behålla containeravbildningen vid liv.

    Ett CLI-exempel:

    docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.52.0
    
  3. Följande skärmbild visar hur du kör ett PowerShell-skript, med tanke på att du har en helloworld.ps1-fil på den delade enheten.

    Skärmbild av distributionsskriptet för Resource Manager-mallen med hjälp av Docker-kommandot.

När skriptet har testats kan du använda det som ett distributionsskript i dina Bicep-filer.

Nästa steg

I den här artikeln har du lärt dig hur du skapar utvecklingsmiljöer för skript. Mer information: