OSGiè un elemento fondamentale nello stack tecnologico di Adobe Experience Manager (AEM). Viene utilizzato per controllare i bundle compositi di AEM e le sue configurazioni.
OSGi fornisce le primitive standardizzate che consentono di costruire applicazioni da componenti piccoli, riutilizzabili e collaborativi. Questi componenti possono essere composti in un’applicazione e distribuiti. Questo consente una facile gestione dei bundle OSGi in quanto possono essere arrestati, installati, avviati individualmente. Le interdipendenze vengono gestite automaticamente. Ogni componente OSGi è contenuto in uno dei vari bundle. Per ulteriori informazioni, consulta la specifica OSGi.
Puoi gestire le impostazioni di configurazione per i componenti OSGi tramite file di configurazione che fanno parte di un progetto di codice AEM.
Le modifiche alla configurazione sono definite nei pacchetti di codice del progetto AEM (ui.apps
) come file di configurazione (.cfg.json
) in cartelle di configurazione specifiche della modalità di esecuzione:
/apps/example/config.<runmode>
Il formato dei file di configurazione OSGi è basato su JSON utilizzando il formato .cfg.json
definito dal progetto Apache Sling.
Le configurazioni OSGi sono destinate ai componenti OSGi tramite la loro identità persistente (PID), che per impostazione predefinita corrisponde al nome della classe Java™ del componente OSGi. Ad esempio, per fornire la configurazione OSGi per un servizio OSGi implementato da:
com.example.workflow.impl.ApprovalWorkflow.java
un file di configurazione OSGi è definito in:
/apps/example/config/com.example.workflow.impl.ApprovalWorkflow.cfg.json
seguendo il formato di configurazione cfg.json OSGi .
Versioni precedenti di file di configurazione OSGi supportati utilizzando formati di file diversi come .cfg., .config e come definizioni di risorse XML sling:OsgiConfig. Questi formati vengono sostituiti dal formato di configurazione cfg.json OSGi.
Configurazioni OSGi specifiche possono essere indirizzate a istanze AEM specifiche utilizzando le modalità di esecuzione. Per utilizzare la modalità runmode, crea le cartelle di configurazione in /apps/example
(dove esempio è il nome del progetto), nel formato:
/apps/example/config.<author|publish>.<dev|stage|prod>/
Tutte le configurazioni OSGi in tali cartelle vengono utilizzate se le modalità di esecuzione definite nel nome della cartella di configurazione corrispondono alle modalità di esecuzione utilizzate da AEM.
Ad esempio, se AEM utilizza le modalità di esecuzione author e dev, vengono applicati i nodi di configurazione in /apps/example/config.author/
e /apps/example/config.author.dev/
, mentre i nodi di configurazione in /apps/example/config.publish/
e /apps/example/config.author.stage/
non vengono applicati.
Se sono applicabili più configurazioni per lo stesso PID, viene applicata la configurazione con il numero più alto di modalità di esecuzione corrispondenti.
La granularità di questa regola è a livello di PID. Ciò significa che non è possibile definire alcune proprietà per lo stesso PID in /apps/example/config.author/
e altre specifiche in /apps/example/config.author.dev/
per lo stesso PID. La configurazione con il maggior numero di modalità di esecuzione corrispondenti sarà efficace per l'intero PID.
Quando si sviluppa localmente, è possibile trasmettere un parametro di avvio in modalità runmode per determinare quale configurazione OSGI in modalità runmode viene utilizzata.
Ci sono tre varietà di valori di configurazione OSGi che possono essere utilizzati con Adobe Experience Manager come Cloud Service.
Valori in linea, che sono valori hardcoded nella configurazione OSGi e memorizzati in Git. Esempio:
{
"connection.timeout": 1000
}
Valori segreti, ovvero valori che non devono essere memorizzati in Git per motivi di sicurezza. Esempio:
{
"api-key": "$[secret:server-api-key]"
}
Valori specifici per l’ambiente, ovvero valori che variano da un ambiente di sviluppo all’altro e che non possono quindi essere oggetto di targeting accurato in modalità di esecuzione (poiché in Adobe Experience Manager come Cloud Service è presente una singola modalità dev
runmode). Esempio:
{
"url": "$[env:server-url]"
}
Tieni presente che un singolo file di configurazione OSGi può utilizzare qualsiasi combinazione di questi tipi di valori di configurazione in combinazione. Esempio:
{
"connection.timeout": 1000,
"api-key": "$[secret:server-api-key]",
"url": "$[env:server-url]"
}
Il caso comune per OSGi utilizza valori di configurazione OSGi in linea. Le configurazioni specifiche per l’ambiente vengono utilizzate solo per casi d’uso specifici in cui un valore differisce tra gli ambienti di sviluppo.
Le configurazioni specifiche per l’ambiente estendono le configurazioni OSGi tradizionali e definite statisticamente che contengono valori in linea, consentendo di gestire i valori di configurazione OSGi esternamente tramite l’API di Cloud Manager. È importante comprendere quando utilizzare l’approccio comune e tradizionale di definire i valori in linea e memorizzarli in Git, anziché astrarre i valori in configurazioni specifiche per l’ambiente.
Le seguenti linee guida riguardano quando utilizzare configurazioni non segrete e specifiche per l’ambiente:
I valori delle configurazioni in linea sono considerati l’approccio standard e devono essere utilizzati quando possibile. Le configurazioni in linea forniscono i vantaggi di:
Quando definisci un valore di configurazione OSGi, inizia con i valori in linea e seleziona solo le configurazioni segrete o specifiche per l’ambiente, se necessario per il caso d’uso.
Utilizza solo configurazioni specifiche per l’ambiente ($[env:ENV_VAR_NAME]
) per valori di configurazione non segreti quando i valori variano in ambienti di sviluppo. Ciò include le istanze di sviluppo locali e qualsiasi ambiente di sviluppo Adobe Experience Manager as a Cloud Service. Evita di utilizzare configurazioni non segrete specifiche per l’ambiente per Adobe Experience Manager as a Cloud Service Stage o ambienti di produzione.
Adobe Experience Manager as a Cloud Service richiede l'uso di configurazioni specifiche per l'ambiente ($[secret:SECRET_VAR_NAME]
) per qualsiasi valore di configurazione OSGi segreto, come password, chiavi API private o qualsiasi altro valore che non può essere memorizzato in Git per motivi di sicurezza.
Utilizza configurazioni specifiche per l’ambiente segreto per memorizzare il valore per i segreti su tutti gli ambienti Adobe Experience Manager as a Cloud Service, inclusi Stage e Produzione.
Esistono due modi per creare configurazioni OSGi, come descritto di seguito. L’approccio precedente viene generalmente utilizzato per configurare componenti OSGi personalizzati che hanno proprietà e valori OSGi ben noti dallo sviluppatore e quest’ultimo per i componenti OSGi forniti da AEM.
I file di configurazione OSGi formattati JSON possono essere scritti manualmente direttamente nel progetto AEM. Questo è spesso il modo più rapido per creare configurazioni OSGi per componenti OSGi ben noti, e in particolare per componenti OSGi personalizzati che sono stati progettati e sviluppati dallo stesso sviluppatore che definisce le configurazioni. Questo approccio può anche essere utilizzato per copiare/incollare e aggiornare le configurazioni per lo stesso componente OSGi in varie cartelle in modalità runmode.
ui.apps
, individua o crea la cartella di configurazione (/apps/.../config.<runmode>
) che esegue le modalità di esecuzione necessarie per eseguire la nuova configurazione OSGi<PID>.cfg.json
. Il PID è l’identità persistente del componente OSGi di solito è il nome completo della classe dell’implementazione del componente OSGi. Esempio:/apps/.../config/com.example.workflow.impl.ApprovalWorkflow.cfg.json
<PID>-<factory-name>.cfg.json
denominazione.cfg.json
e definisci le combinazioni chiave/valore per le coppie di proprietà e valori OSGi, seguendo il formato di configurazione OSGi JSON..cfg.json
La console Web AEM di Jar dell’SDK AEM Quickstart può essere utilizzata per configurare i componenti OSGi ed esportare le configurazioni OSGi come JSON. Questo è utile per configurare componenti OSGi forniti da AEM le cui proprietà OSGi e i relativi formati di valore potrebbero non essere ben compresi dallo sviluppatore che definisce le configurazioni OSGi nel progetto AEM.
L'interfaccia utente di configurazione della console Web AEM scrive .cfg.json
file nell'archivio. Tieni presente questo aspetto per evitare potenziali comportamenti inaspettati durante lo sviluppo locale, quando le configurazioni OSGi AEM definite dal progetto possono differire dalle configurazioni generate.
ui.apps
, individua o crea la cartella di configurazione (/apps/.../config.<runmode>
) che esegue le modalità di esecuzione necessarie per la nuova configurazione OSGi.<PID>.cfg.json
. Il PID è lo stesso valore del passaggio 5..cfg.json
..cfg.json
.I valori in linea vengono formattati come coppie nome-valore standard, seguendo la sintassi JSON standard. Esempio:
{
"my_var1": "val",
"my_var2": [ "abc", "def" ],
"my_var3": 500
}
La configurazione OSGi deve assegnare un segnaposto per la variabile che deve essere definita per ambiente:
use $[env:ENV_VAR_NAME]
I clienti devono utilizzare questa tecnica solo per le proprietà di configurazione OSGI correlate al loro codice personalizzato; non deve essere utilizzato per sostituire la configurazione OSGI definita da Adobe.
I segnaposto non possono essere utilizzati in istruzioni di reindirizzamento.
La configurazione OSGi deve assegnare un segnaposto per il segreto che deve essere definito per ambiente:
use $[secret:SECRET_VAR_NAME]
Quanto segue si applica sia ai valori di configurazione specifici dell’ambiente che a quelli segreti.
I nomi delle variabili devono seguire le regole seguenti:
[a-zA-Z_][a-zA-Z_0-9]*
I valori per le variabili non devono superare i 2048 caratteri.
Quanto segue si applica sia ai valori di configurazione specifici dell’ambiente che a quelli segreti.
Se non viene impostato alcun valore per ambiente, in fase di runtime il segnaposto non viene sostituito e viene lasciato in posizione poiché non si è verificata alcuna interpolazione. Per evitare questo problema, è possibile fornire un valore predefinito come parte del segnaposto con la seguente sintassi:
$[env:ENV_VAR_NAME;default=<value>]
Se viene fornito un valore predefinito, il segnaposto viene sostituito con il valore per ambiente, se fornito, o con il valore predefinito fornito.
Quanto segue si applica sia ai valori di configurazione specifici dell’ambiente che a quelli segreti.
Le variabili possono essere definite nell’ambiente locale in modo che vengano raccolte dall’AEM locale in fase di runtime. Ad esempio, su Linux®:
export ENV_VAR_NAME=my_value
Si consiglia di scrivere un semplice script bash che imposti le variabili di ambiente utilizzate nelle configurazioni ed eseguirle prima di avviare AEM. Strumenti come https://direnv.net/ aiutano a semplificare questo approccio. A seconda del tipo di valori, possono essere sottoposti a Check-In nella gestione del codice sorgente, se possono essere condivisi tra tutti.
I valori per i segreti vengono letti dai file. Pertanto, per ogni segnaposto che utilizza un segreto, deve essere creato un file di testo contenente il valore segreto.
Ad esempio, se si utilizza $[secret:server_password]
, è necessario creare un file di testo denominato server_password. Tutti questi file segreti devono essere memorizzati nella stessa directory e la proprietà del framework org.apache.felix.configadmin.plugin.interpolation.secretsdir
deve essere configurata con tale directory locale.
Se una proprietà OSGI richiede valori diversi per l'autore rispetto alla pubblicazione:
config.author
e config.publish
OSGi, come descritto nella sezione Risoluzione in modalità di esecuzione.author_<variablename>
e publish_<variablename>
in cui i nomi delle variabili sono gli stessiNegli esempi seguenti, si supponga che siano presenti tre ambienti di sviluppo, oltre agli ambienti stage e prod.
Esempio 1
L’intento è che il valore della proprietà OSGI my_var1
sia lo stesso per stage e prod, ma differisca per ciascuno dei tre ambienti di sviluppo.
Cartella | Contenuto di myfile.cfg.json |
config |
{ "my_var1": "val", "my_var2": "abc", "my_var3": 500 } |
config.dev |
{ "my_var1": "$[env:my_var1]" "my_var2": "abc", "my_var3": 500 } |
Esempio 2
L'intento è che il valore della proprietà OSGI my_var1
differisca per stage, prod e per ciascuno dei tre ambienti di sviluppo. Pertanto, è necessario chiamare l’API di Cloud Manager per impostare il valore per my_var1
per ogni env di sviluppo.
Cartella | Contenuto di myfile.cfg.json |
config.stage |
{ "my_var1": "val1", "my_var2": "abc", "my_var3": 500 } |
config.prod |
{ "my_var1": "val2", "my_var2": "abc", "my_var3": 500 } |
config.dev |
{ "my_var1": "$[env:my_var1]" "my_var2": "abc", "my_var3": 500 } |
Esempio 3
L’intento è che il valore della proprietà OSGi my_var1
sia lo stesso per gli ambienti di stage, produzione e solo per uno degli ambienti di sviluppo, ma sia diverso per gli altri due ambienti di sviluppo. In questo caso, è necessario chiamare l’API di Cloud Manager per impostare il valore di my_var1
per ciascuno degli ambienti di sviluppo, anche per l’ambiente di sviluppo che deve avere lo stesso valore di stage e produzione. Non erediterà il valore impostato nella cartella config.
Cartella | Contenuto di myfile.cfg.json |
config |
{ "my_var1": "val1", "my_var2": "abc", "my_var3": 500 } |
config.dev |
{ "my_var1": "$[env:my_var1]" "my_var2": "abc", "my_var3": 500 } |
Un altro modo per farlo sarebbe quello di impostare un valore predefinito per il token di sostituzione nella cartella config.dev in modo che sia lo stesso valore della cartella config.
Cartella | Contenuto di myfile.cfg.json |
config |
{ "my_var1": "val1", "my_var2": "abc", "my_var3": 500 } |
config.dev |
{ "my_var1": "$[env:my_var1;default=val1]" "my_var2": "abc", "my_var3": 500 } |
Consulta questa pagina su come configurare l'API.
Assicurati che l’API di Cloud Manager utilizzata abbia assegnato il ruolo "Deployment Manager - Cloud Service". Altri ruoli non sono in grado di eseguire tutti i comandi sottostanti.
Una chiamata all'API distribuisce le nuove variabili e i nuovi valori in un ambiente Cloud, simile a una tipica pipeline di distribuzione del codice cliente. I servizi di authoring e pubblicazione verranno riavviati e faranno riferimento ai nuovi valori, in genere impiegando alcuni minuti.
PATCH /program/{programId}/environment/{environmentId}/variables
]
{
"name" : "MY_VAR1",
"value" : "plaintext value",
"type" : "string" <---default
},
{
"name" : "MY_VAR2",
"value" : "<secret value>",
"type" : "secretString"
}
]
Le variabili predefinite non sono impostate tramite API, ma nella proprietà OSGi stessa.
Per ulteriori informazioni, consulta questa pagina .
GET /program/{programId}/environment/{environmentId}/variables
Per ulteriori informazioni, consulta questa pagina .
PATCH /program/{programId}/environment/{environmentId}/variables
Per eliminare una variabile, includerla con un valore vuoto.
Per ulteriori informazioni, consulta questa pagina .
$ aio cloudmanager:list-environment-variables ENVIRONMENT_ID
Name Type Value
MY_VAR1 string plaintext value
MY_VAR2 secretString ****
$ aio cloudmanager:set-environment-variables ENVIRONMENT_ID --variable MY_VAR1 "plaintext value" --secret MY_VAR2 "some secret value"
$ aio cloudmanager:set-environment-variables ENVIRONMENT_ID --delete MY_VAR1 MY_VAR2
Per ulteriori informazioni su come configurare i valori utilizzando il plug-in Cloud Manager per Adobe I/O CLI, consulta questa pagina .
È possibile dichiarare fino a 200 variabili per ambiente.
Poiché i valori di configurazione segreti e specifici per l’ambiente sono al di fuori di Git e, di conseguenza, non fanno parte dei meccanismi formali di distribuzione di Adobe Experience Manager come Cloud Service, il cliente deve gestire, governare e integrare in Adobe Experience Manager come processo di distribuzione di Cloud Service.
Come accennato in precedenza, la chiamata dell’API distribuisce le nuove variabili e i nuovi valori agli ambienti Cloud, in modo simile a una tipica pipeline di distribuzione del codice cliente. I servizi di authoring e pubblicazione verranno riavviati e faranno riferimento ai nuovi valori, in genere impiegando alcuni minuti. Tieni presente che i gate e i test di qualità eseguiti da Cloud Manager durante una distribuzione regolare del codice non vengono eseguiti durante questo processo.
In genere, i clienti chiamano l’API per impostare le variabili di ambiente prima di distribuire il codice che si basa su di esse in Cloud Manager. In alcune situazioni, potrebbe essere utile modificare una variabile esistente dopo che il codice è già stato distribuito.
L’API potrebbe non riuscire quando è in uso una pipeline, un aggiornamento AEM o un’implementazione cliente, a seconda della parte della pipeline da fine a fine che viene eseguita in quel momento. La risposta di errore indicherà che la richiesta non è riuscita, anche se non indicherà il motivo specifico.
In alcuni casi, la distribuzione del codice cliente pianificato si basa su variabili esistenti per disporre di nuovi valori, il che non sarebbe appropriato per il codice corrente. Se si tratta di un problema, si raccomanda di apportare modifiche variabili in modo additivo. A questo scopo, crea nuovi nomi di variabili invece di semplicemente modificare il valore di vecchie variabili, il cui codice così vecchio non fa mai riferimento al nuovo valore. Quindi, quando il nuovo rilascio del cliente appare stabile, si può scegliere di rimuovere i valori precedenti.
Allo stesso modo, poiché ai valori di una variabile non viene applicata una versione, un rollback del codice potrebbe causare un riferimento a valori più recenti che causano problemi. Anche in questo caso sarebbe utile la strategia per la variabile additiva precedentemente menzionata.
Questa strategia di variabile additiva è utile anche per gli scenari di disaster recovery in cui, se si desidera ridistribuire il codice da diversi giorni, i nomi e i valori delle variabili a cui fa riferimento rimarranno intatti. Questo si basa su una strategia in cui un cliente attende alcuni giorni prima di rimuovere le variabili meno recenti, altrimenti il codice meno recente non disporrebbe di variabili appropriate a cui fare riferimento.