Nasazení do Azure Container Apps pomocí Azure Developer CLI

Azure Developer CLI (azd) podporuje nasazení Azure Container Apps i Azure Container App Jobs. Pro Azure Container Apps azd nabízí dvě strategie nasazení:

  • Strategie založená na imagích. Odděluje aktualizace konfigurace kontejnerové aplikace od nasazení obrazů.
  • Strategie založená na revizích Kombinuje obojí do jednoho nasazení a podporuje pokročilé vzory zavedení.

Následující části popisují obě strategie spolu s nasazením úloh kontejnerové aplikace.

Nasadit do Container Apps express (preview)

azdpodporuje nasazení založená na imagích pro Azure Container Apps Express (Preview). Použijte existující containerapp hostitele v azure.yaml; pro express nepotřebujete samostatný typ hostitele:

Důležité

Podpora Express pro Container Apps vyžaduje verzi azd 1.35.0-beta.1 nebo novější.

services:
  web:
    host: containerapp
    image: mcr.microsoft.com/azuredocs/containerapps-helloworld:latest
    docker:
      imagePassthrough: true

Ve vaší infrastruktuře vytvořte spravované prostředí s properties.environmentMode nastaveným na Express. Aplikace kontejneru musí odkazovat na toto prostředí a obsahovat azd-service-name značku, která odpovídá názvu služby v azure.yaml:

resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2026-07-01' = {
  name: 'cae-${environmentName}'
  location: location
  properties: {
    environmentMode: 'Express'
  }
}

Definujte Microsoft.App/containerApps zdroj s environmentId nastaveným na hodnotu containerAppsEnvironment.id. Přidejte značku azd-service-name s hodnotou web, tak aby odpovídala názvu služby v souboru azure.yaml.

Během azd deployazd detekuje expresní režim nadřazeného prostředí a aktualizuje image kontejneru bez nastavení přípony vlastní revize nebo vah provozu. Express automaticky provede jednorevizní průběžnou aktualizaci.

Pro Express použijte strategii nasazení založenou na image. Strategie založená na revizích neupraví vaše nasazení v Bicepu pro Express a Express nepodporuje více revizí ani rozdělení provozu. Před definováním infrastruktury si projděte aktuální dostupnost a omezení funkcí Express.

Strategie nasazení založená na obrázcích

V této strategii se vytvoří a aktualizuje konfigurace aplikace kontejneru během azd provision, zatímco image kontejneru se aktualizuje během azd deploy.

  • Definice aplikace kontejneru (prostředky, proměnné prostředí, sondy stavu atd.) se nachází v modulu Bicep použitém během zřizování.
  • Během nasazení se změní pouze odkaz na image kontejneru (containers[0].image).

Chování revize

Každá změna konfigurace aplikace nebo image aktivuje novou revizi:

Step Command Použije změny na Poznámky
1 azd provision Proměnné prostředí, prostředky, připojené systémy, sondy, nástroje pro vyrovnávání zatížení Vytvoří novou revizi.
2 azd deploy Image kontejneru Vytvoří jinou revizi.

Každá revize přiděluje další repliky v prostředí Container Apps, což může dočasně zvýšit využití prostředků a náklady.

Poznámka:

V této strategii nejsou podporovány pokročilé vzory zavedení, jako je modro-zelené nebo kanárkové nasazení.

Konfigurace nasazení založených na obrazech

Pokud chcete zajistit, aby došlo k aktualizaci existující kontejnerové aplikace bez přepsání nejnovější nasazené image, proveďte operaci azd provision. Tento model implementuje modul AVM container-app-upsert a skládá se ze dvou kroků:

  1. V main.parameters.json definujte parametr, který odkazuje na proměnnou poskytovanou SERVICE_{NAME}_RESOURCE_EXISTS azd. Tato proměnná se automaticky azd nastaví v době zřízení k označení, jestli prostředek již existuje.

    {
      "$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. V souboru Bicep použijte parametr exists pro kontrolu, zda se má aplikace kontejneru vytvořit nebo aktualizovat. Modul container-app-upsert tuto logiku zapouzdřuje interně.

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

    Tento přístup umožňuje azd provisionupsertovat (aktualizovat, pokud již existuje, vytvořit, pokud ne) zdroj kontejnerové aplikace bezpečně bez nutnosti ručních kontrol.

    Návod

    Udržujte apiVersion v azure.yaml sladěný s apiVersion modulu Bicep pro Microsoft.App/containerApps, aby nedocházelo k neshodám.

Strategie nasazení na základě revizí

V této strategii se definice kontejnerové aplikace i image nasadí společně během azd deploy.

  • Konfigurace aplikace kontejneru se nachází ve vyhrazeném modulu Bicep použitém během nasazování.

  • Změny proměnných prostředí, obrázků, zdrojů a nastavení vyrovnávání zátěže jsou vydány jako jedna revize.

    Návod

    Tato strategie podporuje modrozelený, kanár a další pokročilé vzory zavedení.

Konfigurace nasazení podle revizí

  1. Definujte nasazení aplikace kontejneru vytvořením souboru infrastruktury pro vaši službu, například infra/api.bicep. Aplikaci kontejneru můžete definovat pomocí modulu založeného na AVM nebo definováním prostředku přímo:

    @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. Zadejte parametry v době nasazení vytvořením souboru parametrů (např. 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}" }
      }
    }
    

    Poznámka:

    SERVICE_API_IMAGE_NAME je dynamicky nastavená během nasazování a není součástí zřizovacích výstupů.

    Při spuštění azd deploy se revize aplikace kontejneru použije na základě výše uvedené definice prostředku.

    Návod

    Pokud vaše aplikace kontejneru odkazuje na jiné zřízené prostředky, předejte všechny další výstupy z azd provision jako parametry azd deploy.

