다음을 통해 공유


VM 애플리케이션 만들기 및 배포

VM 애플리케이션은 가상 머신에 대한 애플리케이션의 관리, 공유 및 전역 배포를 간소화하는 Azure Compute Gallery의 리소스 유형입니다. VM 애플리케이션에 대해 자세히 알아보기

Azure VM에서 애플리케이션을 만들고 배포하려면 먼저 Azure Storage 계정에 애플리케이션을 스토리지 Blob으로 패키지하고 업로드합니다. 그런 다음 이 스토리지 Blob을 참조하는 Azure VM application 리소스를 만들고 VM application version 리소스를 만듭니 다. 마지막으로 applicationProfile에 애플리케이션 참조를 전달하여 애플리케이션을 VM 또는 가상 머신 확장 집합에 배포합니다.

필수 구성 요소

  1. Azure Storage 계정스토리지 컨테이너를 만듭니다. 이 컨테이너는 애플리케이션 파일을 업로드하는 데 사용됩니다. 보안을 강화하려면 익명 액세스가 비활성화된 스토리지 계정을 사용하는 것이 좋습니다.
  2. 애플리케이션 리소스를 저장하고 공유하기 위한 Azure Compute 갤러리를 만듭니다.

애플리케이션 패키지

VM 애플리케이션을 업로드하고 만드는 데 권장되는 폴더 구조를 보여 주는 스크린샷

1. 애플리케이션 파일 패키지

  • 애플리케이션 설치에 단일 파일(.exe, .msi, .sh, .ps 등)이 필요한 경우 그대로 사용할 수 있습니다.
  • 애플리케이션 설치에 여러 파일(구성 파일, 종속성, 매니페스트 파일, 스크립트 등이 있는 실행 파일)이 필요한 경우 단일 파일에 보관해야 합니다(.zip, .tar, .tar.gz 등 사용).
  • 마이크로 서비스 애플리케이션의 경우 각 마이크로 서비스를 별도의 Azure VM 애플리케이션으로 패키지하고 게시할 수 있습니다. 이렇게 하면 order의 속성을 사용하여 애플리케이션 재사용성, 팀 간 개발 및 순차적으로 마이크로 서비스를 설치할 수 있습니다.

2. (선택 사항) 애플리케이션 구성 파일 패키지

  • 필요에 따라 구성 파일을 별도로 제공할 수 있습니다. 이렇게 하면 애플리케이션 패키지를 보관하고 보관하지 않는 오버헤드가 줄어듭니다. VM당 사용자 지정된 설치를 사용하도록 설정하는 앱 배포 중에 구성 파일을 전달할 수도 있습니다.

3. 설치 스크립트 만들기

VM에서 애플리케이션 및 구성 Blob을 다운로드한 후 Azure는 제공된 설치 스크립트를 실행하여 애플리케이션을 설치합니다. 설치 스크립트는 문자열로 제공되며 최대 문자 제한은 4,096자입니다. 설치 명령은 애플리케이션 패키지와 구성 파일이 현재 디렉터리에 있다고 가정하여 작성해야 합니다.

설치 스크립트에서 수행해야 하는 작업이 거의 없을 수 있습니다.

  • (선택 사항) 올바른 명령 인터프리터 사용 Azure /bin/bash 에서 사용하는 기본 명령 인터프리터는 Linux OS 및 cmd.exe Windows OS에 있습니다. 컴퓨터에 설치된 경우 Chocolatey 또는 PowerShell과 같은 다른 인터프리터를 사용할 수 있습니다. 실행 파일을 호출하고 명령을 전달합니다. 예: powershell.exe -command '<powershell command>'. PowerShell을 사용하는 경우 Az.Storage 모듈 버전 3.11.0을 사용해야 합니다.

  • (선택 사항) 애플리케이션 Blob 및 구성 Blob 이름 바꾸기 Azure는 원래 파일 이름 및 파일 확장명을 유지할 수 없습니다. 따라서 다운로드한 애플리케이션 파일과 구성 파일의 기본 이름은 파일 확장명 없이 "MyVMApp" 및 "MyVMApp-config"입니다. 설치 스크립트를 사용하여 파일 확장명을 사용하여 파일 이름을 바꾸거나 packageFileName 이름과 configFileNamepublishingProfile 속성을 전달할 수도 있습니다. 그러면 Azure는 파일을 다운로드하는 동안 기본 이름 대신 이러한 이름을 사용합니다.

  • (선택 사항) 애플리케이션 및 구성 Blob을 적절한 위치로 이동 Azure는 애플리케이션 Blob 및 구성 Blob을 다음 위치에 다운로드합니다. 설치 스크립트는 필요한 경우 파일을 적절한 위치로 이동해야 합니다.

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

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

  • 애플리케이션 Blob 해제 보관된 애플리케이션 패키지는 애플리케이션을 설치하기 전에 압축 해제가 필요합니다. 대부분의 OS는 이러한 형식의 보관을 기본적으로 지원하기 때문에 .zip 또는 .tar 사용하는 것이 좋습니다. 다른 형식의 경우 게스트 OS에서 지원을 제공하는지 확인합니다.

  • (선택 사항) 올바른 실행 정책 및 권한 설정 보관을 취소한 후 파일 권한을 다시 설정할 수 있습니다. 파일을 실행하기 전에 올바른 권한을 설정하는 것이 좋습니다.

  • 스크립트를 문자열로 변환 설치 스크립트는 Azure VM 애플리케이션 버전 리소스의 install 속성에 publishingProfile 대한 문자열로 전달됩니다.

