Udostępnij za pośrednictwem


Konfigurowanie środowiska deweloperskiego na potrzeby skryptów wdrażania w plikach Bicep

Dowiedz się, jak utworzyć środowisko programistyczne do tworzenia i testowania skryptów wdrażania przy użyciu obrazu skryptu wdrożenia. Możesz utworzyć wystąpienie kontenera platformy Azure lub użyć platformy Docker. Obie opcje zostały omówione w tym artykule.

Wymagania wstępne

Kontener programu Azure PowerShell

Jeśli nie masz skryptu wdrażania programu Azure PowerShell, możesz utworzyć plik hello.ps1 przy użyciu następującej zawartości:

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

W skry skryptie wdrażania programu Azure PowerShell zmienna $DeploymentScriptOutputs jest używana do przechowywania wartości wyjściowych. Aby uzyskać więcej informacji na temat pracy z danymi wyjściowymi programu Azure PowerShell, zobacz Praca z danymi wyjściowymi.

Kontener interfejsu wiersza polecenia platformy Azure

W przypadku obrazu kontenera interfejsu wiersza polecenia platformy Azure można utworzyć plik hello.sh przy użyciu następującej zawartości:

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

W skryscie wdrażania interfejsu wiersza polecenia platformy Azure zmienna środowiskowa o nazwie AZ_SCRIPTS_OUTPUT_PATH przechowuje lokalizację pliku wyjściowego skryptu. Zmienna środowiskowa nie jest dostępna w kontenerze środowiska deweloperskiego. Aby uzyskać więcej informacji na temat pracy z danymi wyjściowymi interfejsu wiersza polecenia platformy Azure, zobacz Praca z danymi wyjściowymi skryptów interfejsu wiersza polecenia.

Korzystanie z wystąpienia kontenera programu Azure PowerShell

Aby utworzyć skrypty programu Azure PowerShell na komputerze, musisz utworzyć konto magazynu i zainstalować konto magazynu w wystąpieniu kontenera. Aby można było przekazać skrypt do konta magazynu i uruchomić skrypt w wystąpieniu kontenera. Konto magazynu utworzone w celu przetestowania skryptu nie jest tym samym kontem magazynu, którego usługa skryptu wdrażania używa do wykonania skryptu. Usługa skryptu wdrażania tworzy unikatową nazwę jako udział plików w każdym wykonaniu.

Tworzenie wystąpienia kontenera programu Azure PowerShell

Poniższy plik Bicep tworzy wystąpienie kontenera i udział plików, a następnie instaluje udział plików w obrazie kontenera.

@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
        }
      }
    ]
  }
}

Wartość domyślna ścieżki instalacji to /mnt/azscripts/azscriptinput. Jest to ścieżka w wystąpieniu kontenera, w którym jest zainstalowany w udziale plików.

Domyślny obraz kontenera określony w pliku Bicep jest mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Zobacz listę wszystkich obsługiwanych wersji programu Azure PowerShell.

Plik Bicep zawiesza wystąpienie kontenera po 1800 sekundach. Zanim wystąpienie kontenera przejdzie w stan zakończenia, a sesja zakończy się przez 30 minut.

Użyj następującego skryptu, aby wdrożyć plik Bicep:

$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

Przekazywanie skryptu wdrażania

Przekaż skrypt wdrożenia do konta magazynu. Oto przykład skryptu programu PowerShell:

$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

Plik można również przekazać przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

Testowanie skryptu wdrażania

  1. W witrynie Azure Portal otwórz grupę zasobów, w której wdrożono wystąpienie kontenera i konto magazynu.

  2. Otwórz grupę kontenerów. Domyślna nazwa grupy kontenerów to nazwa projektu dołączona z cg. Wystąpienie kontenera jest w stanie Uruchomiony .

  3. W menu zasobów wybierz pozycję Kontenery. Nazwa wystąpienia kontenera to nazwa projektu dołączona z kontenerem.

    Zrzut ekranu przedstawiający opcję połącz wystąpienie kontenera skryptu wdrożenia w witrynie Azure Portal.

  4. Wybierz pozycję Połącz, a następnie wybierz pozycję Połącz. Jeśli nie możesz nawiązać połączenia z wystąpieniem kontenera, uruchom ponownie grupę kontenerów i spróbuj ponownie.

  5. W okienku konsoli uruchom następujące polecenia:

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

    Dane wyjściowe to Hello John Dole.

    Zrzut ekranu przedstawiający dane wyjściowe testu skryptu wdrożenia connect container instance wyświetlane w konsoli programu .

Korzystanie z wystąpienia kontenera interfejsu wiersza polecenia platformy Azure

Aby utworzyć skrypty interfejsu wiersza polecenia platformy Azure na komputerze, utwórz konto magazynu i zainstaluj konto magazynu w wystąpieniu kontenera. Następnie możesz przekazać skrypt do konta magazynu i uruchomić skrypt w wystąpieniu kontenera. Konto magazynu utworzone w celu przetestowania skryptu nie jest tym samym kontem magazynu, którego usługa skryptu wdrażania używa do wykonania skryptu. Usługa skryptu wdrażania tworzy unikatową nazwę jako udział plików w każdym wykonaniu.

