Configurer un Spring Cloud Config Server managé dans Azure Spring Apps

Remarque

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

Cet article s’applique à : ✔️ Java ✔️ C#

Cet article s’applique à : ✔️ Consommation standard et dédié (préversion) ✔️ De base/Standard ❌ Enterprise

Cet article montre comment configurer un serveur de configuration Spring Cloud dans le service Azure Spring Apps.

Un serveur de configuration Spring Cloud offre la prise en charge côté serveur et côté client d’une configuration externalisée dans un système distribué. L’instance Config Server fournit un emplacement centralisé pour gérer les propriétés externes des applications dans tous les environnements. Pour plus d’informations, consultez la documentation sur Spring Cloud Config.

Remarque

Pour utiliser le serveur de configuration dans la consommation standard et le plan dédié, vous devez d’abord l’activer. Pour plus d’informations, consultez Activer et désactiver Spring Cloud Config Server dans Azure Spring Apps.

Prérequis

Restriction

Certaines restrictions s’appliquent quand vous utilisez le serveur de configuration avec un back-end Git. Les propriétés suivantes sont automatiquement injectées dans votre environnement d’application pour accéder à Config Server et à Service Discovery. Si vous configurez aussi ces propriétés dans les fichiers de votre serveur de configuration, vous vous exposez à des conflits et à un comportement inattendu.

eureka.client.service-url.defaultZone
eureka.client.tls.keystore
eureka.instance.preferIpAddress
eureka.instance.instance-id
server.port
spring.cloud.config.tls.keystore
spring.config.import
spring.application.name
spring.jmx.enabled
management.endpoints.jmx.exposure.include

Attention

Ne placez pas ces propriétés dans vos fichiers d’application Config Server.

Créer les fichiers de votre serveur de configuration

Azure Spring Apps prend en charge Azure DevOps Server, GitHub, GitLab et Bitbucket pour stocker vos fichiers Config Server. Quand votre dépôt est prêt, vous pouvez créer les fichiers de configuration et les stocker dedans.

Certaines propriétés configurables ne sont disponibles que pour certains types. Les sections suivantes décrivent les propriétés de chaque type de dépôt.

Remarque

Config Server prend master (sur Git) comme étiquette par défaut si vous n’en spécifiez aucune. Toutefois, GitHub a récemment modifié la branche par défaut master en main. Pour éviter toute défaillance d’Azure Spring Apps Config Server, assurez-vous de tenir compte de l’étiquette par défaut lors de la configuration de Config Server avec GitHub, en particulier pour les nouveaux référentiels créés.

Dépôt public

Quand vous utilisez un dépôt public, vos propriétés configurables sont plus limitées qu’avec un dépôt privé.

Le tableau suivant liste les propriétés configurables que vous pouvez utiliser pour configurer un dépôt Git public.

Remarque

L’utilisation d’un trait d’union (-) pour séparer les mots est la seule convention de nommage actuellement prise en charge. Par exemple, vous pouvez utiliser default-label, mais pas defaultLabel.

Propriété Requis Fonctionnalité
uri Oui URI du dépôt Git utilisé comme back-end Config Server. Doit commencer par http://, https://, git@ ou ssh://.
default-label Non Étiquette par défaut du dépôt Git. Doit être le nom de branche, le nom d’étiquette ou l’ID de commit du dépôt.
search-paths Non Tableau de chaînes utilisé pour effectuer une recherche dans les sous-répertoires du dépôt Git.

Dépôt privé avec authentification SSH

Le tableau suivant liste les propriétés configurables que vous pouvez utiliser pour configurer un dépôt Git privé avec SSH.

Remarque

L’utilisation d’un trait d’union (-) pour séparer les mots est la seule convention de nommage actuellement prise en charge. Par exemple, vous pouvez utiliser default-label, mais pas defaultLabel.

