Udostępnij przez


Wdrażanie do Azure Container Apps przy użyciu Azure CLI dla deweloperów

Interfejs wiersza polecenia dla deweloperów platformy Azure (azd) obsługuje dwie strategie wdrażania dla usługi Azure Container Apps:

  • Strategia oparta na obrazach. Oddziela aktualizacje konfiguracji aplikacji kontenera od wdrożeń obrazów.
  • Strategia oparta na poprawkach. Łączy oba w jedno wdrożenie i obsługuje zaawansowane wzorce wdrażania.

W poniższych sekcjach opisano obie strategie.

Strategia wdrażania oparta na obrazach

W tej strategii konfiguracja aplikacji kontenera jest tworzona i aktualizowana podczas azd provision, podczas gdy obraz kontenera jest aktualizowany podczas azd deploy.

  • Definicja aplikacji kontenera (zasoby, zmienne środowiskowe, sondy kondycji itd.) znajduje się w module Bicep zastosowanym podczas aprowizacji.
  • Podczas wdrażania zmienia się tylko odwołanie do obrazu kontenera (containers[0].image).

Zachowanie rewizji

Każda zmiana konfiguracji aplikacji lub obrazu wyzwala nową poprawkę:

Step Command Wprowadza zmiany do Notatki
1 azd provision Zmienne środowiskowe, zasoby, instalacja, sondy, moduły równoważenia obciążenia Tworzy nową poprawkę
2 azd deploy Obraz kontenera Tworzy kolejną poprawkę

Każda poprawka przydziela dodatkowe repliki w środowisku Container Apps, co może tymczasowo zwiększyć użycie zasobów i koszty.

Uwaga / Notatka

Zaawansowane wzorce wdrażania, takie jak niebieski-zielony lub kanary, nie są obsługiwane w tej strategii.

Konfigurowanie wdrożeń opartych na obrazach

Aby upewnić się, że azd provision aktualizuje istniejącą aplikację kontenera bez zastępowania najnowszego wdrożonego obrazu, wykonaj operację upsert . Ten wzorzec jest implementowany przez moduł AVM container-app-upsert i składa się z dwóch kroków:

  1. W pliku main.parameters.jsonzdefiniuj parametr, który odwołuje się do zmiennej SERVICE_{NAME}_RESOURCE_EXISTSudostępnionej przez azd. Ta zmienna jest automatycznie ustawiana w momencie aprowizacji przez azd, aby wskazać, czy zasób już istnieje.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "environmentName": {
          "value": "${AZURE_ENV_NAME}"
        },
        "location": {
          "value": "${AZURE_LOCATION}"
        },
        // ... other parameters
        "apiExists": {
          "value": "${SERVICE_API_RESOURCE_EXISTS}"
        }
      }
    }
    
  2. W pliku Bicep odwołaj się do parametru exists w celu kontrolowania, czy aplikacja kontenera powinna zostać utworzona, czy zaktualizowana. Moduł container-app-upsert hermetyzuje tę logikę wewnętrznie.

    @description('Indicates whether the container app resource already exists.')
    param apiExists bool
    
    module api 'br/public:avm/ptn/azd/container-app-upsert:0.1.2' = {
      name: 'api'
      params: {
        name: 'my-api'
        location: location
        containerAppsEnvironmentName: containerAppsEnvironment.name
        containerRegistryName: containerRegistry.name
        imageName: !empty(apiImageName) ? apiImageName : ''
        exists: apiExists
        env: [
          {
            name: 'MONGODB_CONNECTION_STRING'
            value: mongodb.outputs.connectionString
          }
        ]
        targetPort: 3100
      }
    }
    

    To podejście pozwala na azd provisionwstawienie/aktualizację (aktualizacja, jeśli istnieje; utworzenie, jeśli nie) zasobu aplikacji kontenera bezpiecznie, bez ręcznych kontroli.

    Wskazówka

    Zachowaj apiVersionazure.yaml wyrównanie elementu do modułu apiVersionMicrosoft.App/containerApps Bicep, aby uniknąć niezgodności.

