Configurar o ambiente de desenvolvimento para scripts de implantação em arquivos Bicep
Saiba como criar um ambiente de desenvolvimento para desenvolver e testar scripts de implantação com uma imagem de script de implantação. Você pode criar uma instância de contêiner do Azure ou usar o Docker. As duas opções são abordadas neste artigo.
Pré-requisitos
Contêiner do Azure PowerShell
Se você não tiver um script de implantação do Azure PowerShell, poderá criar um arquivo hello.ps1 usando o seguinte conteúdo:
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
Em um script de implantação do Azure PowerShell, a variável $DeploymentScriptOutputs
é usada para armazenar os valores de saída. Para obter mais informações sobre como trabalhar com saídas do Azure PowerShell, confira Trabalhar com saídas.
Contêiner da CLI do Azure
Para uma imagem de contêiner da CLI do Azure, você pode criar um arquivo hello.sh usando o seguinte conteúdo:
FIRSTNAME=$1
LASTNAME=$2
OUTPUT="{\"name\":{\"displayName\":\"$FIRSTNAME $LASTNAME\",\"firstName\":\"$FIRSTNAME\",\"lastName\":\"$LASTNAME\"}}"
echo -n "Hello "
echo $OUTPUT | jq -r '.name.displayName'
Em um script de implantação da CLI do Azure, uma variável de ambiente chamada AZ_SCRIPTS_OUTPUT_PATH
armazena o local do arquivo de saída de script. A variável de ambiente não está disponível no contêiner do ambiente de desenvolvimento. Para obter mais informações sobre como trabalhar com saídas da CLI do Azure, consulte Trabalhar com saídas de scripts da CLI.
Usar instância de contêiner do Azure PowerShell
Para criar scripts do Azure PowerShell em seu computador, você precisa criar uma conta de armazenamento e montar a conta de armazenamento na instância de contêiner. Isso serve para que você possa carregar o script na conta de armazenamento e executar o script na instância de contêiner. A conta de armazenamento que você cria para testar o script não é a mesma conta de armazenamento que o serviço de script de implantação usa para executar o script. O serviço do script de implantação cria um nome exclusivo como um compartilhamento de arquivo a cada execução.
Criar uma instância de contêiner do Azure PowerShell
O arquivo Bicep a seguir cria uma instância de contêiner e um compartilhamento de arquivos e, em seguida, monta o compartilhamento de arquivos na imagem do contêiner.
@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
}
}
]
}
}
O valor padrão para o caminho da montagem é /mnt/azscripts/azscriptinput
. Esse é o caminho na instância de contêiner em que ele é montado no compartilhamento de arquivo.
A imagem de contêiner padrão especificada no arquivo Bicep é mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Veja uma lista de todas as versões do Azure PowerShell com suporte.
O arquivo Bicep suspende a instância de contêiner após 1.800 segundos. Você tem 30 minutos antes que a instância de contêiner entre em um estado encerrado e a sessão termine.
Use o seguinte script para implantar o arquivo 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
Carregar o script de implantação
Carregue o script de implantação na conta de armazenamento. Veja um exemplo de um script do 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
Você também pode carregar o arquivo usando o portal do Azure ou a CLI do Azure.
Testar o script de implantação
No portal do Azure, abra o grupo de recursos em que você implantou a instância de contêiner e a conta de armazenamento.
Abra o grupo de contêineres. O nome do grupo de contêineres padrão é o nome do projeto com o acréscimo de cg. A instância de contêiner está no estado Em execução.
No menu de recursos, selecione Contêineres. O nome da instância de contêiner é o nome do projeto anexado ao contêiner.
Selecione Conectar e escolha Conectar. Se você não conseguir se conectar à instância de contêiner, reinicie o grupo de contêineres e tente novamente.
No painel do console, execute os seguintes comandos:
cd /mnt/azscripts/azscriptinput ls pwsh ./hello.ps1 "John Dole"
A saída é Hello John Dole.
Usar uma instância de contêiner da CLI do Azure
Para criar scripts da CLI do Azure em seu computador, crie uma conta de armazenamento e monte a conta de armazenamento na instância do contêiner. Em seguida, você pode carregar o script na conta de armazenamento e executar o script na instância de contêiner. A conta de armazenamento que você cria para testar o script não é a mesma conta de armazenamento que o serviço de script de implantação usa para executar o script. O serviço do script de implantação cria um nome exclusivo como um compartilhamento de arquivo a cada execução.
Criar uma instância de contêiner da CLI do Azure
O arquivo Bicep a seguir cria uma instância de contêiner e um compartilhamento de arquivos e, em seguida, monta o compartilhamento de arquivos na imagem do contêiner:
@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
}
}
]
}
}
O valor padrão para o caminho da montagem é /mnt/azscripts/azscriptinput
. Esse é o caminho na instância de contêiner em que ele é montado no compartilhamento de arquivo.
A imagem de contêiner padrão especificada no arquivo Bicep é mcr.microsoft.com/azure-cli:2.9.1. Consulte uma lista de versões da CLI do Azure compatíveis. O script de implantação usa as imagens da CLI disponíveis no MCR (Microsoft Container Registry). A certificação de uma imagem da CLI para o script de implantação leva cerca de um mês. Não use as versões da CLI que foram lançadas dentro de 30 dias. Para localizar as datas de lançamento das imagens, consulte as notas de versão da CLI do Azure. Se você usar uma versão não compatível, a mensagem de erro listará as versões compatíveis.
O arquivo Bicep suspende a instância de contêiner após 1.800 segundos. Você tem 30 minutos antes que a instância de contêiner entre em um estado de finalização e a sessão termine.
Para implantar o arquivo 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
Carregar o script de implantação
Carregue o script de implantação na conta de armazenamento. O seguinte script é um exemplo do 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
Você também pode carregar o arquivo usando o portal do Azure ou a CLI do Azure.
Testar o script de implantação
No portal do Azure, abra o grupo de recursos em que você implantou a instância de contêiner e a conta de armazenamento.
Abra o grupo de contêineres. O nome do grupo de contêineres padrão é o nome do projeto com o acréscimo de cg. A instância de contêiner é mostrada no estado Em execução.
No menu de recursos, selecione Contêineres. O nome da instância de contêiner é o nome do projeto anexado ao contêiner.
Selecione Conectar e escolha Conectar. Se você não conseguir se conectar à instância de contêiner, reinicie o grupo de contêineres e tente novamente.
No painel do console, execute os seguintes comandos:
cd /mnt/azscripts/azscriptinput ls ./hello.sh John Dole
A saída é Hello John Dole.
Usar o Docker
Você pode usar uma imagem de contêiner do Docker pré-configurada como ambiente de desenvolvimento de script de implantação. Para instalar o Docker, confira Obter o Docker. Você também precisa configurar o compartilhamento de arquivo para montar o diretório que contém os scripts de implantação no contêiner do Docker.
Efetuar pull da imagem de contêiner do script de implantação para o computador local:
docker pull mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
O exemplo usa a versão 4.3.0 do PowerShell.
Para fazer pull de uma imagem da CLI de um MCR:
docker pull mcr.microsoft.com/azure-cli:2.52.0
Este exemplo usa a versão 2.52.0 da CLI. O script de implantação usa as imagens de contêineres da CLI padrão.
Execute a imagem do Docker localmente.
docker run -v <host drive letter>:/<host directory name>:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
Substitua a <letra da unidade do host> e o <nome do diretório de host> com uma pasta existente na unidade compartilhada. Ele mapeia a pasta para a pasta /data no contêiner. Por exemplo, para mapear D:\docker:
docker run -v d:/docker:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
— significa manter a imagem de contêiner ativa.
Um exemplo de CLI:
docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.52.0
A captura de tela a seguir mostra como executar um script do PowerShell, considerando que você tenha um arquivo helloworld.ps1 na pasta compartilhada.
Depois que o script for testado com êxito, você poderá usá-lo como um script de implantação nos seus arquivos Bicep.
Próximas etapas
Neste artigo, você aprendeu a criar ambientes de desenvolvimento de script. Para saber mais: