Overføring av data ved lansering i Optimizely DXP

Optimizely DXP er Optimizely (tidligere Episerver) sin løsning på hosting i skyen, basert på Microsoft Azure-plattformen. I Optimizely DXP får man tre miljøer.

  • Integration
  • Preproduction
  • Production

Når man flytter en nettløsning fra fysiske servere til skyen må man overføre database og filer (bilder/dokumenter lastet opp av redaktører) fra gamle servere til skyen. I forbindelse med et skyløft gjør man typisk dette minst to ganger. En gang når miljøene settes opp, og en gang til med ferske data i forbindelse med endelig lansering i sky.

Optimizely har hatt litt ulike varianter, og anbefalinger, opp igjennom årene – men det har vært en dreining mot stadig mer selvbetjening og utviklervennlige løsninger.

Opprett API-nøkler

For å overføre data til integration-miljøet i DXP trenger vi API-nøkler, og de kan opprettes i selvbetjeningsportalen, også kalt paas-portalen. Klikk på knappen «Add API Credidentials» under API-fanen.

Huk deretter av for «Integration» og gi nøkkelen et beskrivende navn.

Ta deretter vare på API secret, som bare vises én gang. Du trenger også API key og Project Id, men de kan også vises senere.

Merk: Det er kun mulig å overføre database/filer direkte til integration-miljøet. Du kan deretter bruke selvbetjeningsportalen til å flytte innholdet til preproduction. Videre til production kan du selv flytte databaser/filer kun ved første gangs deploy. For senere oppdatering av database/filer i production, må du kontakte Optimizely support.

Overføring av database

Database-filen du overfører til DXP må være på bacpac-format, den kan du generere på følgende måte fra SQL Management Studio.

For å overføre database og filer til DXP bruker vi Deployment API-et via Powershell-modulen EpiCloud. Denne modulen kan du installere fra Powershell på denne måten.

Install-Module -Name EpiCloud 

Deretter lastes filen opp på følgende måte. Det er viktig at filnavnet er på dette formatet, bare bytt ut datofeltet med dagens dato.

$saslink = Get-EpiDeploymentPackageLocation

Add-EpiDeploymentPackage 
   -SasUrl $saslink 
   -Path "C:\db\integration.cms.sqldb.20231231.bacpac"

Her vil du få spørsmål om verdiene du fikk da du opprettet API-nøkkelen.

Etter at opplastingen er ferdig, starter du deploy av databasen til integration-miljøet på denne måten.

Start-EpiDeployment `
     -DeploymentPackage ("integration.cms.sqldb.20231231.bacpac") `
     -TargetEnvironment "Integration" -DirectDeploy

Status på deployen kan du følge i selvbetjeningsportalen, og du mottar også en e-post når den er ferdig.

Overføring av filer / blobs

Ved overføring av filer kan du bruke samme API-nøkkel som da du overførte databasen. Forskjellen er at vi her bruker API-nøkkelen til å generere et SAS-token med begrenset gyldighet, som brukes til å overføre filene.

Mange velger å bruke Azure Storage Explorer, men jeg har hatt noen uheldige opplevelser ved overføring av store datamengder (>50GB) der Azure Storage Explorer plutselig krasjer. Jeg foretrekker derfor azcopy fra kommandolinjen, der har jeg aldri opplevd problemer.

For å opprette SAS-token bruker du følgende kommando. Blob containeren i Optimizely DXP heter alltid «mysitemedia».

Get-EpiStorageContainerSasLink `
     -Writable `
     -Environment "Integration" `
     -StorageContainer "mysitemedia"

Du må igjen oppgi de tre verdiene du mottok da du opprettet API-nøkkel, og i retur får du en URL med SAS-token, lignende dette.

https://nasa1337binte.blob.core.windows.net/mysitemedia?sv=2023-01-03&se=2024-12-31T23%3A59%3A00Z&sr=c&sp=rwl&sig=1337%

Merk at URLen kan være delt over to linjer, med både linjeskift og flere mellomrom. Dette må du manuelt fjerne før du bruker den videre.

Hvis du ikke har azcopy fra før, må du laste ned azcopy. Deretter kan du kjøre følgende kommando, gitt at d:\blobs\ inneholder alle filene du ønsker å overføre.

azcopy copy "d:\blobs\*" "https://nasa1337binte.blob.core.windows.net/mysitemedia?sv=2023-01-03&se=2024-12-31T23%3A59%3A00Z&sr=c&sp=rwl&sig=1337%" --recursive=true

Filene vil, i motsetning til databasen, være tilgjengelig i integration-miljøet direkte etter opplasting.

Så enkelt har det blitt! 😁