Developers Guide
GovCloud PaaS
Statens IT

Living Document,

This version:
http://github.com/digst/cloud/guide.md
Issue Tracking:
GitHub
Editor:
madsh@digst.dk (Digitaliseringsstyrelsen)

Dette dokument er en vejledning i udarbejdelse af applikationer på et nye udviklings- og driftsmiljø hos Statens IT. Det er en del af en serie af dokumenter, der beskriver et samarbejde mellem SIT, DIGST og DMI, som startede med en aftale om GovCloud. Serien består desuden af en generel introduktion og en teknisk specifikation.

Velkommen!

GovCloud vision: Fremtidens foretrukne udviklings- og drifts-miljø for Statens ITs kunder.

I opgave beskrivelsen har der formentlig stået noget om.. .Udvikling af container baserede applikationer, Anvendelse af asynkrone meddelelser som integration mellem applikationskomponenter, Anvendelse af NoSQL dokumentdatabaser, Udvikling af HTTP services der følger REST, Token baseret adgangskontrol.

Dette dokument forsøger at gøre det meget konkret hvordan vi har tænkt at applikationer bedst udvikles på netop vores platform.

Så velkommen til fremtiden! Og håb om at I finder jeg godt tilpas på platformen...

Hvad er GovCloud

3 linjer om cloud.

3 linjer om Gov+Cloud

PaaS... med mulighed for SaaS

CloudBroker

Hvad tilbyder GovCloud

5 + 5 services...

GovCloud er en selvbetjent og i høj grad automatiseret service leveret af Statens IT. Den samlede service består dels af en selvbetjenings-løsning der anvendes af ansatte og konsulenter hos Statens ITs kunder, dels af en række tekniske services der anvendes af kundes applikationer. [Sætning om at den samlede lifecycle management for den samlede GovCloud service foretages i fæøllesoffentligt regi].

Til udviklere Til applikationer
git. – opbevaring og versionsstyring af applikationskode /id -- billetudsteder og omveksler
reg. – opbevaring og versionsstyring af applikations images /log -- opsamling og søgning i hændelser
kub. – selvbetjening til deployment af applikationer /stream -- data i meddelelsstrømme/td>
stat. – overvågning af platform og applikationer /table -- data på tabelform
coll. – online samarbejdsværktøj /file -- data i filer og foldere

Mere detaljerede beskrivelser nedenfor.

1. Før du går i gang

Advarsel.... Cloud Native og DevOps er et meget stor skift i den måde vi tænker applikationer på. Bla.

Noget af det kan læses på microservices / 12 factor apps

[redraw in neutral colors. maybe archimate yellow?]

Centrale begreber Som sagt, er det et skift. Og vi skal lige være enige om nogle centrale begreber for ikke at få forbi hinanden.

1.1. Services

Der er services (SOA). Og forskellige slags. Applikations Service er dem som en myndigheds kunder (borgere og virksomheder) kan se. Platform services er dem SIT tilbyder myndigheder i rollen som platformsanvender 'kunder hos statens it'. To slags platform services. Dem mod mennesker og dem mod applikationer.

1.2. Applikationer

Der er applikationer. Og de består af komponenter. Er lavet af kode og pakket ind i images der kan kører i containere.

1.3. Data

Der er data. GDPR Principle of "accountability" (ref art 5, stk 2) extends to all data. All data stored in the platform MUST have a registered data controller.

Så hvad er en 'løsning'... Det er de dele der skal fungere for at en applikationsservice virker, nogle dele kontrolleres af udbyderen af servicen, andre af platformsudbydere og andre igen måske af andre udbydere.

2. En eksemplarisk applikation – ForTheBirds

Vi vil anvende et gennemgående eksempel ForTheBirds der gradvist udvides og tager de forskellige dele af platformen i anvendelse, og vi prøver at følge en naturlig rækkefølge.

2.1. Plan

Applikationer løser problemer og her er vores...

Vi ønsker at overvåge platformens tilstand og rapporterer det til en extern status service

Verden er ikke sort/hvid og platforme er ikke rød eller grøn. Så vi har brug for detaljerede granulerede statusser, så anvender selv kan vurdere om de dele der er nødvendige for deres applikationer er i status hvor anvender skal til at gøre noget... "Sætte et skilt op i vinduet"...

For at gøre det nemmere (og lidt sjovere) bruger vi en analogi/en fælles reference. Pixars For The Birds. En lang række små fugle med hver sin personlighed, ser forskellige dele af verden. Og der kan være mange fugle på samme tråd.

2.2. Code

Vi starter på en din egen bærbare. Men jeg har jo en cloud.... jo men du skal da ikke stoppe med at udvikle bare fordi nettet ryger eller du sidder på et fly.

