Události
Vytváření inteligentních aplikací
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatTento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
Konfigurační server for Spring poskytuje centralizované umístění pro zpřístupnění konfiguračních dat více aplikacím. V tomto článku se dozvíte, jak připojit aplikaci hostované v Azure Container Apps k instanci Java Config Serveru pro Spring.
Komponenta Konfigurační server pro Spring Java používá úložiště GitHub jako zdroj pro nastavení konfigurace. Hodnoty konfigurace jsou pro vaši aplikaci kontejneru zpřístupněny prostřednictvím vazby mezi komponentou a vaší aplikací kontejneru. Když se hodnoty změní na konfiguračním serveru, automaticky přetékají do vaší aplikace, a to vše bez nutnosti opětovného kompilace nebo opětovného nasazení aplikace.
V tomto kurzu se naučíte:
Důležité
V tomto kurzu se používají služby, které můžou ovlivnit fakturu za Azure. Pokud se rozhodnete postupovat podle podrobných pokynů, nezapomeňte odstranit prostředky doporučené v tomto článku, abyste se vyhnuli neočekávané fakturaci.
Při spuštění na konfiguračním serveru pro Spring v Azure Container Apps mějte na paměti následující podrobnosti:
Položka | Vysvětlení |
---|---|
Scope | Konfigurační server pro Spring běží ve stejném prostředí jako připojená aplikace kontejneru. |
Škálování | Aby se zachoval jediný zdroj pravdy, konfigurační server pro Spring se škáluje. Vlastnosti minReplicas škálování a maxReplicas obě jsou nastaveny na 1 . |
Materiály | Přidělení prostředků kontejneru pro konfigurační server pro Spring je pevné, počet jader procesoru je 0,5 a velikost paměti je 1Gi. |
Ceny | Konfigurační server pro fakturaci Spring spadá do cen založených na spotřebě. Prostředky spotřebované spravovanými komponentami Java se účtují podle sazby aktivní/nečinné. K zastavení fakturace můžete odstranit komponenty, které se už nepoužívají. |
Binding | Aplikace kontejneru se připojí ke konfiguračnímu serveru pro Spring prostřednictvím vazby. Vazba vloží konfigurace do proměnných prostředí kontejneru aplikace. Po vytvoření vazby může aplikace kontejneru číst konfigurační hodnoty z proměnných prostředí. |
Než začnete pracovat s konfiguračním serverem for Spring, musíte nejprve vytvořit požadované prostředky.
Spuštěním následujících příkazů vytvořte skupinu prostředků a prostředí Container Apps.
Vytvořte proměnné pro podporu konfigurace aplikace. Tyto hodnoty jsou k dispozici pro účely této lekce.
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"
Proměnná | Popis |
---|---|
LOCATION |
Umístění oblasti Azure, kam vytvoříte aplikaci kontejneru a komponentu Java. |
ENVIRONMENT |
Název prostředí Azure Container Apps pro vaši ukázkovou aplikaci. |
RESOURCE_GROUP |
Název skupiny prostředků Azure pro ukázkovou aplikaci |
JAVA_COMPONENT_NAME |
Název komponenty Java vytvořené pro vaši aplikaci kontejneru. V tomto případě vytvoříte komponentu Config Server for Spring Java. |
IMAGE |
Image kontejneru použitá v aplikaci kontejneru. |
URI |
Identifikátor URI můžete nahradit adresou URL úložiště Git, pokud je privátní, přidat související konfigurace ověřování, jako spring.cloud.config.server.git.username spring.cloud.config.server.git.password je a . |
Přihlaste se k Azure pomocí Azure CLI.
az login
Vytvořte skupinu prostředků.
az group create --name $RESOURCE_GROUP --location $LOCATION
Vytvořte prostředí kontejnerových aplikací.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Toto prostředí slouží k hostování komponenty Config Server for Spring Java i aplikace kontejneru.
Teď, když máte prostředí Container Apps, můžete vytvořit aplikaci kontejneru a svázat ji s komponentou Config Server for Spring Java. Když vytvoříte vazbu aplikace kontejneru, hodnoty konfigurace se automaticky synchronizují z komponenty konfiguračního serveru do vaší aplikace.
Vytvořte komponentu Config Server for Spring Java.
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
Aktualizujte komponentu Konfigurační server pro Spring Java.
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
Tady říkáte komponentě, kde najít úložiště, které obsahuje informace o konfiguraci prostřednictvím uri
vlastnosti. Tato refresh-rate
vlastnost říká Container Apps, jak často se mají kontrolovat změny v úložišti Git.
Vytvořte aplikaci kontejneru, která využívá konfigurační data.
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
Tento příkaz vrátí adresu URL vaší aplikace kontejneru, která využívá konfigurační data. Zkopírujte adresu URL do textového editoru, abyste ji mohli použít v nadcházejícím kroku.
Pokud aplikaci navštívíte v prohlížeči, je vrácená connectTimeout
hodnota výchozí hodnotou 0
.
Vytvořte vazbu na konfigurační server pro Spring.
Teď, když se vytvoří aplikace kontejneru a konfigurační server, svážete je společně s příkazem update
k vaší aplikaci kontejneru.
az containerapp update \
--name $APP_NAME \
--resource-group $RESOURCE_GROUP \
--bind $JAVA_COMPONENT_NAME
Parametr --bind $JAVA_COMPONENT_NAME
vytvoří propojení mezi vaší aplikací kontejneru a komponentou konfigurace.
Jakmile jsou aplikace kontejneru a komponenta konfiguračního serveru svázané, změny konfigurace se automaticky synchronizují s aplikací kontejneru.
Když znovu navštívíte adresu URL aplikace, hodnota connectTimeout
je nyní 10000
. Tato hodnota pochází z úložiště Git nastaveného v $URI
proměnné původně nastavené jako zdroj konfigurační komponenty. Konkrétně se tato hodnota načítá z connectionTimeout
vlastnosti v application.yml souboru úložiště.
Požadavek vazby vloží nastavení konfigurace do aplikace jako proměnné prostředí. Tyto hodnoty jsou nyní k dispozici pro kód aplikace, který se má použít při načítání nastavení konfigurace z konfiguračního serveru.
V tomto případě jsou pro aplikaci k dispozici následující proměnné prostředí:
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
Pokud chcete přizpůsobit vlastní SPRING_CONFIG_IMPORT
, můžete odkazovat na proměnnou SPRING_CLOUD_CONFIG_COMPONENT_URI
prostředí , například můžete přepsat argumenty příkazového řádku, například Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true
.
Můžete také odebrat vazbu z aplikace.
Pokud chcete odebrat vazbu z aplikace kontejneru, použijte tuto --unbind
možnost.
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Když znovu navštívíte adresu URL aplikace, hodnota connectTimeout
se změní zpět na 0
adresu URL aplikace.
Prostředky vytvořené v tomto kurzu mají vliv na fakturu za Azure. Pokud tyto služby nebudete používat dlouhodobě, spuštěním následujícího příkazu odeberte vše vytvořené v tomto kurzu.
az group delete --resource-group $RESOURCE_GROUP
Příkaz az containerapp update
používá --configuration
parametr k řízení konfigurace konfiguračního serveru pro Spring. Můžete použít více parametrů najednou, pokud jsou oddělené mezerou. Další informace naleznete v tématu Spring Cloud Config Server.
Následující tabulka popisuje různé dostupné hodnoty konfigurace back-endu Gitu:
Název | Popis |
---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
Identifikátor URI vzdáleného úložiště |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
Uživatelské jméno pro ověřování pomocí vzdáleného úložiště |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
Heslo pro ověřování pomocí vzdáleného úložiště |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
Cesty hledání, které se mají použít v místní pracovní kopii. Ve výchozím nastavení prohledá pouze kořen. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
Příznak označující, že úložiště by mělo vynutit přijetí změn. Pokud true zahodíte všechny místní změny a převezmete ho ze vzdáleného úložiště. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
Výchozí popisek použitý pro Git je hlavní. Pokud nenastavíte spring.cloud.config.server.git.default-label a větev s názvem main neexistuje, konfigurační server se ve výchozím nastavení pokusí rezervovat větev s názvem master. Pokud chcete zakázat chování náhradní větve, můžete nastavit na false hodnotu spring.cloud.config.server.git.tryMasterBranch . |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
Konfigurační server se ve výchozím nastavení pokusí rezervovat větev s názvem master. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
Ověření konfiguračního serveru certifikátu TLS/SSL serveru Git můžete zakázat nastavením git.skipSslValidation vlastnosti na true hodnotu . |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
Příznak označující, že úložiště by se mělo naklonovat při spuštění, ne na vyžádání. Obecně vede k pomalejšímu spuštění, ale rychlejšímu prvnímu dotazu. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
Časový limit v sekundách pro získání připojení HTTP nebo SSH, pokud je k dispozici. Výchozí hodnota je 5 sekund. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
Jak často konfigurační server načítá aktualizovaná konfigurační data z back-endu Gitu. |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
Platný privátní klíč SSH. Musí být nastaveno, pokud ignore-local-ssh-settings je true a identifikátor URI Gitu je ve formátu SSH. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
Platný klíč hostitele SSH. Musí být nastavena i v případě, že host-key-algorithm je nastavena. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
Jeden z ssh-dss , , ssh-ed25519 ssh-rsa , ecdsa-sha2-nistp256 , , ecdsa-sha2-nistp384 nebo ecdsa-sha2-nistp521 . Musí být nastavena i v případě, že host-key je nastavena. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true nebo false . Pokud false , ignorovat chyby s klíčem hostitele. |
spring.cloud.config.server.git.repos.{repoName} |
Identifikátor URI vzdáleného úložiště |
spring.cloud.config.server.git.repos.{repoName}.pattern |
Formát vzoru je čárkami oddělený seznam {application}/{profile} názvů se zástupnými cardy. Pokud {application}/{profile} neodpovídá žádnému ze vzorů, použije výchozí identifikátor URI definovaný v rámci. |
Následující seznam popisuje běžné konfigurace:
Protokolování souvisejících konfigurací:
logging.level.*
logging.group.*
logging.*
oboru názvů by měly být zakázané – například zápis souborů protokolu pomocí logging.file
by měl být zakázán.spring.cloud.config.server.overrides
spring.cloud.config.override-none
spring.cloud.config.override-none=true
příznaku – výchozí hodnota je false – ve vzdáleném úložišti.spring.cloud.config.allow-override
spring.cloud.config.server.health.*
spring.cloud.config.server.accept-empty
spring.cloud.config.server.accept-empty
, false
aby server vrátil stav HTTP 404
, pokud aplikace nebyla nalezena. Ve výchozím nastavení je tento příznak nastaven na true
.Šifrování a dešifrování (symetrické):
encrypt.key
spring.cloud.config.server.encrypt.enabled
false
se dešifrování na straně serveru zakázalo.Služby, které využívají vlastnosti, musí vědět o změně, než k ní dojde. Výchozí metoda oznámení pro konfigurační server pro Spring zahrnuje ruční aktivaci události aktualizace, například aktualizaci voláním https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh
, což nemusí být možné, pokud existuje mnoho instancí aplikace.
Místo toho můžete hodnoty z konfiguračního serveru automaticky aktualizovat tak, že necháte klienta konfigurace dotazovat změny na základě interní aktualizace. Pomocí následujících kroků můžete automaticky aktualizovat hodnoty z konfiguračního serveru:
Zaregistrujte naplánovanou úlohu pro aktualizaci kontextu v daném intervalu, jak je znázorněno v následujícím příkladu:
@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));
}
}
}
Povolte autorefresh
a nastavte odpovídající interval aktualizace v souboru application.yml . V následujícím příkladu se klient dotazuje na změnu konfigurace každých 60 sekund, což je minimální hodnota, kterou můžete nastavit pro interval aktualizace.
Ve výchozím nastavení autorefresh
je nastavená false
hodnota a refresh-interval
je nastavená na 60 sekund.
spring:
cloud:
config:
auto-refresh: true
refresh-interval: 60
management:
endpoints:
web:
exposure:
include:
- refresh
Přidejte @RefreshScope
kód. V následujícím příkladu se proměnná connectTimeout
automaticky aktualizuje každých 60 sekund:
@RestController
@RefreshScope
public class HelloController {
@Value("${timeout:4000}")
private String connectTimeout;
}
Ve výchozím nastavení je povolené šifrování na straně serveru. Pomocí následujících kroků povolte dešifrování ve vaší aplikaci:
Přidejte zašifrovanou vlastnost do souboru .properties v úložišti Git.
Soubor by měl vypadat jako na následujícím příkladu:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
Aktualizujte komponentu Konfigurační server pro Spring Java tak, aby používala úložiště Git, které má zašifrovanou vlastnost, a nastavte šifrovací klíč.
Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <>
hodnotami.
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
Dešifrování vlastností na straně klienta můžete použít pomocí následujících kroků:
Přidejte zašifrovanou vlastnost do souboru .properties v úložišti Git.
Aktualizujte komponentu Konfigurační server pro Spring Java tak, aby používala úložiště Git, které má zašifrovanou vlastnost, a zakažte dešifrování na straně serveru.
Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <>
hodnotami.
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
V klientské aplikaci přidejte dešifrovací klíč ENCRYPT_KEY=randomKey
jako proměnnou prostředí.
Případně pokud zahrnete spring-cloud-starter-bootstrap
do objektu classpath
, nebo nastavíte spring.cloud.bootstrap.enabled=true
jako systémovou vlastnost, nastavte encrypt.key
v bootstrap.properties
.
Před spuštěním následujícího příkazu nahraďte zástupné symboly ohraničené <>
hodnotami.
az containerapp update \
--name <APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--set-env-vars "ENCRYPT_KEY=randomKey"
encrypt:
key: somerandomkey
Události
Vytváření inteligentních aplikací
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatŠkolení
Modul
Správa tajných kódů v aplikacích v Javě – nulová důvěra (Zero Trust) a nulové tajné kódy - Training
V tomto modulu se dozvíte o správě tajných kódů v aplikacích Java v Azure. Prozkoumáte osvědčené postupy, jako jsou nulová důvěra (Zero Trust) a nulové tajné kódy, a zjistíte, jak je použít u praktického projektu v Javě pomocí služby Azure Key Vault.