다음은 애플리케이션 Blob의 파일 확장자를 기반으로 하는 샘플 설치 스크립트입니다.

#!/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

문자열로 스크립트:

"#!/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. 삭제 스크립트 만들기

삭제 스크립트를 사용하면 애플리케이션에 대한 삭제 작업을 정의할 수 있습니다. 삭제 스크립트는 문자열로 제공되며 최대 문자 제한은 4,096자입니다. 애플리케이션 패키지와 구성 파일이 현재 디렉터리에 있다고 가정하고 delete 명령을 작성합니다.

삭제 스크립트가 수행해야 하는 작업은 거의 없을 수 있습니다.

  • 애플리케이션 제거: VM에서 애플리케이션을 제대로 제거합니다. 예를 들어 uninstall.exe을 Windows에서 실행하거나 sudo apt remove app을 Linux에서 실행합니다.

  • 잔여 파일을 제거합니다. VM에서 잔여 애플리케이션 파일을 삭제합니다. 예를 들어 Remove-Item -Path "$PWD\*" -Recurse -Force -ErrorAction SilentlyContinue을 Windows에서 실행하거나 sudo rm -rf ./* ./.??*을 Linux에서 실행합니다.

Azure Storage 계정에 애플리케이션 파일 업로드

1. Azure Storage 계정의 컨테이너에 애플리케이션 및 구성 파일을 업로드합니다.

애플리케이션은 블록 또는 페이지 Blob에 저장할 수 있습니다. 페이지 Blob을 사용하도록 선택한 경우 파일을 업로드하기 전에 바이트 정렬해야 합니다. 다음 샘플을 사용하여 파일을 바이트 정렬합니다.

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. 애플리케이션 패키지 및 구성 파일에 대한 SAS URL 생성

애플리케이션 및 구성 파일이 스토리지 계정에 업로드되면 이러한 Blob에 대한 읽기 권한이 있는 SAS URL을 생성 해야 합니다. 그런 다음 이러한 SAS URL은 VM 애플리케이션 버전 리소스를 만드는 동안 참조로 제공됩니다. 익명 액세스를 사용하도록 설정된 Storage 계정의 경우 Blob URL도 사용할 수 있습니다. 그러나 보안 향상을 위해 SAS URL을 사용하는 것이 좋습니다. SAS URI가 아직 없는 경우 Storage Explorer를 사용하여 빠르게 만들 수 있습니다.


#!/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

VM 애플리케이션 만들기

VM 애플리케이션을 만들려면 먼저 애플리케이션을 설명하는 VM 애플리케이션 리소스를 만듭니다. 그런 다음, 애플리케이션을 설치, 업데이트 및 삭제할 VM 애플리케이션 페이로드 및 스크립트를 포함하는 VM 애플리케이션 버전 리소스를 만듭니다. 페이로드는 AZURE Storage 계정의 Blob 컨테이너에 SAS URL을 사용하여 제공됩니다.

각 속성 에 대한 자세한 내용은 VM 애플리케이션 및 VM 애플리케이션 버전 리소스에 대한 스키마 를 참조하세요.

'갤러리 애플리케이션 API 만들기'를 사용하여 VM 애플리케이션 정의 만들기

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"
    }
}

'갤러리 애플리케이션 버전 API 만들기'를 사용하여 VM 애플리케이션 버전을 만듭니다.

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"
      }
   }
}

VM 앱 배포

이제 Azure VM 또는 Azure Virtual Machine Scale Sets에서 하나 이상의 VM 애플리케이션을 applicationProfile 참조할 수 있습니다. 그런 다음 Azure는 VM 애플리케이션의 페이로드를 끌어와 제공된 설치 스크립트를 사용하여 각 VM에 설치합니다. 이 속성은 order VM 애플리케이션이 VM에 설치되는 순차적 순서를 정의합니다.

각 속성에 대한 자세한 내용은 VM/Virtual Machine Scale Set의 applicationProfile 스키마 를 참조하세요.

VM에 VM 애플리케이션 버전을 추가하려면 VM에서 PUT을 수행합니다.

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}"
}

VM 애플리케이션을 균일한 확장 집합에 적용하려면 다음을 수행합니다.

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}"
}

응답에는 전체 VM 모델이 포함됩니다. 관련 부분은 다음과 같습니다.

{
  "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=}"
    }
  ]
}

다음 단계

Azure VM 애플리케이션에 대해 자세히 알아봅니다. Azure VM 애플리케이션 을 관리, 업데이트 또는 삭제 하는 방법을 알아봅니다.