Üzembe helyezés az Azure Container Appsben az Azure Developer CLI használatával

Az Azure Developer CLI (azd) támogatja az Azure Container Apps és az Azure Container App Jobs üzembe helyezését is. Az Azure Container Apps azd esetében két üzembehelyezési stratégiát kínál:

  • Képalapú stratégia. Elkülöníti a tárolóalkalmazás konfigurációs frissítéseit a rendszerképek központi telepítésétől.
  • Korrektúraalapú stratégia. Mindkettőt egyetlen üzembe helyezésre egyesíti, és támogatja a speciális bevezetési mintákat.

A következő szakaszok mindkét stratégiát ismertetik, valamint a Container App Jobs üzembe helyezésének módját.

Üzembe helyezés a Container Apps expressben (előzetes verzió)

azd támogatja a képalapú telepítéseket a Azure Container Apps express (preview) szolgáltatásba. Használja a meglévő containerapp hosztot azure.yaml; nincs szükség külön hoszttípusra az Expresshez:

Fontos

A Container Apps express támogatásához a azd 1.35.0-béta.1-es vagy újabb verzió szükséges.

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

Az infrastruktúrában hozzon létre egy felügyelt környezetet, ahol a(z) properties.environmentMode értéke Express. A tárolóalkalmazásnak hivatkoznia kell erre a környezetre, és tartalmaznia kell egy olyan azd-service-name címkét, amely megegyezik a(z) azure.yaml szolgáltatásnevével:

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

Adja meg az Microsoft.App/containerApps erőforrást, ahol a(z) environmentId értéke containerAppsEnvironment.id. Adjon hozzá egy olyan címkét azd-service-name, amelynek az értéke web, hogy megegyezzen a szolgáltatás nevével azure.yaml.

A folyamat során a azd deploy észleli a szülőkörnyezet expressz módját, és frissíti a konténerképet egyéni revízióutótag vagy forgalmi súlyok beállítása nélkül. Az Express automatikusan végrehajt egyetlen verziót érintő gördülő frissítést.

Használja a képalapú üzembe helyezési stratégiát az Expresshez. A változatalapú stratégia nem igazítja az üzembe helyezési Bicep-sablont az expresszhez, és az expressz nem támogatja a több változatot vagy a forgalom felosztását. Az infrastruktúra meghatározása előtt tekintse át az express szolgáltatások aktuális rendelkezésre állását és korlátozásait.

Rendszerképalapú üzembehelyezési stratégia

Ebben a stratégiában a tárolóalkalmazás konfigurációja létrejön és frissül a azd provision alatt, míg a konténerkép frissítése a azd deploy alatt történik.

  • A tárolóalkalmazás definíciója (erőforrások, környezeti változók, állapotminták stb.) a kiépítés során alkalmazott Bicep-modulban található.
  • Csak a tárolórendszerkép-referencia (containers[0].image) változik az üzembe helyezés során.

Korrektúra viselkedése

Az alkalmazáskonfiguráció vagy a rendszerkép minden módosítása új változatot aktivál:

Step Command Módosítások alkalmazása Jegyzetek
1 azd provision Környezeti változók, erőforrások, csatlakoztatások, mintavételek, terheléselosztók Új változat létrehozása
2 azd deploy Konténer kép Egy másik változatot hoz létre

Minden változat további replikákat foglal le a Container Apps-környezetben, amelyek ideiglenesen növelhetik az erőforrás-használatot és a költségeket.

Megjegyzés:

A speciális bevezetési minták, például a kék-zöld vagy a kanári nem támogatottak ebben a stratégiában.

Képalapú telepítések konfigurálása

Ha gondoskodni szeretne arról, hogy azd provision egy meglévő tárolóalkalmazás frissítése a legújabb üzembe helyezett rendszerkép felülírása nélkül történjen, végezzen upsert műveletet. Ezt a mintát az AVM-modul container-app-upsert valósítja meg, és két lépésből áll:

  1. main.parameters.jsonAdjon meg egy paramétert, amely az azd által megadott változóra SERVICE_{NAME}_RESOURCE_EXISTShivatkozik. A rendszer automatikusan beállítja ezt a változót a azd kiépítéskor, hogy jelezze, hogy az erőforrás már létezik-e.

    {
      "$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. A Bicep-fájlban hivatkozzon a exists paraméterre annak ellenőrzéséhez, hogy létre kell-e hozni vagy frissíteni a tárolóalkalmazást. A container-app-upsert modul belsőleg foglalja magában ezt a logikát.

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

    Ez a megközelítés lehetővé teszi azd provision a tárolóalkalmazás erőforrásának biztonságos upsertelését (frissíti, ha létezik, vagy létrehozza, ha nem), manuális ellenőrzések nélkül.

    Jótanács

    Tartsa a apiVersion és azure.yaml elemeket a Bicep-modullal apiVersion illetve Microsoft.App/containerApps összhangban az eltérések elkerülése érdekében.

Változatalapú üzembe helyezési stratégia

Ebben a stratégiában a konténer alkalmazás definíciója és rendszerképe együtt kerül üzembe helyezésre azd deploy során.

  • A tárolóalkalmazás konfigurációja az üzembe helyezés során alkalmazott dedikált Bicep-modulban található.

  • A környezeti változók, képek, erőforrások és terheléselosztási beállítások módosításai egyetlen változatként jelennek meg.

    Jótanács

    Ez a stratégia támogatja a kék-zöld, a kanári- és egyéb fejlett bevezetési mintákat.

Verzióalapú üzembe helyezések konfigurálása

  1. A tárolóalkalmazás üzembe helyezésének definiálásához hozzon létre egy infrafájlt a szolgáltatáshoz, például infra/api.bicep. A tárolóalkalmazást az AVM-alapú modullal vagy közvetlenül az erőforrás definiálásával határozhatja meg:

    @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. Paraméterek megadása üzembe helyezéskor paraméterfájl létrehozásával (pl. 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}" }
      }
    }
    

    Megjegyzés:

    SERVICE_API_IMAGE_NAME dinamikusan van beállítva az üzembe helyezés során, és nem része a kiépítési kimeneteknek.

    Amikor futtatja a(z) azd deploy, a tárolóalkalmazás változata a fenti erőforrásdefinícióval kerül alkalmazásra.

    Jótanács

    Továbbítson el minden további kimenetet azd provision paraméterként azd deploy részére, ha a tárolóalkalmazás más kiépített erőforrásokra hivatkozik.

