Skip to content

Latest commit

 

History

History
333 lines (188 loc) · 12.3 KB

guide.md

File metadata and controls

333 lines (188 loc) · 12.3 KB
Title: cloud.gov.dk guide
Status: LD
URL: http://github.com/digst/cloud/guide.md
Editor: madsh@digst.dk, Digitaliseringsstyrelsen http://arkitektur.digst.dk
Boilerplate: table-of-contents yes, copyright no, conformance no, abstract no, index no, idl-index no
Repository: digst/cloud
Inline Github Issues: full

Developers Guide
GovCloud PaaS
Statens IT

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.

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.

  • Services, Apllikationer og Data forvaltes særskilt... siloen er væltet..og rejst igen.

  • Platformen skalerer... så ok at svine lidt med pladsen...vente med at optimere. Forudsætning er bla. REST. Stateless! Det er vigtigt hvad der ryger i hvilke container.

  • Service kan implementeres meget simpelt. ... ex Go uden midleware... så pas på med bloaded midleware

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.

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.

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.

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.

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.

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.

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...

  • Find a git repository to place your code in. Lets use github, because we move it later.
  • Write some code ForTheBirds.go
<xmp class=include-code> path: code/ForTheBirds_1.go highlight: go line-numbers: line-highlight: 2-5, 10, 12 </xmp> <xmp highlight="Go" line-numbers=""> 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) } </xmp>

Build

Build your Code <xmp highlight="bash"> docker run -v $(pwd):/go/bin --rm golang go get github.com/digst/cloud/code/... </xmp>

Write a docker build script

<xmp highlight="docker"> FROM scratch COPY ./hello /hello </xmp> Lets leave the entrypoint out.

Create an image

<xmp highlight="bash"> docker build </xmp>

Test

- Run your image

<xmp>docker run </xmp>

  • Test your service

<xmp>curl localhost:8080</xmp> og du bør se teksten "For The Birds - Pixar".

Release

Deploy

Operate

Monitor

Iterate

Based on use stories....

User story 1

User story 2

User story 3

User story 4

User story 5

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.

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.

  • sts.govcloud.dk version 1 - 20190201

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

  • log.govcloud.dk TBD

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:

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.
  • data.govcloud.dk:2049 version 1 - 20190201

Meddelsesservicen (/stream)

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

  • data.govcloud.dk:8082 version 1 - 20190201

Tabelservicen (/table)

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

  • data.govcloud.dk:8243 version 1 - 20190201

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.

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.

Selvbetjening (kub.)

Overvågning (stat.)

Online samarbejde (coll.)

Services udenfor platformen

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.

  • ldap.govcloud.dk:349 TBD

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.

  • services.govcloud.dk/keyman version 1 - TBD

MapR

...

Sammenhæng til FDA...?

Brugerstyring

Deling af data og dokumenter

Selvbetjening

Datasæt