Tworzenie wystąpienia kontenera interfejsu wiersza polecenia platformy Azure

Poniższy plik Bicep tworzy wystąpienie kontenera i udział plików, a następnie instaluje udział plików w obrazie kontenera:

@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
        }
      }
    ]
  }
}

Wartość domyślna ścieżki instalacji to /mnt/azscripts/azscriptinput. Jest to ścieżka w wystąpieniu kontenera, w którym jest zainstalowany w udziale plików.

Domyślny obraz kontenera określony w pliku Bicep jest mcr.microsoft.com/azure-cli:2.9.1. Zobacz listę obsługiwanych wersji interfejsu wiersza polecenia platformy Azure. Skrypt wdrażania używa dostępnych obrazów interfejsu wiersza polecenia z usługi Microsoft Container Registry (MCR). Certyfikowanie obrazu interfejsu wiersza polecenia dla skryptu wdrożenia trwa około miesiąca. Nie używaj wersji interfejsu wiersza polecenia, które zostały wydane w ciągu 30 dni. Aby znaleźć daty wydania obrazów, zobacz Informacje o wersji interfejsu wiersza polecenia platformy Azure. Jeśli używasz nieobsługiwanej wersji, komunikat o błędzie zawiera listę obsługiwanych wersji.

Plik Bicep zawiesza wystąpienie kontenera po 1800 sekundach. Przed przejściem wystąpienia kontenera do stanu terminalu i zakończenie sesji trwa 30 minut.

Aby wdrożyć plik Bicep:

$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

Przekazywanie skryptu wdrażania

Przekaż skrypt wdrożenia do konta magazynu. Poniższy skrypt jest przykładem programu PowerShell:

$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

Plik można również przekazać przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

Testowanie skryptu wdrażania

  1. W witrynie Azure Portal otwórz grupę zasobów, w której wdrożono wystąpienie kontenera i konto magazynu.

  2. Otwórz grupę kontenerów. Domyślna nazwa grupy kontenerów to nazwa projektu dołączona z cg. Wystąpienie kontenera jest wyświetlane w stanie Uruchomiony .

  3. W menu zasobów wybierz pozycję Kontenery. Nazwa wystąpienia kontenera to nazwa projektu dołączona z kontenerem.

    Zrzut ekranu przedstawiający opcję połącz wystąpienie kontenera skryptu wdrożenia w witrynie Azure Portal.

  4. Wybierz pozycję Połącz, a następnie wybierz pozycję Połącz. Jeśli nie możesz nawiązać połączenia z wystąpieniem kontenera, uruchom ponownie grupę kontenerów i spróbuj ponownie.

  5. W okienku konsoli uruchom następujące polecenia:

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

    Dane wyjściowe to Hello John Dole.

    Zrzut ekranu przedstawiający dane wyjściowe testu wystąpienia kontenera skryptu wdrożenia wyświetlane w konsoli programu .

Korzystanie z platformy Docker

Możesz użyć wstępnie skonfigurowanego obrazu kontenera platformy Docker jako środowiska deweloperskiego skryptu wdrażania. Aby zainstalować platformę Docker, zobacz Pobieranie platformy Docker. Należy również skonfigurować udostępnianie plików, aby zainstalować katalog zawierający skrypty wdrażania w kontenerze platformy Docker.

  1. Pobierz obraz kontenera skryptu wdrożenia na komputer lokalny:

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

    W przykładzie użyto wersji programu PowerShell 4.3.0.

    Aby ściągnąć obraz interfejsu wiersza polecenia z mcR:

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

    W tym przykładzie użyto interfejsu wiersza polecenia w wersji 2.52.0. Skrypt wdrażania używa domyślnych obrazów kontenerów interfejsu wiersza polecenia.

  2. Uruchom obraz platformy Docker lokalnie.

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

    Zastąp <literę> sterownika hosta i <nazwę> katalogu hosta istniejącym folderem na dysku udostępnionym. Mapuje folder na folder /data w kontenerze. Aby na przykład mapować D:\docker:

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

    — oznacza to utrzymanie obrazu kontenera przy życiu.

    Przykład interfejsu wiersza polecenia:

    docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.52.0
    
  3. Poniższy zrzut ekranu przedstawia sposób uruchamiania skryptu programu PowerShell, biorąc pod uwagę, że masz plik helloworld.ps1 na dysku udostępnionym.

    Zrzut ekranu przedstawiający skrypt wdrażania szablonu usługi Resource Manager przy użyciu polecenia platformy Docker.

Po pomyślnym przetestowaniu skryptu możesz użyć go jako skryptu wdrażania w plikach Bicep.

Następne kroki

W tym artykule przedstawiono sposób tworzenia środowisk deweloperskich skryptów. Dodatkowe informacje: