Composants Dapr dans Azure Container Apps

Dapr utilise une conception modulaire où la fonctionnalité est fournie en tant que composant. L’utilisation des composants Dapr est facultative et dictée exclusivement par les besoins de votre application.

Les composants Dapr dans les applications conteneur sont des ressources au niveau de l’environnement qui :

  • peuvent fournir un modèle d’abstraction enfichable pour la connexion à des services externes de prise en charge ;
  • peuvent être partagés entre les applications conteneur ou étendus à des applications conteneur spécifiques ;
  • peuvent utiliser des secrets Dapr pour récupérer en toute sécurité des métadonnées de configuration.

Dans ce guide, vous allez apprendre à configurer les composants Dapr pour vos services Azure Container Apps.

Schéma de composant

Dans le projet open source Dapr, tous les composants sont conformes au schéma de base suivant.

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: [COMPONENT-NAME]
  namespace: [COMPONENT-NAMESPACE]
spec:
  type: [COMPONENT-TYPE]
  version: v1
  initTimeout: [TIMEOUT-DURATION]
  ignoreErrors: [BOOLEAN]
  metadata:
    - name: [METADATA-NAME]
      value: [METADATA-VALUE]

Dans Azure Container Apps, le schéma ci-dessus est légèrement simplifié pour prendre en charge les composants Dapr et supprimer des champs inutiles, y compris apiVersion, kind, des métadonnées redondantes et des propriétés de spécification.

componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
  - name: [METADATA-NAME]
    value: [METADATA-VALUE]

Étendues des composants

Par défaut, toutes les applications de conteneur compatibles avec Dapr dans le même environnement chargeront l’ensemble des composants déployés. Pour garantir que seules les applications conteneur appropriées chargent des composants au moment de l’exécution, des étendues d’application doivent être utilisées. Dans l’exemple suivant, le composant est uniquement chargé par les deux applications conteneur compatibles Dapr avec les ID d’application Dapr APP-ID-1 et APP-ID-2 :

componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
  - name: [METADATA-NAME]
    value: [METADATA-VALUE]
scopes:
  - [APP-ID-1]
  - [APP-ID-2]

Remarque

Les étendues des composants Dapr correspondent à l’ID d’application Dapr d’une application conteneur, et non au nom de l’application conteneur.

Connexion à des services externes via Dapr

Il existe quelques approches prises en charge dans les applications conteneur pour établir en toute sécurité des connexions à des services externes pour les composants Dapr.

  1. Utilisation d’une identité managée
  2. Utilisation d’une référence de composant Magasin de secrets Dapr en créant :

Utilisation d’une identité managée

Pour les services hébergés par Azure, Dapr peut utiliser l’identité managée des applications conteneur délimitées pour s’authentifier auprès du fournisseur de services back-end. Lorsque vous utilisez une identité managée, vous n’avez pas besoin d’inclure d’informations secrètes dans un manifeste de composant. L’utilisation de l’identité managée est recommandée, car elle élimine le stockage des entrées sensibles dans les composants et ne nécessite pas de gestion d’un magasin de secrets.

Remarque

Le azureClientId champ de métadonnées (l’ID client de l’identité managée) est requis pour tout composant s’authentifiant avec une identité managée affectée par l’utilisateur.

Utilisation d’une référence de composant Magasin de secrets Dapr

Lorsque vous créez des composants Dapr pour des services incompatibles avec Entra ID, certains champs de métadonnées nécessitent des valeurs d’entrée sensibles. L’approche recommandée pour récupérer ces secrets consiste à référencer un composant de magasin de secrets Dapr existant qui accède en toute sécurité aux informations sur les secrets.

Pour configurer une référence :

  1. Créez un composant Magasin de secrets Dapr à l’aide du schéma Azure Container Apps. Le type de composant pour tous les magasins de secrets Dapr pris en charge commence par secretstores..
  2. Créez des composants supplémentaires (en fonction de vos besoins) qui référencent le composant Magasin de secrets Dapr que vous avez créé pour récupérer l’entrée de métadonnées sensibles.

Création d’un composant Magasin de secrets Dapr

