Die Corona-Warn-App - Das cwa-server Backend in einer Docker Umgebung

Da der Code der Corona-Warn-App nun komplett auf GitHub veröffentlicht wurde, ergibt sich nun für uns die Chance Möglichkeiten und Probleme in der Software-Entwicklung an einem sehr aktuellen Projekt live mitzuverfolgen. Mir ist bewusst, dass Tracking-Apps politisch und ethisch enormes Konfliktpotenzial bieten. Meiner Meinung nach wird der Nutzen derartiger Apps stark überschätzt und die entstehenden ethischen Probleme leider ignoriert. Erfolg oder Misserfolg werden sich wohl erst hinterher genau mit Fakten belegen lassen. Es gibt also einiges zu lernen! Im nachfolgenden Post möchte ich Euch zeigen wie Ihr das cwa-server Backend der App in einer Docker Umgebung aufsetzen könnt. Danach werden wir mit einem kleinen Python-Script einen Submission-Key an das Backend schicken und das Ergebnis in der Datenbank überprüfen.

CWA – Das cwa-server Backend in einer Docker Umgebung

[Durch Click auf die Play-Schaltfläche erfolgt ein Verbindungsaufbau zu YouTube/Google und es werden Daten an an diese externen Dienste übertragen]

Um Euch lokal eine passende Entwicklungs-Umgebung aufzubauen empfehle ich folgende Werkzeuge:

Sobald Ihr die Tools installiert habt, könnt Ihr den Code auch schon von GitHub clonen und die Umgebung mit Docker-Compose aufbauen lassen:

mkdir -p /c/cwa
cd /c/cwa
git clone https://github.com/corona-warn-app/cwa-server.git
cd cwa-server
docker-compose build
docker-compose up

Sobald die Docker Container laufen könnt Ihr z.B. mit einem eigenen kleinen Python-Client auf das Backend zugreifen. Der HTTP Body des POST-Request besteht in diesem Fall leider nicht aus klassischem Text oder Daten im JSON-Format. Für die API wird Protobuf von Google genutzt, dabei handelt es sich um ein schlankes binär Format. Für unseren Python-Client müssen wir zunächst mit den .proto-Files aus dem Source Code und dem Protobuf-Compiler von Google passende Python-Klassen bauen. Bei dieser Gelegenheit installieren wir auch gleich noch das Protobuf-Binding für Python. Evtl. müsst Ihr noch die Pfade an Eure Umgebung anpassen:

pip install protobuf
mkdir -p /c/cwa/cwa-client
cd /c/cwa/cwa-client
/c/tools/protoc/bin/protoc.exe --python_out=/c/cwa/cwa-client \
 --proto_path=/c/cwa/cwa-server/common/protocols/src/main/proto \
 app/coronawarn/server/common/protocols/external/exposurenotification/temporary_exposure_key_export.proto \
 app/coronawarn/server/common/protocols/internal/submission_payload.proto

Damit müsstet Ihr dann folgenden Python-Client ausführen können:

import http.client
from datetime import datetime, timedelta
from app.coronawarn.server.common.protocols.internal.submission_payload_pb2 import SubmissionPayload

submission = SubmissionPayload()
key = submission.keys.add()
key.key_data = bytes("FranksDemoKey222", "utf-8")
key.rolling_start_interval_number = int(((datetime.today() - timedelta(days=14)).timestamp())/600)
key.rolling_period = 144
key.transmission_risk_level = 4

conn = http.client.HTTPConnection('localhost', 8000)
headers = {'Content-Type': 'application/x-protobuf',
           'cwa-fake': '0',
           'cwa-authorization': 'edc07f08-a1aa-11ea-bb37-0242ac130002'}
conn.request("POST", "/version/v1/diagnosis-keys", submission.SerializeToString(), headers)
response = conn.getresponse()
print(response.status, response.reason)

Um auf die Postgres Datenbank zugreifen zu können, haben uns die CWA-Entwickler pgAdmin als Web-Oberfläche in einem eigenen Container mitgeliefert. Ihr müsst dort noch die Datenbank-Verbindung einrichten. Danach könnt Ihr mit folgendem SQL Statement prüfen ob unser POST-Request zu einem Eintrag in der Datenbank geführt hat:

SELECT encode(key_data, 'escape')
     , rolling_period
	 , rolling_start_interval_number
	 , submission_timestamp
	 , transmission_risk_level
	FROM public.diagnosis_key
	WHERE key_data like 'FranksDemoKey%';