Propriété Requis Fonctionnalité
uri Oui URI du dépôt Git utilisé comme back-end Config Server. Doit commencer par http://, https://, git@ ou ssh://.
default-label Non Étiquette par défaut du dépôt Git. Doit être le nom de branche, le nom d’étiquette ou l’ID de commit du dépôt.
search-paths Non Tableau de chaînes utilisé pour effectuer une recherche dans les sous-répertoires du dépôt Git.
private-key Non Clé privée SSH utilisée pour accéder au dépôt Git. Obligatoire quand l’URI commence par git@ ou ssh://.
host-key Non Clé d’hôte du serveur de dépôt Git. Ne doit pas contenir le préfixe d’algorithme couvert par host-key-algorithm.
host-key-algorithm Non Algorithme de clé d’hôte. Doit être ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 ou ecdsa-sha2-nistp521. Obligatoire uniquement si host-key existe.
strict-host-key-checking Non Indique si l’instance du serveur de configuration ne parvient pas à démarrer lors de l’utilisation du serveur privé host-key. Doit être true (valeur par défaut) ou false.

Dépôt privé avec authentification de base

Le tableau suivant liste les propriétés configurables que vous pouvez utiliser pour configurer un dépôt Git privé avec une authentification de base.

Remarque

L’utilisation d’un trait d’union (-) pour séparer les mots est la seule convention de nommage actuellement prise en charge. Par exemple, utilisez default-label et non defaultLabel.

Propriété Requis Fonctionnalité
uri Oui URI du dépôt Git utilisé comme back-end Config Server. Doit commencer par http://, https://, git@ ou ssh://.
default-label Non Étiquette par défaut du dépôt Git. Doit être le nom de branche, le nom d’étiquette ou l’ID de commit du dépôt.
search-paths Non Tableau de chaînes utilisé pour effectuer une recherche dans les sous-répertoires du dépôt Git.
username Non Nom d’utilisateur utilisé pour accéder au serveur de dépôt Git. Obligatoire quand le serveur de dépôt Git prend en charge l’authentification de base HTTP.
password Non Mot de passe ou jeton d’accès personnel utilisé pour accéder au serveur de dépôt Git. Obligatoire quand le serveur de dépôt Git prend en charge l’authentification de base HTTP.

Remarque

De nombreux serveurs de dépôt Git prennent en charge l’utilisation de jetons à la place de mots de passe pour l’authentification de base HTTP. Certains référentiels permettent aux jetons d’être conservés indéfiniment. Toutefois, certains serveurs de référentiel Git, notamment Azure DevOps Server, forcent les jetons à expirer en quelques heures. Les dépôts qui entraînent l’expiration des jetons ne doivent pas utiliser l’authentification par jeton avec Azure Spring Apps. Si vous utilisez un tel jeton, n’oubliez pas de le mettre à jour avant son expiration.

GitHub a supprimé la prise en charge de l’authentification par mot de passe. Vous devez donc utiliser un jeton d’accès personnel au lieu de l’authentification par mot de passe pour GitHub. Pour plus d’informations, consultez les exigences de l’authentification par jeton pour les opérations Git.

Autres dépôts Git

Le tableau suivant liste les propriétés configurables que vous pouvez utiliser pour configurer des dépôts Git avec un modèle.

Remarque

L’utilisation d’un trait d’union (-) pour séparer les mots est la seule convention de nommage actuellement prise en charge. Par exemple, utilisez default-label et non defaultLabel.