Strategia wdrażania oparta na poprawkach

W tej strategii zarówno definicja aplikacji kontenera, jak i obraz są wdrażane razem podczas .azd deploy

  • Konfiguracja aplikacji kontenera znajduje się w dedykowanym module Bicep zastosowanym podczas wdrażania.

  • Zmiany zmiennych środowiskowych, obrazów, zasobów i ustawień równoważenia obciążenia są wdrażane jako pojedyncza poprawka.

    Wskazówka

    Ta strategia obsługuje blue-green, canary i inne zaawansowane wzorce wdrażania.

Konfigurowanie wdrożeń opartych na poprawkach

  1. Zdefiniuj wdrożenie aplikacji kontenera, tworząc plik infra dla usługi, na przykład infra/api.bicep. Aplikację kontenera można zdefiniować przy użyciu modułu avM lub bezpośrednio definiując zasób:

    @description('Unique environment name used for resource naming.')
    param environmentName string
    
    @description('Primary location for all resources.')
    param location string
    
    param containerRegistryName string
    param containerAppsEnvironmentName string
    param imageName string
    param identityId string
    
    resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-01-01-preview' existing = {
      name: containerRegistryName
    }
    
    resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2022-03-01' existing = {
      name: containerAppsEnvironmentName
    }
    
    module api 'br/public:avm/res/app/container-app:0.8.0' = {
      name: 'api'
      params: {
        name: 'api'
        ingressTargetPort: 80
        scaleMinReplicas: 1
        scaleMaxReplicas: 10
        containers: [
          {
            name: 'main'
            image: imageName
            resources: {
              cpu: json('0.5')
              memory: '1.0Gi'
            }
          }
        ]
        managedIdentities: {
          systemAssigned: false
          userAssignedResourceIds: [identityId]
        }
        registries: [
          {
            server: containerRegistry.properties.loginServer
            identity: identityId
          }
        ]
        environmentResourceId: containerAppsEnvironment.id
        location: location
        tags: {
          'azd-env-name': environmentName
          'azd-service-name': 'api'
        }
      }
    }
    
  2. Podaj parametry w czasie wdrażania, tworząc plik parametrów (np. api.parameters.json):

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "environmentName": { "value": "${AZURE_ENV_NAME}" },
        "location": { "value": "${AZURE_LOCATION}" },
        "containerRegistryName": { "value": "${AZURE_CONTAINER_REGISTRY_NAME}" },
        "containerAppsEnvironmentName": { "value": "${AZURE_CONTAINER_ENVIRONMENT_NAME}" },
        "imageName": { "value": "${SERVICE_API_IMAGE_NAME}" },
        "identityId": { "value": "${SERVICE_API_IDENTITY_ID}" }
      }
    }
    

    Uwaga / Notatka

    SERVICE_API_IMAGE_NAME parametr jest dynamicznie ustawiany podczas wdrażania i nie stanowi części wyników aprowizacji.

    Po uruchomieniu azd deploy rewizja aplikacji kontenera zostanie zastosowana z wykorzystaniem powyższej definicji zasobu.

    Wskazówka

    Przekaż wszelkie dodatkowe dane wyjściowe z azd provision jako parametry do azd deploy, jeśli twoja aplikacja kontenerowa odwołuje się do innych przydzielonych zasobów.

Podsumowanie porównania

Aspekt Oparte na obrazach Oparte na poprawkach
Aktualizuj polecenie azd provision + azd deploy azd deploy tylko
Typ wdrożenia Dwie poprawki Pojedyncza poprawka
Kontrola wdrażania Zarządzane przez azd Konfigurowalne (niebiesko-zielone, kanary)
Przypadek użycia Proste środowiska Wdrożenia zaawansowane
Lokalizacja definicji kontenera aplikacji Czas Provisioningu dla Bicep Wdrażanie Bicep w czasie wdrożenia

Dodatkowe zasoby