Le basi dello sviluppo del codice sono simili in AEM as a Cloud Service rispetto alle soluzioni AEM On Premise e Managed Services. Gli sviluppatori scrivono e testano localmente il codice, che viene quindi inviato agli ambienti AEM as a Cloud Service remoti. Cloud Manager, che era uno strumento opzionale per la distribuzione dei contenuti per Managed Services, è necessario. Questo è ora l’unico meccanismo per distribuire il codice AEM ambienti as a Cloud Service di sviluppo, stage e produzione. Per eseguire rapidamente la convalida e il debug delle funzioni prima della distribuzione di tali ambienti, il codice può essere sincronizzato da un ambiente locale a un Ambiente di sviluppo rapido.
L’aggiornamento della Versione AEM è sempre un evento di distribuzione separato dal push del codice personalizzato. Considerando un’altra angolazione, le versioni del codice personalizzato devono essere testate rispetto alla versione AEM in produzione, in quanto è quella su cui alla fine verranno implementate. Gli aggiornamenti di versione di AEM successivi saranno frequenti e verranno applicati automaticamente. È previsto che siano compatibili con le versioni precedenti del codice cliente già distribuito.
Il resto di questo documento descriverà come gli sviluppatori devono adattare le proprie pratiche in modo che funzionino con gli aggiornamenti della versione di AEM as a Cloud Service e con gli aggiornamenti dei clienti.
Per le soluzioni AEM precedenti, la versione AEM più recente veniva cambiata raramente (circa una volta all’anno con service pack trimestrali) e i clienti aggiornavano le istanze di produzione all’ultimo quickstart quando ne avevano l’occasione, facendo riferimento al jar API. Tuttavia, le applicazioni AEM as a Cloud Service vengono aggiornate automaticamente alla versione più recente di AEM più spesso, pertanto il codice personalizzato per le versioni interne deve essere generato in base alla versione AEM più recente.
Come per le versioni AEM non cloud esistenti, nella maggior parte dei casi sarà supportato uno sviluppo locale e offline basato su un quickstart specifico e dovrebbe essere lo strumento preferito per il debug.
Esistono sottili differenze operative tra il comportamento dell’applicazione su un computer locale e su Adobe Cloud. Queste differenze architettoniche devono essere rispettate durante lo sviluppo locale e possono portare a un comportamento diverso durante l’implementazione nell’infrastruttura cloud. A causa di queste differenze, è importante eseguire test esaustivi sugli ambienti di sviluppo e stage prima di implementare un nuovo codice personalizzato in produzione.
Al fine di sviluppare un codice personalizzato per una versione interna, deve essere scaricata e installata la versione pertinente di SDK di AEM as a Cloud Service. Per ulteriori informazioni sull’utilizzo degli strumenti di Dispatcher di AEM as a Cloud Service, consulta questa pagina.
Il video seguente fornisce una panoramica di alto livello su come distribuire il codice in AEM as a Cloud Service:
I clienti distribuiscono il codice personalizzato agli ambienti cloud tramite Cloud Manager. È opportuno notare che Cloud Manager trasforma i pacchetti di contenuto assemblati localmente in un artefatto conforme al modello di funzioni Sling. Questo è il modo in cui viene descritta un’applicazione AEM as a Cloud Service quando viene eseguita in un ambiente cloud. Di conseguenza, quando si esaminano i pacchetti in Gestione pacchetti negli ambienti cloud, il nome includerà “cp2fm” e nei pacchetti trasformati saranno rimossi tutti i metadati. Non è possibile interagire con questi elementi, ovvero non è possibile scaricarli, replicarli o aprirli. La documentazione dettagliata sul convertitore può essere trovata qui.
I pacchetti di contenuto scritti per le applicazioni AEM as a Cloud Service devono avere una separazione netta tra contenuto immutabile e contenuto mutabile; Cloud Manager installerà solo il contenuto mutabile, producendo anche un messaggio come:
Generated content-package <PACKAGE_ID> located in file <PATH> is of MIXED type
Il resto di questa sezione descriverà la composizione e le implicazioni dei pacchetti immutabili e mutabili.
Tutti i contenuti e il codice mantenuti nell’archivio immutabile devono essere controllati in git e distribuiti tramite Cloud Manager. In altre parole, a differenza delle soluzioni AEM correnti, il codice non viene mai distribuito direttamente in un’istanza AEM in esecuzione. Questo assicura che il codice in esecuzione per una determinata versione in qualsiasi ambiente Cloud sia identico, eliminando il rischio di variazione involontaria del codice in produzione. Ad esempio, la configurazione OSGI deve essere impegnata nel controllo del codice sorgente anziché gestita in fase di esecuzione tramite il gestore di configurazione della console web AEM.
Poiché le modifiche dell’applicazione dovute al pattern di distribuzione Blue-Green sono abilitate da un interruttore, non possono dipendere dalle modifiche nell’archivio mutabile con l’eccezione degli utenti del servizio, le loro ACL, i tipi di nodo e le modifiche della definizione dell’indice.
Per i clienti con basi di codice esistenti, è fondamentale seguire l’esercizio di ristrutturazione dell’archivio descritto nella documentazione di AEM per garantire che il contenuto che si trovava in /etc venga spostato nella posizione giusta.
Per questi pacchetti di codice si applicano alcune restrizioni aggiuntive, ad esempio non è supportata l’installazione di hook.
Come accennato in precedenza, la configurazione OSGI deve essere impegnata nel controllo del codice sorgente anziché attraverso la console web. Le tecniche per farlo includono:
Ulteriori informazioni sulla configurazione OSGI in Configurazione OSGi per AEM as a Cloud Service.
In alcuni casi potrebbe essere utile preparare le modifiche al contenuto nel controllo della sorgente in modo che possa essere distribuito da Cloud Manager ogni volta che un ambiente viene aggiornato. Ad esempio, potrebbe essere ragionevole impostare alcune strutture di cartelle principali o allineare le modifiche nei modelli modificabili per abilitare i criteri in quelli per i componenti aggiornati dalla distribuzione dell’applicazione.
Esistono due strategie per descrivere il contenuto che verrà distribuito da Cloud Manager nell’archivio mutabile, nei pacchetti di contenuto mutabile e nelle istruzioni repoinit.
Contenuti come gerarchie di percorsi di cartelle, utenti di servizi e controlli di accesso (ACL) vengono generalmente salvati in un progetto AEM basato su un archetipo maven. Le tecniche includono l’esportazione da AEM o la scrittura diretta come XML. Durante il processo di creazione e distribuzione, Cloud Manager crea un pacchetto con il pacchetto di contenuti mutabili risultante. Il contenuto mutabile viene installato in 3 momenti diversi durante la fase di distribuzione nella pipeline:
Prima dell’avvio della nuova versione dell’applicazione:
Durante l’avvio di una nuova versione dell’applicazione, ma prima del passaggio:
Dopo il passaggio alla nuova versione dell’applicazione:
/conf
) (aggiungi, modifica, rimuovi)È possibile limitare l’installazione di contenuti mutabili all’authoring o alla pubblicazione incorporando i pacchetti in una cartella install.author o install.publish in /apps
. La ristrutturazione per rispecchiare tale separazione è stata effettuata in AEM 6.5, e i dettagli relativi alla ristrutturazione del progetto raccomandata si trovano nella Documentazione AEM 6.5.
I pacchetti di contenuto vengono distribuiti in tutti i tipi di ambiente (dev, stage, prod). Non è possibile limitare la distribuzione a un ambiente specifico. Questa limitazione è presente per garantire la possibilità di effettuare un test di esecuzione automatica. Il contenuto specifico di un ambiente richiede l’installazione manuale tramite Gestione pacchetti.
Inoltre, non esiste un meccanismo per ripristinare le modifiche al pacchetto di contenuti mutabili dopo la loro applicazione. Se i clienti rilevano un problema, possono scegliere di correggerlo nella versione successiva del codice o, come ultima risorsa, ripristinare l’intero sistema in un punto temporale prima della distribuzione.
Eventuali pacchetti di terze parti inclusi devono essere convalidati come un servizio compatibile con AEM as a Cloud Service, altrimenti la loro inclusione provocherà un errore di distribuzione.
Come indicato in precedenza, i clienti con basi di codice esistenti devono conformarsi all’esercizio di ristrutturazione dell’archivio richiesto dalle modifiche dell’archivio 6.5 descritte nella sezione Documentazione AEM 6.5.
Per i casi seguenti, è preferibile adottare l’approccio della creazione di contenuti esplicita tramite codifica manuale istruzioni repoinit
nelle configurazioni di fabbrica OSGi:
Creare/eliminare/disabilitare utenti del servizio
Creare/eliminare gruppi
Creare/eliminare utenti
Aggiungere ACL
La definizione degli ACL richiede che le strutture dei nodi siano già presenti. Pertanto, potrebbe essere necessario creare in anticipo delle istruzioni di percorso.
Aggiungere percorso (ad esempio per le strutture delle cartelle principali)
Aggiungere CND (definizioni dei tipi di nodo)
Repoinit è preferibile per questi casi d’uso di modifica del contenuto supportati grazie ai seguenti vantaggi:
Quando Cloud Manager distribuisce l’applicazione, esegue queste istruzioni, indipendentemente dall’installazione di qualsiasi pacchetto di contenuto.
Per creare istruzioni repoinit, segui la procedura seguente:
org.apache.sling.jcr.repoinit.RepositoryInitializer
in una cartella di configurazione del progetto. Usa un nome descrittivo per la configurazione come org.apache.sling.jcr.repoinit.RepositoryInitializer~initstructure./content
prima di /content/myfolder
prima di /content/myfolder/mysubfolder
. Per le ACL impostate su strutture di basso livello si consiglia di impostarle su un livello superiore e lavorare con una restrizione rep:glob
. Esempio (allow jcr:read on /apps restriction(rep:glob,/msm/wcm/rolloutconfigs))
.Per ACL definiti per nodi sottostanti /apps
o /libs
l’esecuzione del repoinit inizia su un archivio vuoto. I pacchetti vengono installati dopo il repoinit, pertanto le istruzioni non possono basarsi su elementi definiti nei pacchetti, ma devono definire le condizioni preliminari come le strutture padre sottostanti.
Per le ACL la creazione di strutture profonde potrebbe essere complicata, quindi è più ragionevole definire una ACL su un livello più alto e vincolare dove si suppone che agisca tramite una restrizione rep:glob.
Maggiori dettagli sul repoinit sono disponibili nella documentazione Sling
Ci sono casi d’uso in cui un pacchetto di contenuti deve essere installato come “una tantum”. Ad esempio, per eseguire il debug di un problema di produzione, è necessario importare contenuto specifico dalla produzione allo staging. Per questi scenari, Gestione pacchetti può essere utilizzato in ambienti AEM as a Cloud Service.
Poiché Gestione pacchetti è un concetto di esecuzione, non è possibile installare contenuto o codice nell’archivio immutabile, quindi questi pacchetti di contenuto devono essere costituiti solo da contenuto mutabile (principalmente /content
o /conf
). Se il pacchetto di contenuti include contenuti misti (con contenuto mutabile e immutabile), verrà installato solo il contenuto mutabile.
L’interfaccia utente di Gestione pacchetti potrebbe restituire un messaggio di errore non definito se l’installazione di un pacchetto richiede più di 10 minuti.
Questo non è dovuto a un errore nell’installazione, ma a un timeout che il Cloud Service ha per tutte le richieste.
Non ripetere l’installazione se viene visualizzato un errore di questo tipo. L’installazione sta procedendo correttamente in background. Se si riavvia l’installazione, potrebbero essere introdotti alcuni conflitti da più processi di importazione simultanei.
Tutti i pacchetti di contenuto installati tramite Cloud Manager (mutabili e immutabili) verranno visualizzati in uno stato congelato nell’interfaccia utente di Gestione Pacchetti di AEM. Questi pacchetti non possono essere reinstallati, ricostruiti o persino scaricati e verranno elencati con un suffisso “cp2fm” che indica che l’installazione è stata gestita da Cloud Manager.
È comune per la clientela includere pacchetti predefiniti da fonti di terze parti, ad esempio fornitori di software come i partner di traduzione di Adobe. Si consiglia di ospitare questi pacchetti in un archivio remoto e farvi riferimento in pom.xml
. Questo è possibile per gli archivi pubblici e anche per quelli privati con protezione tramite password, come descritto in archivi maven protetti da password.
Se non è possibile memorizzare il pacchetto in un archivio remoto, i clienti possono inserirlo in un archivio Maven locale basato su file system, che è impegnato in SCM come parte del progetto e a cui fa riferimento qualsiasi cosa dipenda da esso. L’archivio viene dichiarato nel pom del progetto come illustrato di seguito:
<repository>
<id>project.local</id>
<name>project</name>
<url>file:${maven.multiModuleProjectDirectory}/repository</url>
</repository>
Tutti i pacchetti di terze parti inclusi devono essere conformi alle linee guida per la codifica dei servizi e la creazione di pacchetti di AEM as a Cloud Service descritte nel presente articolo, altrimenti la loro inclusione provocherà un errore di distribuzione.
Il seguente POM.xml
snippet Maven mostra come incorporare i pacchetti di terze parti nel pacchetto “Contenitore” del progetto, in genere denominato “tutti”, tramite la configurazione del plug-in maven filevault-package-maven-plugin.
...
<plugin>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>filevault-package-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
...
<embeddeds>
...
<!-- Include any other extra packages -->
<embedded>
<groupId>com.vendor.x</groupId>
<artifactId>vendor.plug-in.all</artifactId>
<type>zip</type>
<target>/apps/vendor-packages/container/install</target>
</embedded>
<embeddeds>
</configuration>
</plugin>
...
Come per gli aggiornamenti AEM, le versioni dei clienti e delle clienti vengono distribuite utilizzando una strategia di distribuzione continua per eliminare i tempi di inattività dei cluster di authoring nelle giuste circostanze. Di seguito è descritta la sequenza generale degli eventi, dove Blu è la vecchia versione del codice cliente e Verde è la nuova versione. Sia blu che verde eseguono la stessa versione del codice AEM.
Gli indici nuovi o modificati causeranno un ulteriore passaggio di indicizzazione o reindicizzazione prima che la nuova versione (verde) possa assumere traffico. I dettagli sulla gestione degli indici in AEM as a Cloud Service si trovano in questo articolo. È possibile vedere lo stato del processo di indicizzazione nella pagina di compilazione di Cloud Manager e si riceve una notifica quando la nuova versione è pronta per il traffico.
Il tempo necessario per una distribuzione continua varia a seconda delle dimensioni dell’indice, poiché la versione verde non può accettare il traffico fino a quando non viene generato il nuovo indice.
Al momento, AEM as a Cloud Service non funziona con strumenti di gestione degli indici come lo strumento indice Oak di ACS Commons Ensure.
Il meccanismo di pubblicazione è retrocompatibile con API Java di replica di AEM.
Per sviluppare e testare tramite la replica con l’avvio rapido di AEM cloud ready, le funzionalità di replica classica devono essere utilizzate con un’impostazione di Authoring/Pubblicazione. Nel caso in cui il punto di ingresso dell’interfaccia utente nell’authoring di AEM sia stato rimosso per il cloud, gli utenti accederebbero a http://localhost:4502/etc/replication
per la configurazione.
Come descritto in precedenza, la strategia di distribuzione continua di AEM as a Cloud Service implica che sia le versioni precedenti che quelle nuove possano funzionare contemporaneamente. Pertanto, presta attenzione alle modifiche del codice che non sono compatibili con la vecchia versione AEM che è ancora in esecuzione.
Inoltre, la vecchia versione deve essere testata per verificare la compatibilità con eventuali nuove strutture di contenuto mutabile applicate dalla nuova versione in caso di ripristino, in quanto il contenuto mutabile non viene rimosso.
La modifica degli utenti del servizio o delle ACL necessarie per accedere al contenuto o al codice potrebbe causare errori nelle versioni precedenti di AEM e causare l’accesso a tale contenuto o codice con utenti del servizio obsoleti. Per risolvere questo problema, una raccomandazione consiste nell’apportare modifiche distribuite su almeno 2 versioni, con la prima versione che funge da ponte prima di essere ripulita nella versione successiva.
Se vengono apportate modifiche agli indici, è importante che la versione blu continui a utilizzare i suoi indici fino alla sua chiusura, mentre la versione verde utilizza il proprio set modificato di indici. Lo sviluppatore deve seguire le tecniche di gestione degli indici descritte nel presente articolo.
Se viene segnalato o rilevato un errore dopo la distribuzione, è possibile che sia necessario eseguire il ripristino della versione blu. Sarebbe opportuno garantire che il codice blu sia compatibile con tutte le nuove strutture create dalla versione verde, in quanto le nuove strutture (qualsiasi contenuto mutabile) non subiranno ripristini. Se il codice precedente non è compatibile, le correzioni dovranno essere applicate nelle versioni successive del cliente.
Ambienti di sviluppo rapidi (o RDE in breve) consentono agli sviluppatori di implementare e rivedere rapidamente le modifiche, riducendo al minimo il tempo necessario per testare le funzioni che sono già collaudate in un ambiente di sviluppo locale.
A differenza dei normali ambienti di sviluppo, che distribuiscono il codice tramite la pipeline di Cloud Manager, gli sviluppatori utilizzano strumenti a riga di comando per sincronizzare il codice da un ambiente di sviluppo locale all’RDE. Una volta testate con successo le modifiche in un RDE, queste devono essere distribuite in un ambiente di sviluppo cloud regolare tramite la pipeline di Cloud Manager, che inserirà il codice attraverso i gate di qualità appropriati.
Nelle soluzioni AEM esistenti, i clienti possono scegliere di eseguire istanze con modalità di esecuzione arbitrarie e applicare la configurazione OSGI o installare i bundle OSGI a quelle istanze specifiche. Le modalità di esecuzione definite includono in genere i servizio (autore e pubblicazione) e l’ambiente (rde, dev, stage, prod).
AEM as a Cloud Service d’altra parte è più rigoroso su quali modalità di esecuzione sono disponibili e come i bundle OSGI e la configurazione OSGI possono essere mappati su di esse:
<service>.<environment_type>
, che devono essere utilizzati in questo particolare ordine (ad esempio author.dev
o publish.prod
). I token OSGI devono essere referenziati direttamente dal codice anziché utilizzando il metodo getRunModes
, che non includerà più environment_type
in fase di esecuzione. Per ulteriori informazioni, consulta Configurazione OSGi per AEM as a Cloud Service.install.author
o install.publish
.AEM as a Cloud Service non consente di utilizzare le modalità di esecuzione per installare il contenuto per ambienti o servizi specifici. Se è necessario impostare un ambiente di sviluppo con dati o HTML che non si trovano negli ambienti di staging o produzione, è possibile utilizzare il gestore dei pacchetti.
Le configurazioni supportate per la modalità di esecuzione sono:
Viene utilizzata la configurazione OSGI con le modalità di esecuzione che hanno maggiore corrispondenza.
Quando si sviluppa localmente, un parametro di avvio in modalità di esecuzione, -r
, viene utilizzato per specificare la configurazione OSGI in modalità di esecuzione.
$ java -jar aem-sdk-quickstart-xxxx.x.xxx.xxxx-xxxx.jar -r publish,dev
Le configurazioni delle attività di manutenzione devono essere persistenti nel controllo del codice sorgente poiché la schermata Strumenti > Operazioni non sarà più disponibile negli ambienti Cloud. Ciò ha il vantaggio di garantire che i cambiamenti siano intenzionalmente persistenti piuttosto che applicati reattivamente e forse dimenticati. Fai riferimento all’articolo Attività di manutenzione per ulteriori informazioni.