Propriété Requis Fonctionnalité
repos Non Carte comprenant les paramètres d’un dépôt Git avec un nom donné.
repos."uri" Oui sur repos URI du dépôt Git utilisé comme back-end Config Server. Doit commencer par http://, https://, git@ ou ssh://.
repos."name" Oui sur repos Nom permettant d’identifier le dépôt ; par exemple, team-A ou team-B. Obligatoire uniquement si repos existe.
repos."pattern" Non Tableau de chaînes utilisé pour faire correspondre un nom d’application. Pour chaque modèle, utilisez le format {application}/{profil} avec des caractères génériques.
repos."default-label" Non Étiquette par défaut du dépôt Git. Doit être le nom de branche, le nom d’étiquette ou l’IOD de commit du dépôt.
repos."search-paths" Non Tableau de chaînes utilisé pour effectuer une recherche dans les sous-répertoires du dépôt Git.
repos."username" Non Nom d’utilisateur utilisé pour accéder au serveur de dépôt Git. Obligatoire quand le serveur de dépôt Git prend en charge l’authentification de base HTTP.
repos."password" Non Mot de passe ou jeton d’accès personnel utilisé pour accéder au serveur de dépôt Git. Obligatoire quand le serveur de dépôt Git prend en charge l’authentification de base HTTP.
repos."private-key" Non Clé privée SSH utilisée pour accéder au dépôt Git. Obligatoire quand l’URI commence par git@ ou ssh://.
repos."host-key" Non Clé d’hôte du serveur de dépôt Git. Ne doit pas contenir le préfixe d’algorithme couvert par host-key-algorithm.
repos."host-key-algorithm" Non Algorithme de clé d’hôte. Doit être ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384 ou ecdsa-sha2-nistp521. Obligatoire uniquement si host-key existe.
repos."strict-host-key-checking" Non Indique si l’instance du serveur de configuration ne parvient pas à démarrer lors de l’utilisation du serveur privé host-key. Doit être true (valeur par défaut) ou false.

Le tableau suivant présente quelques exemples de modèles pour la configuration de votre service avec un référentiel supplémentaire facultatif. Pour plus d’informations, consultez la section Référentiels supplémentaires et la section Critères correspondants et référentiels multiples de la documentation Spring.