Unser YouTube Kanal - Einfach DevOps

Um Euch zukünftig einfacher Tipps und Tricks rund um das Thema DevOps geben können, haben wir einen eigenen YouTube Kanal aufgebaut.

Einfach DevOps - Intro Video

[Durch Click auf die Play-Schaltfläche erfolgt ein Verbindungsaufbau zu YouTube/Google und es werden Daten an an diese externen Dienste übertragen]

Datenschutz ist uns wichtig, daher versuchen wir die Videos möglichst datensparsam einzubinden. Unsere Webseite sollte auch weiterhin keine Cookies bei Euch setzen. Hierzu nutzen wir das WordPress Plugin WP YouTube Lyte.

Aktiv gegen COVID-19

Aktuell unterstützen wir viele Kunden dabei die jeweilige IT-Infrastruktur für den verstärkten Einsatz aus dem Homeoffice auszubauen. Einige Kunden unterstützen wir auch beim automatisierten Aufbau von zusätzlichen Entwicklungs- und Testumgebungen.

Daneben untersuchen wir, ob wir bei der Produktion von Ausrüstung in verschiedenen Bereichen einen kleinen Beitrag leisten können. Hierzu möchte ich alle Kunden und Partner auf die Aktion des OpenLab Augsburg aufmerksam machen. Grundlage ist die Initiative der tschechischen Firma Prusa Research zur Herstellung eines Gesichtsschilds mit 3D-Druckern. Inzwischen gibt es von uns erste Probedrucke:

3D Drucker - Face Shield

Eine zusätzlicher 3D Drucker und mehr Filament wurde bereits bestellt.

Wir wünschen allen Partnern und Kunden viel Gesundheit und kreative Ideen beim Kampf gegen COVID-19!

COVID-19 - Ich bin weiterhin für Sie da

Das Coronavirus stellt auch mich vor neue Herausforderungen, so habe ich in Abstimmung mit meinen Kunden zunächst bis zum 26.04.2020 alle Vor-Ort Einsätze auf Remote umgestellt.

Für Kunden die keine eigene Infrastruktur für Remote-Arbeiten haben, biete ich die Nutzung von TeamViewer oder Zoom an. Für Notfälle meine Kunden das TeamViewer QuickSupport Modul über folgenden Link downloaden: https://get.teamviewer.com/itbergersupport.

In den letzten 20 Jahren habe ich einige große IT-Projekte rein über Remote-Arbeit abgewickelt. Bei einigen Kunden ist die internationale Zusammenarbeit mit Mitarbeitern in den USA, Indien oder China seit vielen Jahren Alltag. Mir ist bewusst, dass für einige Unternehmen die Umstellung auf eine vollständig virtuelle Zusammenarbeit - von einem Tag auf den anderen - zu enormen Schwierigkeiten führt.

Für eine erfolgreiche Zusammenarbeit in virtuellen Teams ist mehr als nur die Software für Remote-Arbeit notwendig. Ich gebe daher meine umfangreiche Erfahrung mit virtuellen Teams gerne an Kunden weiter und unterstütze bei der notwendigen Anpassung der Unternehmensprozesse und Schnittstellen.

Ich bin für Sie da - bleiben Sie gesund!

Frank Berger

 

Änderung unserer IT-Infrastruktur

In den nächsten Wochen werden wir schrittweise Änderungen an unserer IT-Infrastruktur vornehmen. Wenn alles nach Plan verläuft, sollten sich dadurch keine Auswirkungen auf den laufenden IT-Betrieb ergeben. Ziel der Änderungen ist eine Erneuerung unserer IT-Infrastruktur. Der Fokus liegt hierbei auf den Punkten IT-Sicherheit und Verfügbarkeit.

Im Detail ergeben sich Änderungen an folgenden Teilkomponenten:

  • DNS-Server, hierzu werden wir schrittweise auf ein neues Set von DNS-Servern wechseln.
  • Mail-Server, auch hier ist ein kompletter Wechsel geplant. Zusätzlich ist erweitern wir hier unsere Konfiguration um einen zweiten Mail-Exchanger. Wobei wir weiterhin auf die bewährte Kombination von Postfix und Dovecot setzen.
  • Bei unserem Web-Auftritt wird sich die WordPress-Version ändern, zusätzlich werden wir zukünftig HTTPS anbieten.

Über den Abschluss der einzelnen Schritte werden wir jeweis in einem eigenen Blog-Eintrag mit weiteren technischen Details informieren.