Souhrn porovnání

Aspekt Založené na imagích Na základě revizí
Příkaz Aktualizovat azd provision + azd deploy azd deploy pouze
Typ uvedení Dvě revize Jedna revize
Ovládací prvek uvedení Spravováno azd Konfigurovatelné (modrá zelená, kanárka)
Případ použití Jednoduchá prostředí Pokročilá nasazení
Umístění definice kontejnerové aplikace Bicep v čase zřizování Bicep v čase nasazení

Nasazení úloh kontejnerové aplikace

Kromě kontejnerových aplikací azd podporuje nasazení úloh Azure Container App (Microsoft.App/jobs). Úlohy kontejnerové aplikace jsou navržené pro úlohy, které se spouští až do dokončení, jako je dávkové zpracování, naplánované úkoly nebo práce řízené událostmi.

Poznámka:

Úlohy kontejnerové aplikace používají stejné nastavení v host: containerappazure.yaml. Není vyžadován žádný nový typ hostitele. Šablona Bicep určuje, jestli azd zprostředkuje kontejnerovou aplikaci nebo úlohu kontejnerové aplikace na základě vámi definovaného typu prostředku.

Jak to funguje

Když azd zjistí zdroj úlohy označený značkou azd-service-name, bude:

  1. Sestaví a nasdílí image Dockeru do služby Azure Container Registry (stejné jako Container Apps).
  2. Aktualizuje image kontejneru úlohy zavoláním rozhraní API služby Container App Jobs místo rozhraní API Container Apps.
  3. Vrátí prázdné koncové body, protože úlohy nemají žádný ingres.

Konfigurace nasazení úlohy kontejnerové aplikace

  1. Definujte azure.yaml soubor pro vaši úlohu. Použití host: containerapp a language: docker:

    name: myapp
    services:
      job:
        host: containerapp
        language: docker
        project: ./src/job
        docker:
          path: ./Dockerfile
          context: .
    
  2. Vytvořte modul Bicep, který provisuje Microsoft.App/jobs prostředek. Označte prostředek pomocí azd-service-name, aby ho azd mohl nalézt. Parametry a existující odkazy na prostředky (registr kontejnerů, spravované prostředí, identita) se řídí stejným vzorem jako výše uvedené příklady Container Apps:

    resource job 'Microsoft.App/jobs@2025-02-02-preview' = {
      name: 'job'
      location: location
      tags: {
        'azd-env-name': environmentName
        'azd-service-name': 'job'
      }
      properties: {
        environmentId: containerAppsEnvironment.id
        configuration: {
          replicaTimeout: 300
          replicaRetryLimit: 1
          triggerType: 'Manual'
          registries: [
            {
              server: containerRegistry.properties.loginServer
              identity: identityId
            }
          ]
        }
        template: {
          containers: [
            {
              image: imageName
              name: 'main'
              resources: {
                cpu: json('0.5')
                memory: '1.0Gi'
              }
            }
          ]
        }
      }
      identity: {
        type: 'UserAssigned'
        userAssignedIdentities: {
          '${identityId}': {}
        }
      }
    }
    

    Důležité

    Hodnota azd-service-name značky se musí shodovat s názvem služby v azure.yaml souboru. Tato značka je způsob, jak azd spojuje zřízený prostředek s vaší službou.

  3. Spusťte azd up ke zřízení a nasazení. Rozhraní příkazového řádku automaticky zjistí, že označeným prostředkem je úloha kontejnerové aplikace a odpovídajícím způsobem zpracovává nasazení.

Hlavní rozdíly mezi container Apps

Aspekt Container Apps Úlohy aplikací s kontejnery
Typ zdroje Microsoft.App/containerApps Microsoft.App/jobs
Vstupní bod/koncové body Podporuje příchozí přenos dat HTTP. Žádný vstup (prázdné koncové body)
Model spouštění Dlouhotrvající služby Úkoly dokončení spuštění
Typy aktivačních událostí Řízené žádostmi Ruční, naplánované nebo řízené událostmi
Nastavení hostitele v azure.yaml host: containerapp host: containerapp

Dodatečné zdroje