Modèles Description
test-config-server-app-0/* Le modèle et l’URI du dépôt correspondent à une application Spring Boot nommée test-config-server-app-0 avec n’importe quel profil.
test-config-server-app-1/dev Le modèle et l’URI du dépôt correspondent à une application Spring Boot nommée test-config-server-app-1 avec un profil dev.
test-config-server-app-2/prod Le modèle et l’URI du dépôt correspondent à une application Spring Boot nommée test-config-server-app-2 avec un profil prod.

Screenshot of Azure portal showing the Config Server page with the Patterns column of the Additional repositories table highlighted.

Attacher le dépôt de votre serveur de configuration à Azure Spring Apps

Une fois vos fichiers de configuration enregistrés dans un dépôt, effectuez les étapes suivantes pour connecter Azure Spring Apps au dépôt.

  1. Connectez-vous au portail Azure.

  2. Accédez à votre page Vue d’ensemble d’Azure Spring Apps.

  3. Sélectionnez Config Server dans le volet de navigation de gauche.

  4. Dans la section Référentiel par défaut, définissez URI sur https://github.com/Azure-Samples/piggymetrics-config.

  5. Sélectionnez Valider.

    Screenshot of Azure portal showing the Config Server page.

  6. Une fois la validation effectuée, sélectionnez Appliquer pour enregistrer vos modifications.

    Screenshot of Azure portal showing Config Server page with Apply button highlighted.

La mise à jour de la configuration peut prendre quelques minutes. Une fois la configuration terminée, vous devriez recevoir une notification.

Entrer les informations de dépôt directement dans le portail Azure

Vous pouvez entrer des informations de référentiel pour le référentiel par défaut et, éventuellement, pour des dépôts supplémentaires.

Dépôt par défaut

Effectuez les étapes de cette section pour entrer des informations sur un dépôt public ou privé.

  • Dépôt public : dans la section Référentiel par défaut, dans la zone Uri , collez l’URI du référentiel. Entrez config pour le paramètre Étiquette. Vérifiez que le paramètre Authentification est défini sur Public, puis sélectionnez Appliquer.

  • Dépôt privé : Azure Spring Apps prend en charge l’authentification de base par mot de passe/jeton et SSH.

    • Authentification de base : Dans la section Dépôt par défaut, dans la zone URI, collez l’URI du dépôt, puis sélectionnez le paramètre sous Authentification pour ouvrir le volet Modifier l’authentification. Dans la liste déroulante Type d’authentification, sélectionnez HTTP de base, puis entrez votre nom d’utilisateur et votre mot de passe/jeton pour accorder l’accès à Azure Spring Apps. Sélectionnez OK, puis Appliquer pour terminer la configuration de votre instance de serveur de configuration.

    Screenshot of the Default repository section showing authentication settings for Basic authentication.

    Remarque

    De nombreux serveurs de dépôt Git prennent en charge l’utilisation de jetons à la place de mots de passe pour l’authentification de base HTTP. Certains référentiels permettent aux jetons d’être conservés indéfiniment. Toutefois, certains serveurs de référentiel Git, notamment Azure DevOps Server, forcent les jetons à expirer en quelques heures. Les dépôts qui entraînent l’expiration des jetons ne doivent pas utiliser l’authentification par jeton avec Azure Spring Apps. Si vous utilisez un tel jeton, n’oubliez pas de le mettre à jour avant son expiration.

    GitHub a supprimé la prise en charge de l’authentification par mot de passe. Vous devez donc utiliser un jeton d’accès personnel au lieu de l’authentification par mot de passe pour GitHub. Pour plus d’informations, consultez les exigences de l’authentification par jeton pour les opérations Git.

    • SSH : Dans la section Dépôt par défaut, dans la zone URI, collez l’URI du dépôt, puis sélectionnez le paramètre sous Authentification pour ouvrez le volet Modifier l’authentification. Dans le volet Modifier l’authentification, dans la liste déroulante Type d’authentification, sélectionnez SSH, puis entrez votre clé privée. Vous pouvez également spécifier votre clé d’hôte et l’algorithme de la clé d’hôte. Indiquez votre clé publique dans votre dépôt Config Server. Sélectionnez OK, puis Appliquer pour terminer la configuration de votre instance de serveur de configuration.

    Screenshot of the Default repository section showing authentication settings for SSH authentication.

Référentiels supplémentaires

Si vous souhaitez configurer votre service avec un référentiel supplémentaire facultatif, spécifiez les paramètres d’URI et d’authentification comme vous l’avez fait pour le référentiel par défaut. Veillez à inclure un paramètre Nom pour votre modèle, puis sélectionnez Appliquer pour l’attacher à votre instance.

Entrer les informations de dépôt dans un fichier YAML

Si vous avez écrit un fichier YAML avec les paramètres de votre dépôt, vous pouvez importer le fichier directement de votre machine locale vers Azure Spring Apps. L’exemple suivant montre un fichier YAML simple pour un dépôt privé avec une authentification de base.

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/azure-spring-apps-samples-pr/config-server-repository.git
          username: <username>
          password: <password/token>

Sélectionnez le bouton Importer les paramètres, puis sélectionnez le fichier YAML dans le répertoire de votre projet. Cliquez sur Importer.

Screenshot of the Config Server Import settings pane.

Vos Notifications affichent une opération async. Après 1 à 2 minutes, Config Server doit signaler la réussite de l’opération. Les informations de votre fichier YAML s’affichent dans le portail Azure. Sélectionnez Appliquer pour terminer l’importation.

Utiliser Azure Repos pour la configuration d’Azure Spring Apps

Azure Spring Apps peut accéder aux référentiels Git publics, sécurisés par SSH ou sécurisés à l'aide de l'authentification de base HTTP. L’authentification de base HTTP est l’option la plus simple pour créer et gérer des dépôts avec Azure Repos.

Obtenir l’URL et les informations d’identification du dépôt

Effectuez les étapes suivantes pour obtenir l’URL et les informations d’identification de votre dépôt.

  1. Sur le portail Azure Repos de votre projet, cliquez sur le bouton Cloner :

  2. Copiez l'URL du clone à partir de la zone de texte. Cette URL se présente généralement sous la forme suivante :

    https://<organization name>@dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    Supprimez tout ce qui se trouve après https:// et avant dev.azure.com, y compris le symbole @. L’URL résultante doit se présenter sous la forme suivante :

    https://dev.azure.com/<organization name>/<project name>/_git/<repository name>
    

    Enregistrez cette URL car vous en aurez besoin dans la section suivante.

  3. Sélectionnez Générer les informations d’identification Git pour afficher un nom d’utilisateur et un mot de passe. Enregistrez-les, car vous en aurez besoin dans la section suivante.

Configurer Azure Spring Apps pour accéder au dépôt Git

  1. Connectez-vous au portail Azure.

  2. Accédez à votre page Vue d’ensemble d’Azure Spring Apps.

  3. Sélectionnez le service à configurer.

  4. Dans le volet gauche de la page du service, sous Paramètres, sélectionnez l’onglet Config Server. Configurez le dépôt que vous avez créé, comme suit :

    • Ajoutez l’URI du dépôt que vous avez enregistré dans la section précédente.
    • Sélectionnez le paramètre sous Authentification pour ouvrir le volet Modifier l’authentification.
    • Pour Type d’authentification, sélectionnez HTTP de base.
    • Pour Nom d’utilisateur, indiquez le nom d’utilisateur que vous avez enregistré dans la section précédente.
    • Pour Mot de passe, indiquez le mot de passe que vous avez enregistré dans la section précédente.
    • Sélectionnez OK, puis attendez que l’opération se termine.

    Screenshot of repository configuration settings.

Supprimer votre configuration

Sélectionnez Réinitialiser sous l’onglet Config Server pour effacer vos paramètres existants. Supprimez les paramètres du serveur de configuration si vous souhaitez connecter votre instance de serveur de configuration à une autre source, par exemple lorsque vous passez de GitHub à Azure DevOps Server.

Actualisation de Config Server

Quand des propriétés sont modifiées, les services qui les consomment doivent être avertis afin que les modifications puissent être apportées. La solution par défaut pour Spring Cloud Config Server consiste à déclencher manuellement l’événement d’actualisation, ce qui n’est pas toujours possible en présence de nombreuses instances d’application. Pour plus d’informations, consultez Configuration centralisée.

À la place, vous pouvez actualiser automatiquement les valeurs de Config Server en laissant le client de configuration interroger les modifications en fonction d’une actualisation interne. Effectuez les étapes suivantes pour actualiser automatiquement les valeurs à partir de Config Server.

  1. Inscrivez une tâche planifiée pour actualiser le contexte dans un intervalle donné, comme illustré dans l’exemple suivant.

    @ConditionalOnBean({RefreshEndpoint.class})
    @Configuration
    @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class})
    @EnableScheduling
    public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer {
        @Value("${spring.cloud.config.refresh-interval:60}")
        private long refreshInterval;
        @Value("${spring.cloud.config.auto-refresh:false}")
        private boolean autoRefresh;
        private RefreshEndpoint refreshEndpoint;
        public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) {
            this.refreshEndpoint = refreshEndpoint;
        }
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            if (autoRefresh) {
                // set minimal refresh interval to 5 seconds
                refreshInterval = Math.max(refreshInterval, 5);
                scheduledTaskRegistrar.addFixedRateTask(() -> refreshEndpoint.refresh(), refreshInterval * 1000);
            }
        }
    }
    
  2. Activez autorefresh et définissez l’intervalle d’actualisation approprié dans votre fichier application.yml . Dans l’exemple suivant, le client interroge les modifications de configuration toutes les 60 secondes, qui est la valeur minimale que vous pouvez définir pour un intervalle d’actualisation.

    Par défaut, autorefresh est défini sur false et l’intervalle d’actualisation est défini sur 60 secondes.

    spring:
        cloud:
             config:
              auto-refresh: true
              refresh-interval: 60
    management:
        endpoints:
             web:
              exposure:
                include:
                  - refresh
    
  3. Ajoutez @RefreshScope dans votre code. Dans l’exemple suivant, la variable connectTimeout est automatiquement actualisée toutes les 60 secondes.

    @RestController
    @RefreshScope
    public class HelloController {
        @Value("${timeout:4000}")
        private String connectTimeout;
    }
    

Pour plus d’informations, consultez l’exemple config-client-polling.

Étapes suivantes

Dans cet article, vous avez appris à activer et à configurer votre instance Config Server Spring Cloud. Pour en savoir plus sur la gestion de votre application, consultez Mettre à l’échelle une application dans Azure Spring Apps.