Lors de la création d’un composant Magasin de secrets dans Azure Container Apps, vous pouvez fournir des informations sensibles dans la section métadonnées de l’une des manières suivantes :

Magasins de secrets Azure Key Vault

Le composant suivant présente la configuration de magasin de secrets la plus simple possible en utilisant un magasin de secrets Azure Key Vault. Dans cet exemple, les applications de publication et souscription sont configurées pour disposer d’une identité managée affectée par l’utilisateur ou le système avec les autorisations appropriées sur l’instance Azure Key Vault.

componentType: secretstores.azure.keyvault
version: v1
metadata:
  - name: vaultName
    value: [your_keyvault_name]
  - name: azureEnvironment
    value: "AZUREPUBLICCLOUD"
  - name: azureClientId # Only required for authenticating user-assigned managed identity
    value: [your_managed_identity_client_id]
scopes:
  - publisher-app
  - subscriber-app
Secrets Kubernetes gérés par la plateforme

Les secrets Kubernetes, les variables d’environnement local et les magasins de secrets Dapr de fichier local ne sont pas pris en charge dans Azure Container Apps. En guise d’alternative au magasin de secrets Kubernetes Dapr par défaut en amont, Azure Container Apps fournit une approche gérée par la plateforme pour la création et l’exploitation des secrets Kubernetes.

Cette configuration de composant définit la valeur sensible en tant que paramètre secret qui peut être référencé à partir de la section métadonnées. Cette approche peut être utilisée pour se connecter à des services non-Azure ou dans des scénarios de développement/test pour déployer rapidement des composants via l’interface CLI sans configurer de magasin de secrets ou d’identité managée.

componentType: secretstores.azure.keyvault
version: v1
metadata:
  - name: vaultName
    value: [your_keyvault_name]
  - name: azureEnvironment
    value: "AZUREPUBLICCLOUD"
  - name: azureTenantId
    value: "[your_tenant_id]"
  - name: azureClientId 
    value: "[your_client_id]"
  - name: azureClientSecret
    secretRef: azClientSecret
secrets:
  - name: azClientSecret
    value: "[your_client_secret]"
scopes:
  - publisher-app
  - subscriber-app

Référencement des composants du magasin de secrets Dapr

Une fois que vous avez créé un magasin de secrets Dapr à l’aide de l’une des approches précédentes, vous pouvez référencer ce magasin de secrets à partir d’autres composants Dapr dans le même environnement. L’exemple suivant illustre l’utilisation de l’authentification Entra ID.

componentType: pubsub.azure.servicebus.queue
version: v1
secretStoreComponent: "[your_secret_store_name]"
metadata:
  - name: namespaceName
    # Required when using Azure Authentication.
    # Must be a fully-qualified domain name
    value: "[your_servicebus_namespace.servicebus.windows.net]"
  - name: azureTenantId
    value: "[your_tenant_id]"
  - name: azureClientId 
    value: "[your_client_id]"
  - name: azureClientSecret
    secretRef: azClientSecret
scopes:
  - publisher-app
  - subscriber-app

Exemples de composants

Pour créer un composant Dapr via l’interface CLI Container Apps, vous pouvez utiliser un manifeste YAML d’applications conteneur. Lorsque vous configurez plusieurs composants, vous devez créer et appliquer un fichier YAML distinct pour chaque composant.

az containerapp env dapr-component set --name ENVIRONMENT_NAME --resource-group RESOURCE_GROUP_NAME --dapr-component-name pubsub --yaml "./pubsub.yaml"
# pubsub.yaml for Azure Service Bus component
componentType: pubsub.azure.servicebus.queue
version: v1
secretStoreComponent: "my-secret-store"
metadata:
  - name: namespaceName
    # Required when using Azure Authentication.
    # Must be a fully-qualified domain name
    value: "[your_servicebus_namespace.servicebus.windows.net]"
  - name: azureTenantId
    value: "[your_tenant_id]"
  - name: azureClientId 
    value: "[your_client_id]"
  - name: azureClientSecret
    secretRef: azClientSecret
scopes:
  - publisher-app
  - subscriber-app

Étapes suivantes

Découvrir comment définir la résilience des composants Dapr.