Összehasonlítás összegzése

Jellemző Képalapú Korrektúraalapú
Frissítési parancs azd provision + azd deploy azd deploy csak
Bevezetés típusa Két változat Egyetlen változat
Bevezetési vezérlő Felügyelte: azd Konfigurálható (kék-zöld, kanári)
Felhasználási eset Egyszerű környezetek Haladó telepítések
A tárolóalkalmazás definíció helye Üzembe helyezési idő Bicep Üzembe helyezési idejű Bicep

Konténeralkalmazás-feladatok üzembe helyezése

A Container Apps azd mellett az Azure Container App Jobs (Microsoft.App/jobs) üzembe helyezését is támogatja. A Tárolóalkalmazás-feladatok olyan tevékenységekre vannak kialakítva, amelyek befejezésig futnak, például kötegelt feldolgozásra, ütemezett feladatokra vagy eseményvezérelt munkákra.

Megjegyzés:

A Container App Jobs azonos host: containerapp beállítást használja azure.yaml-ban/-ben. Nincs szükség új gazdagéptípusra. A Bicep-sablon meghatározza, hogy az általad meghatározott erőforrástípus alapján azd konténeralkalmazást vagy konténeralkalmazás-feladatot létesít-e.

Hogyan működik?

Amikor azd felfedez egy feladaterőforrást, amely a következő címkével azd-service-namevan megjelölve:

  1. Létrehozza és leküldi a Docker-rendszerképet az Azure Container Registrybe (ugyanaz, mint a Container Apps).
  2. Frissíti a feladat tárolórendszerképét a Container App Jobs API meghívásával a Container Apps API helyett.
  3. Üres végpontokat ad vissza, mert a feladatok nem rendelkeznek bejövő forgalommal.

Tárolóalkalmazás-feladat üzembe helyezésének konfigurálása

  1. Adja meg a azure.yaml feladatszolgáltatás fájlját. Használja a host: containerapp és language: docker:

    name: myapp
    services:
      job:
        host: containerapp
        language: docker
        project: ./src/job
        docker:
          path: ./Dockerfile
          context: .
    
  2. Hozzon létre egy Bicep-modult, amely kiépít egy Microsoft.App/jobs erőforrást. Címkézze fel az erőforrást azd-service-name , hogy azd felfedezhesse azt. A paraméterek és a meglévő erőforráshivatkozások (tárolóregisztrációs adatbázis, felügyelt környezet, identitás) ugyanazt a mintát követik, mint a Container Apps fenti példái:

    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}': {}
        }
      }
    }
    

    Fontos

    A azd-service-name címke értékének meg kell egyeznie a fájlban szereplő azure.yaml szolgáltatásnévvel. Ezzel a azd címkével társítja a kiépített erőforrást a szolgáltatáshoz.

  3. Futtassa a azd up a kiépítéshez és üzembe helyezéséhez. A parancssori felület automatikusan észleli, hogy a címkézett erőforrás tárolóalkalmazás-feladat, és ennek megfelelően kezeli az üzembe helyezést.

A Container Apps főbb eltérései

Jellemző Container Apps Tárolóalkalmazás-feladatok
Erőforrás típusa Microsoft.App/containerApps Microsoft.App/jobs
Bejövő/végpontok HTTP-bejövő forgalom támogatása Nincs bejövő forgalom (üres végpontok)
Végrehajtási modell Hosszan futó szolgáltatások Befejezésig futó feladatok
Eseményindító-típusok Kérelemalapú Manuális, ütemezett vagy eseményvezérelt
Hoszt beállítása a következőben: azure.yaml host: containerapp host: containerapp

További erőforrások