Delen via


Implementeren in Azure Container Apps met behulp van de Azure Developer CLI

De Azure Developer CLI (azd) ondersteunt twee implementatiestrategieën voor Azure Container Apps:

  • Strategie op basis van afbeeldingen. Scheiding van container-app-configuratie-updates en image-implementaties.
  • Op revisie gebaseerde strategie. Combineert beide in één implementatie en ondersteunt geavanceerde implementatiepatronen.

In de volgende secties worden beide strategieën uitgelegd.

Implementatiestrategie op basis van schijfkopieën

In deze strategie wordt de configuratie van de container-app gemaakt en bijgewerkt tijdens azd provision, terwijl de containerinstallatiekopieën worden bijgewerkt tijdens azd deploy.

  • De definitie van de container-app (resources, omgevingsvariabelen, statustests, enzovoort) bevindt zich in een Bicep-module die tijdens het inrichten wordt toegepast.
  • Alleen de verwijzing naar het containerimage (containers[0].image) verandert tijdens de uitrol.

Revisiegedrag

Elke wijziging in de app-configuratie of afbeelding leidt tot een nieuwe revisie.

Step Command Past wijzigingen toe op Opmerkingen
1 azd provision Omgevingsvariabelen, bronnen, koppelingen, probes, load balancers Hiermee maakt u een nieuwe revisie
2 azd deploy Containerinstallatiekopie Hiermee maakt u een andere revisie

Elke revisie wijst extra replica's toe in de Container Apps-omgeving, wat het resourcegebruik en de kosten tijdelijk kan verhogen.

Opmerking

Geavanceerde implementatiepatronen, zoals blauwgroen of kanarie, worden niet ondersteund in deze strategie.

Implementaties op basis van installatiekopieën configureren

Voer een azd provision uit om ervoor te zorgen dat een bestaande container-app wordt bijgewerkt zonder de meest recente geïmplementeerde installatiekopie te overschrijven. Dit patroon wordt geïmplementeerd door de AVM-module container-app-upsert en bestaat uit twee stappen:

  1. Definieer een parameter in uw main.parameters.json die verwijst naar de door azd verstrekte variabele SERVICE_{NAME}_RESOURCE_EXISTS. Deze variabele wordt bij het inrichtingsproces automatisch ingesteld door azd om aan te geven of de resource al bestaat.

    {
      "$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. Verwijs in uw Bicep-bestand naar de exists parameter om te bepalen of de container-app moet worden gemaakt of bijgewerkt. De container-app-upsert module bevat deze logica 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
      }
    }
    

    Met deze methode kan azd provision de container-app-resource veilig bijwerken en aanmaken (bijwerken indien aanwezig, aanmaken indien niet) zonder handmatige controles.

    Aanbeveling

    Houd de apiVersion in azure.yaml uitgelijnd met de Bicep-module's apiVersion voor Microsoft.App/containerApps om mismatches te voorkomen.

Implementatiestrategie op basis van revisie

In deze strategie worden zowel de definitie van de container-app als de installatiekopie samen geïmplementeerd tijdens azd deploy.

  • De configuratie van de container-app bevindt zich in een toegewezen Bicep-module die tijdens de implementatie is toegepast.

  • Wijzigingen in omgevingsvariabelen, installatiekopieën, resources en taakverdelingsinstellingen worden geïmplementeerd als één revisie.

    Aanbeveling

    Deze strategie ondersteunt blauwgroene, kanarie en andere geavanceerde implementatiepatronen.

Implementaties op basis van revisies configureren

  1. Definieer de implementatie van de container-app door een infrabestand voor uw service te maken, zoals infra/api.bicep. U kunt uw container-app definiëren met behulp van de AVM-module of door de resource rechtstreeks te definiëren:

    @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. Geef parameters op tijdens de implementatie door een parameterbestand te maken (bijvoorbeeld 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}" }
      }
    }
    

    Opmerking

    SERVICE_API_IMAGE_NAME wordt dynamisch ingesteld tijdens de uitrol en maakt geen deel uit van de uitvoer van de voorzieningen.

    Wanneer u uitvoert azd deploy, wordt de revisie van de container-app toegepast met behulp van de bovenstaande resourcedefinitie.

    Aanbeveling

    Geef eventuele extra uitvoer van azd provision door als parameters aan azd deploy als uw container-applicatie naar andere ingerichte bronnen verwijst.

Vergelijkingsoverzicht

Kenmerk Op afbeeldingen gebaseerd Op basis van revisie
Opdracht Bijwerken azd provision + azd deploy azd deploy alleen
Implementatietype Twee revisies Eén revisie
Uitrolbeheer Beheerd door azd Configureerbaar (blauw-groen, kanarie)
Gebruiksituatie Eenvoudige omgevingen Geavanceerde implementaties
Locatie van container-app-definitie Inrichtingstijd Bicep Bicep-implementatietijd

Aanvullende bronnen