Dela via


Skapa och distribuera VM-program

VM-program är en resurstyp i Azure Compute Gallery som förenklar hantering, delning och global distribution av program för dina virtuella datorer. Läs mer om VM-program

Om du vill skapa och distribuera program på en virtuell Azure-dator måste du först paketera och ladda upp programmet till Azure Storage-kontot som en lagringsblob. Azure VM application Skapa sedan resurser och VM application version resurser som refererar till dessa lagringsblobar. Slutligen distribuerar du programmet på valfri VM eller Virtual Machine Scale Set genom att skicka programreferensen i applicationProfile.

Förutsättningar

  1. Skapa Azure Storage-konto och lagringscontainer. Den här containern används för att ladda upp dina programfiler. Vi rekommenderar att du använder lagringskonto med anonym åtkomst inaktiverad för ökad säkerhet.
  2. Skapa Azure Compute Gallery för lagring och delning av programresurser.

Paketera programmet

Skärmbild som visar den mappstruktur som rekommenderas för att ladda upp och skapa vm-program.

1. Paketera programfilerna

  • Om programinstallationen kräver en enda fil (.exe, .msi, .sh, .ps osv.) kan du använda den som den är.
  • Om programinstallationen kräver flera filer (körbar fil med konfigurationsfil, beroenden, manifestfiler, skript osv.) måste du arkivera den (med .zip, .tar, .tar.gz osv.) i en enda fil.
  • För mikrotjänstprogram kan du paketera och publicera varje mikrotjänst som ett separat Azure VM-program. Detta underlättar programåteranvändning, utveckling mellan team och sekventiell installation av mikrotjänster med hjälp order av egenskapen i applicationProfile.

2. (Valfritt) Paketera programkonfigurationsfilen

  • Du kan också ange konfigurationsfilen separat. Detta minskar kostnaderna för arkivering och avarchiving av programpaket. Konfigurationsfiler kan också skickas under appdistributionen och aktivera anpassad installation per virtuell dator.

3. Skapa installationsskriptet

När programmet och konfigurationsbloben har laddats ned på den virtuella datorn kör Azure det angivna installationsskriptet för att installera programmet. Installationsskriptet tillhandahålls som en sträng och har en maximal teckengräns på 4 096 tecken. Installationskommandona ska skrivas förutsatt att programpaketet och konfigurationsfilen finns i den aktuella katalogen.

Det kan krävas några åtgärder i installationsskriptet

  • (Valfritt) Använd rätt kommandotolk Standardkommandotolken som används av Azure finns /bin/bash i Linux OS och cmd.exe i Windows OS. Det är möjligt att använda en annan tolk som Chocolatey eller PowerShell, om den är installerad på datorn. Anropa den körbara filen och skicka kommandona till den. T.ex. powershell.exe -command '<powershell command>'. Om du använder PowerShell måste du använda version 3.11.0 av Az.Storage-modulen.

  • (Valfritt) Byt namn på programblob och konfigurationsblob Azure kan inte behålla det ursprungliga filnamnet och filnamnstilläggen. Därför har den nedladdade programfilen och konfigurationsfilen ett standardnamn som "MyVMApp" och "MyVMApp-config" utan filnamnstillägg. Du kan byta namn på filen med filnamnstillägget med hjälp av installationsskriptet eller så kan du även ange namnen i packageFileName och configFileName egenskaperna för publishingProfile av VM Application version resource. Azure använder sedan dessa namn i stället för standardnamn när filerna laddas ned.

  • (Valfritt) Flytta program- och konfigurationsblob till lämplig plats Azure laddar ned programbloben och konfigurationsbloben till följande platser. Installationsskriptet måste flytta filerna till lämpliga platser när det behövs.

    Linux: /var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version>

    Windows: C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.16\Downloads\<application name>\<application version>

  • Unarchive-programblob För arkiverade programpaket måste det tas bort innan programmet installeras. Vi rekommenderar att du använder .zip eller .tar eftersom de flesta operativsystem har inbyggt stöd för att unarchiving dessa format. Kontrollera att gästoperativsystemet har stöd för andra format.

  • (Valfritt) Ange rätt körningsprincip och behörigheter När du har tagit bort inställningarna kan filbehörigheter återställas. Det är en bra idé att ange rätt behörigheter innan du kör filerna.

  • Konvertera skriptet till sträng Installationsskriptet skickas som en sträng för egenskapen i resursen install för publishingProfile Azure VM-programversion.

Här följer exempel på installationsskript baserat på filtillägget för programbloben

#!/bin/bash

# Rename blobs
mv MyVMApp app.tar
mv MyVMApp-config app-config.yaml

# Unarchive application
mkdir -p app
tar -xf app.tar -C app

