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
I Azure Portal öppnar du resursgruppen där du distribuerade containerinstansen och lagringskontot.
Öppna containergruppen. Standardnamnet för containergruppen är projektnamnet som läggs till med cg. Containerinstansen är i tillståndet Körs .
I resursmenyn väljer du Containrar. Namnet på containerinstansen är projektnamnet som läggs till med containern.
Välj Anslut och välj sedan Anslut. Om du inte kan ansluta till containerinstansen startar du om containergruppen och försöker igen.
Kör följande kommandon i konsolfönstret:
cd /mnt/azscripts/azscriptinput ls pwsh ./hello.ps1 "John Dole"
Utdata är Hello John Dole.
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
I Azure Portal öppnar du resursgruppen där du distribuerade containerinstansen och lagringskontot.
Öppna containergruppen. Standardnamnet för containergruppen är projektnamnet som läggs till med cg. Containerinstansen visas i tillståndet Körs .
I resursmenyn väljer du Containrar. Namnet på containerinstansen är projektnamnet som läggs till med containern.
Välj Anslut och välj sedan Anslut. Om du inte kan ansluta till containerinstansen startar du om containergruppen och försöker igen.
Kör följande kommandon i konsolfönstret:
cd /mnt/azscripts/azscriptinput ls ./hello.sh John Dole
Utdata är Hello John Dole.
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.
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.
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
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.
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: