Événements
Créer des applications et des agents IA
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
Config Server pour Spring fournit un emplacement centralisé qui rend les données de configuration disponibles pour plusieurs applications. Dans cet article, vous apprenez à connecter une application hébergée dans Azure Container Apps à une instance Java Config Server pour Spring.
Le composant Java Config Server pour Spring utilise un référentiel GitHub comme source des paramètres de configuration. Les valeurs de configuration sont mises à la disposition de votre application conteneur via une liaison entre le composant et votre application conteneur. À mesure que les valeurs changent dans le serveur de configuration, elles circulent automatiquement vers votre application, sans que vous deviez la recompiler ou la redéployer.
Ce didacticiel vous apprend à effectuer les opérations suivantes :
Important
Ce tutoriel utilise des services qui peuvent affecter votre facture Azure. Si vous décidez de suivre les étapes pas à pas, veillez à supprimer les ressources présentées dans cet article pour éviter toute facturation inattendue.
Pendant l’exécution dans Config Server pour Spring dans Azure Container Apps, tenez compte des détails suivants :
Article | Explication |
---|---|
Portée | Le Config Server pour Spring s’exécute dans le même environnement que l’application de conteneur connectée. |
Mise à l'échelle | Pour maintenir une source unique de vérité, le Config Server pour Spring ne se met pas à l’échelle. Les propriétés de mise à l’échelle minReplicas et maxReplicas sont toutes deux définies sur 1 . |
Ressources | L’allocation des ressources de conteneur pour le Config Server pour Spring est fixe, le nombre de cœurs de CPU est de 0,5 et la taille de mémoire est 1Gi. |
Tarification | La facturation Config Server pour Spring est soumise à la tarification basée sur la consommation. Les ressources consommées par les composants Java managés sont facturées aux taux actif/inactif. Vous pouvez supprimer les composants qui ne sont plus utilisés pour arrêter la facturation. |
Binding | L’application de conteneur se connecte à un Config Server pour Spring via une liaison. La liaison injecte les configurations dans les variables d’environnement de l’application conteneur. Une fois la liaison établie, l’application conteneur peut lire les valeurs de configuration à partir des variables d’environnement. |
Avant de commencer à utiliser une instance Config Server pour Spring, vous devez d’abord créer les ressources nécessaires.
Exécutez les commandes suivantes pour créer votre groupe de ressources et votre environnement Container Apps.
Créez des variables pour prendre en charge la configuration de votre application. Ces valeurs sont fournies dans le cadre de cette leçon.
export LOCATION=eastus
export RESOURCE_GROUP=my-services-resource-group
export ENVIRONMENT=my-environment
export JAVA_COMPONENT_NAME=configserver
export APP_NAME=my-config-client
export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-config-client:latest"
export URI="https://github.com/Azure-Samples/azure-spring-cloud-config-java-aca.git"
Variable | Description |
---|---|
LOCATION |
Emplacement de la région Azure où vous créez votre application conteneur et votre composant Java. |
ENVIRONMENT |
Nom de l’environnement Azure Container Apps pour votre application de démonstration. |
RESOURCE_GROUP |
Nom du groupe de ressources Azure de votre application de démonstration. |
JAVA_COMPONENT_NAME |
Nom du composant Java créé pour votre application conteneur. Dans ce cas, vous créez un composant Java Config Server pour Spring. |
IMAGE |
Image conteneur utilisée dans votre application conteneur. |
URI |
Vous pouvez remplacer l'URI par l'URL de votre référentiel Git, s'il est privé, ajoutez les configurations d'authentification associées telles que spring.cloud.config.server.git.username et spring.cloud.config.server.git.password . |
Se connecter à Azure avec Azure CLI.
az login
Créez un groupe de ressources.
az group create --name $RESOURCE_GROUP --location $LOCATION
Créez votre environnement d’applications conteneur.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Cet environnement est utilisé pour héberger à la fois le composant Java Config Server pour Spring et votre application de conteneur.
Maintenant que vous disposez d’un environnement Container Apps, vous pouvez créer votre application de conteneur et la lier à un composant Java Config Server pour Spring. Lorsque vous liez votre application conteneur, les valeurs de configuration se synchronisent automatiquement depuis le composant Config Server vers votre application.
Créez le composant Java Config Server pour Spring.
az containerapp env java-component config-server-for-spring create \
--environment $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--name $JAVA_COMPONENT_NAME \
--min-replicas 1 \
--max-replicas 1 \
--configuration spring.cloud.config.server.git.uri=$URI
Mettez à jour le composant Java Config Server pour Spring.
az containerapp env java-component config-server-for-spring update \
--environment $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--name $JAVA_COMPONENT_NAME \
--min-replicas 2 \
--max-replicas 2 \
--configuration spring.cloud.config.server.git.uri=$URI spring.cloud.config.server.git.refresh-rate=60
Ici, vous indiquez au composant où trouver le référentiel qui contient vos informations de configuration via la propriété uri
. La propriété refresh-rate
indique aux applications conteneurisées à quelle fréquence vérifier les modifications dans votre référentiel Git.
Créer l’application conteneur qui consomme les données de configuration.
az containerapp create \
--name $APP_NAME \
--resource-group $RESOURCE_GROUP \
--environment $ENVIRONMENT \
--image $IMAGE \
--min-replicas 1 \
--max-replicas 1 \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
Cette commande retourne l’URL de votre application conteneur qui consomme les données de configuration. Copiez l’URL dans un éditeur de texte afin de pouvoir l’utiliser dans une prochaine étape.
Si vous consultez votre application dans un navigateur, la valeur connectTimeout
retournée est la valeur par défaut de 0
.
Liez au Config Server pour Spring.
Maintenant que l’application conteneur et le Config Server sont créés, vous les liez avec la commande update
à votre application conteneur.
az containerapp update \
--name $APP_NAME \
--resource-group $RESOURCE_GROUP \
--bind $JAVA_COMPONENT_NAME
Le paramètre --bind $JAVA_COMPONENT_NAME
crée la liaison entre votre application conteneur et le composant de configuration.
Une fois l’application conteneur et le composant Config Server liés, les modifications de configuration sont automatiquement synchronisées avec l’application conteneur.
Si vous vous rendez à nouveau sur l’URL de l’application, la valeur connectTimeout
est maintenant 10000
. Cette valeur provient du référentiel Git défini dans la variable $URI
initialement définie comme source du composant de configuration. Plus précisément, cette valeur est extraite de la propriété connectionTimeout
dans le fichier application.yml du référentiel.
La demande de liaison injecte le paramètre de configuration dans l’application en tant que variables d’environnement. Ces valeurs sont désormais disponibles pour être utilisées par le code de l’application lors de l’extraction des paramètres de configuration depuis le serveur de configuration.
Dans ce cas, les variables d’environnement suivantes sont disponibles pour l’application :
SPRING_CLOUD_CONFIG_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CLOUD_CONFIG_COMPONENT_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CONFIG_IMPORT=optional:configserver:$SPRING_CLOUD_CONFIG_URI
Si vous souhaitez personnaliser votre propre SPRING_CONFIG_IMPORT
, vous pouvez vous référer à la variable d'environnement SPRING_CLOUD_CONFIG_COMPONENT_URI
- par exemple, vous pouvez remplacer par des arguments de ligne de commande, comme Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true
.
Vous pouvez également supprimer une liaison de votre application.
Pour supprimer une liaison d’une application conteneur, utilisez l’option --unbind
.
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Si vous vous rendez à nouveau sur l’URL de l’application, la valeur de connectTimeout
revient à 0
.
Les ressources créées dans ce tutoriel ont un effet sur votre facture Azure. Si vous n’allez pas utiliser ces services à long terme, exécutez la commande suivante pour supprimer tout ce qui a été créé dans ce didacticiel.
az group delete --resource-group $RESOURCE_GROUP
La commande az containerapp update
utilise le paramètre --configuration
pour contrôler la configuration du Config Server pour Spring. Vous pouvez utiliser plusieurs paramètres à la fois tant qu’ils sont séparés par un espace. Pour plus d'informations, consultez Spring Cloud Config Server.
Le tableau suivant décrit les différentes valeurs de configuration du backend Git disponibles :
Nom | Description |
---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
URI du référentiel distant. |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
Nom d’utilisateur pour l’authentification avec le référentiel distant. |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
Mot de passe pour l’authentification avec le référentiel distant. |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
Chemins de recherche à utiliser dans la copie de travail locale. Par défaut, recherche uniquement la racine. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
Indicateur pour indiquer que le référentiel doit forcer l’extraction. Si true , ignorez toutes les modifications locales et récupérez-les à partir du référentiel distant. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
L'étiquette par défaut utilisée pour Git est principale. Si vous ne définissez pas spring.cloud.config.server.git.default-label et qu'une branche nommée principale n'existe pas, le serveur de configuration essaie également par défaut d'extraire une branche nommée master. Si vous souhaitez désactiver le comportement de la branche de secours, vous pouvez définir spring.cloud.config.server.git.tryMasterBranch sur false . |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
Le serveur de configuration essaie par défaut d'extraire une branche nommée master. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
Vous pouvez désactiver la validation du certificat TLS/SSL du serveur Git par le serveur de configuration en définissant la propriété git.skipSslValidation sur true . |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
Drapeau pour indiquer que le référentiel doit être cloné au démarrage et non à la requête. Entraîne généralement un démarrage est plus lent, mais une première requête plus rapide. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
Délai d'expiration en secondes pour l'obtention d'une connexion HTTP ou SSH, le cas échéant. La valeur par défaut est 5 secondes. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Fréquence à laquelle le serveur de configuration récupère les données de configuration mises à jour depuis votre back-end Git. |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
Clé privée SSH valide. Doit être défini si ignore-local-ssh-settings est true et que l'URI Git est au format SSH. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
Clé d’hôte SSH valide. Doit être défini si host-key-algorithm est également défini. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
L’un parmi ssh-dss , ssh-rsa , ssh-ed25519 , ecdsa-sha2-nistp256 , ecdsa-sha2-nistp384 ou ecdsa-sha2-nistp521 . Doit être défini si host-key est également défini. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true ou false . Si false , ignorez les erreurs avec la clé d’hôte. |
spring.cloud.config.server.git.repos.{repoName} |
URI du référentiel distant. |
spring.cloud.config.server.git.repos.{repoName}.pattern |
Le format du modèle est une liste de noms séparés par des virgules {application}/{profile} avec des caractères génériques. Si {application}/{profile} ne correspond à aucun des modèles, il utilise l'URI par défaut défini ci-dessous. |
La liste suivante décrit les configurations courantes :
Configurations relatives à la journalisation :
logging.level.*
logging.group.*
logging.*
doit être interdite - par exemple, l'écriture de fichiers journaux en utilisant logging.file
doit être interdite.spring.cloud.config.server.overrides
spring.cloud.config.override-none
spring.cloud.config.override-none=true
- la valeur par défaut est false - dans le référentiel distant.spring.cloud.config.allow-override
spring.cloud.config.server.health.*
spring.cloud.config.server.accept-empty
spring.cloud.config.server.accept-empty
sur false
de manière à ce que le serveur renvoie un statut HTTP 404
si l'application n'est pas trouvée. Par défaut, cet indicateur est défini sur true
.Cryptage et décryptage (symétrique) :
encrypt.key
spring.cloud.config.server.encrypt.enabled
false
pour désactiver le décryptage côté serveur.Les services qui consomment des propriétés doivent être informés d’un changement avant qu’il ne se produise. La méthode de notification par défaut pour Config Server pour Spring implique le déclenchement manuel de l'événement d'actualisation, comme une actualisation par appel https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh
, ce qui peut ne pas être possible s'il existe de nombreuses instances d'application.
À 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. Procédez comme suit pour actualiser automatiquement les valeurs à partir du serveur de configuration :
Inscrivez une tâche planifiée pour actualiser le contexte dans un intervalle donné, comme illustré dans l’exemple suivant :
@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 final 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, Duration.ofSeconds(refreshInterval));
}
}
}
Activez autorefresh
et définissez l’intervalle d’actualisation approprié dans le fichier application.yml. Dans l’exemple suivant, le client cherche une modification de configuration toutes les 60 secondes, ce qui correspond à la valeur minimale que vous pouvez définir pour un intervalle d’actualisation.
Par défaut, autorefresh
est réglé sur false
et refresh-interval
est réglé sur 60 secondes.
spring:
cloud:
config:
auto-refresh: true
refresh-interval: 60
management:
endpoints:
web:
exposure:
include:
- refresh
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;
}
Par défaut, le chiffrement côté serveur est activé. Suivez les étapes suivantes pour activer le déchiffrement dans votre application :
Ajoutez la propriété chiffrée dans votre fichier .properties dans votre référentiel Git.
Le fichier doit ressembler à l’exemple suivant :
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
Mettez à jour le composant Java Config Server pour Spring pour utiliser le référentiel Git qui possède la propriété cryptée et définissez la clé de chiffrement.
Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés par <>
par vos valeurs.
az containerapp env java-component config-server-for-spring update \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP> \
--name <JAVA_COMPONENT_NAME> \
--configuration spring.cloud.config.server.git.uri=<URI> encrypt.key=randomKey
Vous pouvez utiliser le déchiffrement côté client des propriétés en procédant comme suit :
Ajoutez la propriété chiffrée dans votre fichier .properties dans votre référentiel Git.
Mettez à jour le composant Java Config Server pour Spring pour utiliser le référentiel Git doté de la propriété cryptée et désactiver le décryptage côté serveur.
Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés par <>
par vos valeurs.
az containerapp env java-component config-server-for-spring update \
--environment <ENVIRONMENT_NAME> \
--resource-group <RESOURCE_GROUP> \
--name <JAVA_COMPONENT_NAME> \
--configuration spring.cloud.config.server.git.uri=<URI> spring.cloud.config.server.encrypt.enabled=false
Dans votre application cliente, ajoutez la clé de déchiffrement ENCRYPT_KEY=randomKey
comme une variable d’environnement.
Alternativement, si vous incluez spring-cloud-starter-bootstrap
sur le classpath
, ou définissez spring.cloud.bootstrap.enabled=true
comme propriété système, définissez encrypt.key
dans bootstrap.properties
.
Avant d’exécuter la commande suivante, remplacez les espaces réservés entourés par <>
par vos valeurs.
az containerapp update \
--name <APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--set-env-vars "ENCRYPT_KEY=randomKey"
encrypt:
key: somerandomkey
Événements
Créer des applications et des agents IA
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantEntrainement
Module
Gérer les secrets dans les applications Java - Zéro confiance et zéro secret - Training
Dans ce module, vous apprenez à gérer les secrets dans vos applications Java sur Azure. Vous explorerez des bonnes pratiques comme le « zéro confiance » et le « zéro secret », et vous verrez comment les appliquer à un projet Java pratique avec Azure Key Vault.