# Set permissions
chmod -R +x app
chmod -R +r app

# Install the script (example: install.sh with config)
bash ./app/install.sh --config app-config.yaml

# OR Install the .deb package (example: install.deb without config)
# sudo dpkg -i ./app/install.deb

# OR Install the .rpm package (example: install.rpm without config)
# sudo rpm -ivh ./app/install.rpm

Skript som sträng:

"#!/bin/bash\nmv MyVMApp app.tar\nmv MyVMApp-config app-config.yaml\nmkdir -p app\ntar -xf app.tar -C app\nchmod -R +x app\nchmod -R +r app\nbash ./app/install.sh --config app-config.yaml\n# sudo dpkg -i ./app/install.deb\n# sudo rpm -ivh ./app/install.rpm"

4. Skapa borttagningsskriptet

Med borttagningsskriptet kan du definiera borttagningsåtgärderna för programmet. Borttagningsskriptet tillhandahålls som en sträng och har en maximal teckengräns på 4 096 tecken. Skriv borttagningskommandona förutsatt att programpaketet och konfigurationsfilen finns i den aktuella katalogen.

Det kan finnas få åtgärder som borttagningsskriptet måste utföra.

  • Avinstallera program: Avinstallera programmet från den virtuella datorn korrekt. Kör till exempel uninstall.exe i Windows eller sudo apt remove app på Linux.

  • Ta bort kvarvarande filer: Ta bort kvarvarande programfiler från den virtuella datorn. Kör till exempel Remove-Item -Path "$PWD\*" -Recurse -Force -ErrorAction SilentlyContinue i Windows eller sudo rm -rf ./* ./.??* på Linux.

Ladda upp programfilerna till Azure Storage-kontot

1. Ladda upp programmet och konfigurationsfilerna till en container på ett Azure Storage-konto.

Ditt program kan lagras i en block- eller sidblob. Om du väljer att använda en sidblob måste du justera filerna i byte innan du laddar upp dem. Använd följande exempel för att bytejustera din fil.

inputFile="<the file you want to pad>"

# Get the file size
fileSize=$(stat -c %s "$inputFile")

# Calculate the remainder when divided by 512
remainder=$((fileSize % 512))

if [ "$remainder" -ne 0 ]; then
    # Calculate how many bytes to pad
    difference=$((512 - remainder))
    
    # Create padding (empty bytes)
    dd if=/dev/zero bs=1 count=$difference >> "$inputFile"
fi

2. Generera SAS-URL för programpaketet och konfigurationsfilen

När programmet och konfigurationsfilerna har laddats upp till lagringskontot måste du generera en SAS-URL med läsbehörighet för dessa blobar. Dessa SAS-URL:er tillhandahålls sedan som referens när du skapar vm-programversionsresursen. För Lagringskonton som är aktiverade för anonym åtkomst kan blob-URL också användas. Vi rekommenderar dock att du använder SAS-URL:en för att förbättra säkerheten. Du kan använda Storage Explorer för att snabbt skapa en SAS-URI om du inte redan har en.


#!/bin/bash

# === CONFIGURATION ===
STORAGE_ACCOUNT="yourstorageaccount"
CONTAINER_NAME="yourcontainer"
LOCAL_FOLDER="./your-local-folder"
SAS_EXPIRY_HOURS=24

# === LOGIN (if not already logged in) ===
az login --only-show-errors

# === CREATE CONTAINER IF NOT EXISTS ===
az storage container create \
  --name $CONTAINER_NAME \
  --account-name $STORAGE_ACCOUNT \
  --auth-mode login \
  --only-show-errors

# === UPLOAD FILES ===
az storage blob upload-batch \
  --account-name $STORAGE_ACCOUNT \
  --destination $CONTAINER_NAME \
  --source $LOCAL_FOLDER \
  --auth-mode login \
  --only-show-errors

# === GENERATE SAS URLs ===
echo "Generating SAS URLs..."
FILES=$(find $LOCAL_FOLDER -type f)

for FILE in $FILES; do
  BLOB_NAME="${FILE#$LOCAL_FOLDER/}"
  EXPIRY=$(date -u -d "+$SAS_EXPIRY_HOURS hours" '+%Y-%m-%dT%H:%MZ')

  SAS_TOKEN=$(az storage blob generate-sas \
    --account-name $STORAGE_ACCOUNT \
    --container-name $CONTAINER_NAME \
    --name "$BLOB_NAME" \
    --permissions r \
    --expiry $EXPIRY \
    --auth-mode login \
    -o tsv)

  SAS_URL="https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${BLOB_NAME}?${SAS_TOKEN}"
  echo "$BLOB_NAME: $SAS_URL"
done

Skapa vm-programmet

Skapa det virtuella datorprogrammet genom att först skapa den virtuella datorprogramresursen, som beskriver programmet. Skapa sedan en vm-programversionsresurs i den, som innehåller nyttolasten för det virtuella datorprogrammet och skript för att installera, uppdatera och ta bort programmet. Nyttolasten tillhandahålls med hjälp av SAS-URL:en till blobcontainern i Azure Storage-kontot.

Mer information om varje egenskap finns i schemat för vm-program och vm-programversionsresurs .

Skapa vm-programdefinitionen med hjälp av "skapa galleriprogram-API"

PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{applicationName}?api-version=2024-03-03

{
    "location": "West US",
    "name": "myApp",
    "properties": {
        "supportedOSType": "Windows | Linux",
        "endOfLifeDate": "2020-01-01",
	"description": "Description of the App",
	"eula": "Link to End-User License Agreement (EULA)",
	"privacyStatementUri": "Link to privacy statement for the application",
	"releaseNoteUri": "Link to release notes for the application"
    }
}

Skapa en vm-programversion med hjälp av API:et "create gallery application version".

PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{applicationName}/versions/{versionName}?api-version=2024-03-03

{
  "location": "$location",
  "properties": {
    "publishingProfile": {
      "source": {
        "mediaLink": "$mediaLink",
        "defaultConfigurationLink": "$configLink"
      },
      "manageActions": {
        "install": "echo installed",
        "remove": "echo removed",
        "update": "echo update"
      },
      "targetRegions": [
        {
          "name": "West US",
          "regionalReplicaCount": 1
        },
	{
	  "name": "East US"
	}
      ]
      "endofLifeDate": "datetime",
      "replicaCount": 1,
      "excludeFromLatest": false,
      "storageAccountType": "PremiumV2_LRS | Premium_LRS | Standard_LRS | Standard_ZRS"
      "safetyProfile": {
	"allowDeletionOfReplicatedLocations": false
      }
      "settings": {
	"scriptBehaviorAfterReboot": "None | Rerun",
	"configFileName": "$appConfigFileName",
	"packageFileName": "$appPackageFileName"
      }
   }
}

Distribuera VM-programmen

Ett eller flera VM-program kan nu refereras till i applicationProfile Azure VM eller Azure Virtual Machine Scale Sets. Azure hämtar sedan nyttolasten för det virtuella datorprogrammet och installerar den på varje virtuell dator med hjälp av det angivna installationsskriptet. Egenskapen order definierar den sekventiella ordning i vilken de virtuella datorprogrammen installeras på den virtuella datorn.

Mer information om varje egenskap finns i schemat för applicationProfile för den virtuella datorn/VM-skalningsuppsättningen .

Om du vill lägga till en vm-programversion till en virtuell dator utför du en PUT på den virtuella datorn.

PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{VMName}?api-version=2024-03-03

{
  "properties": {
    "applicationProfile": {
      "galleryApplications": [
        {
          "order": 1,
          "packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version | latest}",
          "configurationReference": "{path to configuration storage blob}",
          "treatFailureAsDeploymentFailure": false
        }
      ]
    }
  },
  "name": "{vm name}",
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
  "location": "{vm location}"
}

Så här tillämpar du det virtuella datorprogrammet på en enhetlig skalningsuppsättning:

PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}?api-version=2024-03-03

{
  "properties": {
    "virtualMachineProfile": {
      "applicationProfile": {
        "galleryApplications": [
          {
            "order": 1,
            "packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version | latest}",
            "configurationReference": "{path to configuration storage blob}",
            "treatFailureAsDeploymentFailure": false
          }
        ]
      }
    }
  },
  "name": "{vm name}",
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
  "location": "{vm location}"
}

Svaret innehåller den fullständiga VM-modellen. Följande är relevanta delar.

{
  "name": "{vm name}",
  "id": "{vm id}",
  "type": "Microsoft.Compute/virtualMachines",
  "location": "{vm location}",
  "properties": {
    "applicationProfile": {
      "galleryApplications": ""
    },
    "provisioningState": "Updating"
  },
  "resources": [
    {
      "name": "VMAppExtension",
      "id": "{extension id}",
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "location": "centraluseuap",
      "properties": "@{autoUpgradeMinorVersion=True; forceUpdateTag=7c4223fc-f4ea-4179-ada8-c8a85a1399f5; provisioningState=Creating; publisher=Microsoft.CPlat.Core; type=VMApplicationManagerLinux; typeHandlerVersion=1.0; settings=}"
    }
  ]
}

Nästa steg

Läs mer om program för virtuella Azure-datorer. Lär dig hur du hanterar, uppdaterar eller tar bort azure VM-program.