https://www.docker.com/blog/docker-golang/

Can we lave runde store bullets til steps. Måske to niveauer. Måske passe med DevOps Cycle...

import (    "net/http")func root(w http.ResponseWriter, _ *http.Request) {    w.WriteHeader(http.StatusOK)    w.write("For The Birds - Pixar")}func main() {    http.HandleFunc("/", root)    http.ListenAndServe(":8080", nil)}

2.3. Build

Build your Code
docker run -v $(pwd):/go/bin --rm golang go get github.com/digst/cloud/code/...

Write a docker build script

FROM scratch
 COPY ./hello /hello

Lets leave the entrypoint out.

Create an image

docker build

2.4. Test

docker run 
curl localhost:8080

og du bør se teksten "For The Birds - Pixar".

2.5. Release

2.6. Deploy

2.7. Operate

2.8. Monitor

3. Iterate

Based on use stories....

3.1. User story 1

3.2. User story 2

3.3. User story 3

3.4. User story 4

3.5. User story 5

4. De enkelte platformsservices

For at kunne komme hurtigt igang og for at hurtigt at kunne efterprøve kunders behov, er der etableret en midlertidig selvbetjeningsløsninger på `k8s.govcloud.dk`. Løsningen er realiseret ved anvendelse af Rancher.

Her understøttes kunders deployment og monitorering af applikationer, samt deployment af services.

Det er planen at udvikle en simple og mere målrettet selvbetjening, der skal sikre større uafhængighed af den underliggende implementering, og tillade tilpasning af sprogbrug til fællesoffentlige begreber om it-systemer. Ansvaret for løsningen er stadig under diskussion.

I henhold til aftalen om GovCloud, skal den fulde lifecycle af tekniske services styres i fælles regi. Det vi sige at der løbende tages stilling til hvilke services der tilføjes og eventuelt udfases.

Følgende services er tilgængelig i GovCloud Platform API 1.0.

4.1. Identitetsservicen (/id)

Applikationer der ønsker at genkende brugere der allerede kendes af Statens IT, kan anvende platformens secure token service / billetomveksler. Kald til applikationsservice der er kræver en genkendt bruger vil få tilknyttet et JSON Web Token med oplysninger om brugerens identitet. Hvis der er brug for omveksling af identitetet mellem forskellige idp’er eller føderationer kan den interne secure token service anvendes.

4.2. Logservicen (/log)

Applikationers stdout/stderr, Service Fabric og Data Fabric sender loghændelser til en fælles log service. Log filer er tilgængelig i selvbetjeningsløsninger og for kundens applikationer via

De tre data services... Adgangskontrol til kunders datasæt styres på applikationsniveau og håndhæves af platformen. Dataservice lader applikationer skrive og læse datasæt gennem tre forskellige protokoller:

4.3. Filservicen (/file)

Network Files System (NFS) lader applikationer skrive og læse binære filer fra en lang række operativsystemer og programmeringssprog. Et datasæt repræsenteres af et NFS Directory.

4.4. Meddelsesservicen (/stream)

Apace Kafka lader applikationer skrive og læse meddelelser til streams og topics. Et datasæt repræsenteres af en Kafka Stream.

4.5. Tabelservicen (/table)

OJAI lader applikationer at skrive og læse JSON dokumenter til dokumentsamlinger. Et datasæt repræsenteres af en OJAI Document Store.

4.6. Opbevaring af kildekode (git.)

Code Reposity

Kunder kan bringe deres applikationskode under versionskontrol i det fælles repository med authentication fra Statens ITs centrale brugerstyring.

4.7. Opbevaring af images (reg.)

Docker Container Image Registry

Kunder kan opbevare container images til deployment på GovCloud i det fælles repository med authentication fra Statens ITs centrale brugerstyring.

4.8. Selvbetjening (kub.)

4.9. Overvågning (stat.)

4.10. Online samarbejde (coll.)

5. Services udenfor platformen

5.1. Directory

Oplysninger om kundens services, applikationer, datasæt og deres rettigheder gemmes af selvbetjeningsløsningen i Directory servicen. Oplysningerne er tilgængelige for kundens applikationer via LDAP.

5.2. External keys

Kunder der ønsker at begrænse anvendelsen af applikations services kan anvende eksterne nøgler (API keys). Eksterne nøgler giver ingen ekstra sikkerhed, men en mulighed for at begrænse eller identificere adgang ved fx misbrug.

5.3. MapR

5.4. ...

6. Sammenhæng til FDA...?

6.1. Brugerstyring

6.2. Deling af data og dokumenter

6.3. Selvbetjening

6.4. Datasæt