Initial commit

This commit is contained in:
Marcello Calisto 2023-08-26 13:53:14 +02:00
commit 4db9fcd3ab
28 changed files with 703 additions and 0 deletions

48
Abgaben.md Normal file
View File

@ -0,0 +1,48 @@
# Umsetzung / Abgabe Lernprodukt / Bewertung
[TOC]
# Umsetzung
## Git Repository
Erstellen Sie ein Repository in Gitlab oder Github und berechtigen Sie die Lehrperson(en) mit Leserechten. Sie werden alle Kompetenzen sowie die zugehörenden Lernprodukte in diesem Git Repo abgeben. Planen Sie daher ihre Struktur bereits entsprechend, z. B.
KN01/<Ihre Dateien hier >
KN02/<Ihre Dateien hier >
....
## Vorgehen
Sie werden meistens praktisch in Kompetenzthemen arbeiten. Dass Sie ein Thema verstanden haben, werden Sie beweisen, indem Sie ihre Schritte **und/oder** die Endprodukte mit Screenshots belegen und im Git Repository ablegen. **Verwenden Sie dazu Markdown**!
**ACHTUNG**: In den meisten Fällen erstellen Sie erst Screenshots, nachdem bei Ihnen alles einwandfrei läuft. Wir empfehlen deshalb, dass Sie während der Umsetzung auch die Schritte dokumentieren, damit Sie die gleichen Schritte nicht mehrfach machen müssen.
Sie dürfen jeweils in 2er Gruppen arbeiten, aber **jeder** Teilnehmer führt **alle** Schritte in seiner eigenen Lernumgebung durch und erstellt sein **eigenes** Repository mit allen Lernprodukten und erforgerlichen Abgaben.
Der Fokus bei der Erfüllung der Kompetenzen steht Ihre persönliche Leistung im Zentrum. Dokumentieren Sie als Ihren Lernfortschritt und insbesondere Ihre Lernerfolge. Das heisst: Die Lehrperson muss anhand von Ihrer Dokumentation nachvollziehen können, ob Sie die Übung funktional erfolgreich umgesetzt haben.
Das erreichen Sie wie folgt:
* Dokumentieren Sie Ihre Lernumgebung mit einer Visualisierung (logischer Netzwerkplan oder Funktionsplan). Integrieren Sie in diese Dokumentation alle relevanten und individuellen zugehörenden Konfigurationsdefinitionen wie IP-Adressen, Portangaben oder Systmnamen.
Achten Sie darauf, dass diese Informatinen deckungsgeleich mit Ihrer Systemdokumentation ist.
* Definieren Sie konkrete Testfälle. Testen Sie Ihre gebaute Systemumgebung entsprechend und dokumentieren Sie diese Tests, insbesondere die Systemrückmeldungen.
* Lesen Sie wo möglich Aktivitätslogs aus Ihren gebauten Systemen und hinterlegen Sie diese im Repsoitory.
* Ein guter Plattformentwickler verwendet für alle Code-Teile (wie Cloud-Init-Files oder Yaml-Files) immer ein Repository. Damit das der Code auch in der Praxis verwendet und weiterentickelt werden kann, müssen Sie alle Code-Teile immer in separates Files speichern. Diese Files können Sie dann mit Ihrer Dokumentation verlinken.
Gutes Beispiel für eine entsprechende System-Dokumentation, welche diese Anforderungen erfüllt:
{: .note} Link auf sep. File, coming soon
## Interpretation der Fragestellung
Wenn in Kompetenzen "Zeigen Sie, dass..." steht, ist damit gemeint, dass Sie die Schritte dokumentieren sollen (in Markdown) und zwar so, dass aus den Screenshots und Text klar wird, welche Aktionen Sie durchgeführt haben.
## Abgabe Lernprodukt
Halten Sie sich an die Vorgaben der Lehrperson.
**Denken Sie bitte mit bei der Abgabe/den Screenshots**. Wenn Sie z.B. einen Screenshot einer Webseite erstellen, aber die URL fehlt, die zeigt, was Sie eigentlich aufrufen, sagt der Screenshot wenig aus. Achten Sie darauf, dass die Screeshots möglichst viel Information von Ihrem individuellem System enthalten, optimalerweise mit Datum und Zeit-Angaben.
## Bewertung
Bewertungsform wird von der Lehrperson kommuniziert.
[comment]: <ausser wir finden hier einen gemeinsamen nenner, zum Beispile Einsatz von Teams-Bewertungsraster>

157
CloudComputing.md Normal file
View File

@ -0,0 +1,157 @@
# Cloud Computing
[TOC]
### Virtualisierung
"A hypervisor is a process that separates a computer's operating system and applications from the underlying physical hardware. Usually done as software although embedded hypervisors can be created for things like mobile devices.
The hypervisor drives the concept of virtualization by allowing the physical host machine to operate multiple virtual machines as guests to help maximize the effective use of computing resources such as memory, network bandwidth and CPU cycles." (networkworld.com)
Graphisch darstellen, kann man dies wie folgt.
![Hypervisor](./CloudComputing/Hypervisor.png)
Sie sehen hier, dass es zwei Typen von Hypervisors gibt:
- Typ 1 (native): Läuft direkt auf der Hardware des Hostsystems.
- Typ 2 (hosted): Läuft als Applikation auf dem Betriebssystem.
### Hyperscaler
"Hyperscalers are large cloud service providers, that can provide services such as computing and storage at enterprise scale." (redhat.com)
"Hyperscalers get their name from hyperscale computing, a method of processing data that allows for software architecture to scale and grow as increased demand is added to the system." (redhat.com)
Vorstellen kann man sich dies gut, wenn man die Technologie des Hypervisors verwendet und diese vervielfacht. Natürlich werden hier nur Typ 1 Hypervisors verwendet, wegen der Performance.
![Hypervisor](./CloudComputing/Hyperscaler.png)
Das Grundprinzip ist bei alle grossen Anbietern das gleiche. Die Details können sich natürlich unterscheiden.
[![Azure Hyperscaler](https://img.youtube.com/vi/KXkBZCe699A/0.jpg)](https://www.youtube.com/watch?v=KXkBZCe699A)
### Betriebsmodelle
Wir unterscheiden grundsätzlich die folgenden Betriebsmodelle:
- On Premise. Alle ihre Hard- und Software werden von Ihnen betrieben in eigenen oder gemieteten Datenzentren.
- Hybrid Cloud. Sie haben ihre Server und Applikationen teilweise On Premise und teilweise in der Cloud. Heutzutage trifft man dieses Modell am Öftesten an. Sobald eine Firma Office365 Lizenzen betreibt, sind zumindest Teile der Infrastruktur in der Cloud, auch wenn proprietäre Software noch auf eigenen Servern betrieben wird.
- Cloud-Native. In diesem Modell ist die komplette Infrastruktur und alle Applikationen in der Cloud.
Cloud Betriebsmodelle können zusätzlich in **Public Cloud** (öffentliche Anbieter wie Azure und AWS) und **Private Cloud** (Firmeneigene Cloud Infrastruktur) unterteilt werden.
### Servicemodelle
Bei den Servicemodellen geht es darum zu unterscheiden, welcher Art die Cloudnutzung ist.
- Infrastruktur as a Service (**IaaS**): Dieses Servicemodell umfasst die Bereitstellung der Hardware (z.B. virtuelle Maschinen oder Netzwerk) in der Cloud. Sie mieten Rechenleistung, Speicher, etc und installieren auf diesen Instanzen ihre Software. Beispiele dazu sind Microsoft Azure, Google Compute Engine (GCE), Amazon Web Services (AWS), Rackspace, Cisco Metapod
- Plattform as a Service (**PaaS**): In diesem Modell wird eine Plattform in der Cloud zur Verfügung gestellt, auf der Sie ihre Software, Service, etc anbieten können. Sie verwenden dabei die Infrastruktur und SDKs der Hersteller und konzentrieren sich auf die Entwicklung der Software und nicht auf die Infrastruktur dahinter. Beispiele dazu sind AWS Elastic Beanstalk, Windows Azure, Heroku, Force.com, Google App Engine, Apache Stratos, OpenShift.
- Software as a Service (**Saas**): In diesem Modell wird die Software als Service in der Cloud gehostet. Sie verwenden die Software ohne, dass Sie sie lokal installieren müssen. Jede Webseite auf der Sie sich einloggen dient als Beispiel für SaaS (z.B. Google Workspace, Dropbox, Salesforce, Microsoft 365, etc)
- Function as a Service (**FaaS**)/**Serverless**: Ist ähnlich wie PaaS. Während bei PaaS Infrastruktur für Sie bereit gestellt wird, wird in FaaS die Infrastruktur für Sie auch verwaltet. Der grosse Vorteil bei FaaS sind die reduzierten Kosten. Nur wenn ihre *Function* auch ausgeführt wird, fallen Kosten an.
### Cloud-Migrations-Modelle
Im Allgemeinen werden die folgenden Migrationsmodelle unterschieden:
- Rehosting (Lift & Shift): Dabei wird eine bestehende On-Premise Applikation genommen und mit minimalen Anpassungen in der Cloud wieder in Betrieb genommen. Dabei wird auf das Servicemodell **IaaS** aufgesetzt. Die Applikation wird auf virtuellen Servern installiert.
- Replatforming (Lift & Reshape): Ihre On-Premise Applikation wird soweit angepasst, dass Sie hinsichtlich der Infrastruktur optimal gehostet werden kann. z.B. kann eine Applikation mit ein paar Änderungen mit dem **PaaS** Servicemodell gehostet werden.
- Refactoring / Replace: Dabei schreiben Sie Ihre Applikation so um, dass Sie optimal mit den Cloud Services betrieben werden kann. Normalerweise wechseln Sie hier auf **Microservices** betrieben mit **Kubernetes** oder auf das **FaaS** Modell. Natürlich sind Mischformen möglich.
- Repurchasing: Möglicherweise evaluieren Sie die Marktlage und lösen Ihre bestehende Applikation mit einer bestehenden **SaaS** Lösung ab.
### Speichermodelle
Grundsätzlich kann man in die folgenden Modelle unterteilen. Es gibt natürlich Variationen im Detailierungsgrad und auch unterschiedliche Namensgebungen findet man.
- **Hot** Storage: Bezeichnet Speicher, welcher häufig aufgerufen wird und nur sehr kleine Verzögerungen erlaubt.
- **Warm** Storage: Bezeichnet Speicher, welcher regelmässig aufgerufen wird. Eine andere Bezeichnung ist z. B. "Cool Storage".
- **Cold** Storage: Bezeichnet Speicher, welcher sehr selten aufgerufen wird. Eine andere Bezeichnung ist z.B. "Archive Storage".
- **Datenbank**: Datenbanken eben!
Während Betriebssysteme und Applikationen *Hot Storage* benötigen für die Laufzeit, werden Daten meistens in Datenbanken ausgelagert. *Warm Storage* kommt, z. B. für temporäre Dateien in Frage oder Videos und Audios, die gelegentlich abgespielt werden. *Cold Storage* kann gut für Backups verwendet werden.
Schematisch kann man die Verwendung wie folgt abbilden.
![Storage](./CloudComputing/Storage.png)
### Netzwerk
Ein Netzwerk in einer public cloud kann mit dem folgenden Bild vereinfacht visualisiert werden.
![Netzwerk](./CloudComputing/Netzwerk.png)
Die wichtigen Begriffe kurz erklärt:
- Virtual Private Cloud (VPC): Dies bezeichnet ihr eigenes internes Netzwerk innerhalb des Anbieters. Im dargestellten Beispiel handelt es sich um das Subnetz 172.1.0.0/16.
- Subnet: Ein Subnet bezeichnet ein Subnetz innerhalb der VPC (also eigentlich ein Subnetz eines Subnetz). Alle ihre virtuellen Server werden in Subnetzen platziert - entweder automatisch oder von Ihnen systematisch.
- Gateway: Steht hier stellvertretend für das Routing zwischen dem Internet und den privaten Subnetzen.
Das folgende Bild zeigt **konzeptionell** die Stationen, die eine Anfrage durchlaufen muss.
![Sicherheit](./CloudComputing/Sicherheit.png)
Alle Stationen tragen zur Sicherheit im Netzwerk bei und werden folgend beschrieben:
**Security Group**: Die Security Group ist im Prinzip eine NAT Firewall, die Anfragen auf spezifischen Ports blockiert oder weiterleitet. Sie können bei den Regeln das Netzwerk einschränken und so nur interne Abfragen erlauben.
**Netzwerk-Adapter**: Eine virtuelle Instanz hat grundsätzlich zwei virtuelle Netzwerk-Adapter - eine für das private Subnetz und eine öffentliche IP.
**Server Firewall**: Ihr Server hat grundsätzlich eine Firewall, die aktiviert sein kann. Die public cloud images haben die lokale Firewall jeweils **deaktiviert**.
**Pakete**: Die Softwarepakete haben oft noch zusätzlichen Schutz. Die MariaDB lässt per Standard nur Anfragen des localhosts (127.0.0.1) zu. Sie könnten alle Firewalls öffnen und kämen trotzdem nicht auf die Datenbank mit einer Fernabfrage.
Das folgende Bild zeigt das gleiche Szenario wie man es praktisch umsetzen würde. Dem Datenbankserver kann man (nach der Installation) die öffentliche IP entfernen und nur noch Anfragen über das lokale Netzwerk erlauben. Die lokalen Firewalls bleiben deaktiviert.
![Sicherheit2](./CloudComputing/Sicherheit2.png)
### Skalierung
In den Quellen finden Sie einen Artikel über die vertikale und horizontale Skalierung und Load Balancing. Lesen Sie sich ein.
#### Vertikale Skalierung (Scale Up)
Bei der vertikalen Skalierung erhöht man die Ressourcenzuteilung einer virtuellen Instanz (oder eines physischen Rechners). Dies kann z.B. mehr RAM, höhere Anzahl CPUS oder mehr Speicherplatz bedeuten.
Abhängig von dem darunterliegenden System kann dies "Hot" geschehen, also während dem laufenden Betrieb. VMWare unterstützt die Änderung von CPU und RAM "Hot", während bei public cloud Anbieter wie AWS oder Microsoft Azure die Instanz zuerst gestoppt werden muss. Der Grund dafür ist die Art und Weise wie verrechnet wird.
Der Datenspeicher kann auch bei den public cloud Anbieter im laufenden Betrieb angepasst werden.
#### Horizontale Skalierung (Scale Out)
Bei der horizontalen Skalierung ändern Sie nicht ihre Instanz, aber fügen weitere Instanzen hinzu, so dass die Last auf mehrere Instanzen verteilt wird. Vom Prinzip her funktioniert das ähnlich wie beim Hyperscaler bei dem Sie mehrere Rechner zusammenhängen und dann die Ressourcen von aussen als eine Einheit erscheinen lassen.
Auf diese Weise können Sie jederzeit einfach weitere Instanzen hinzufügen, ohne, dass ihre Applikation/Ihre Umgebung heruntergefahren werden muss.
### Load Balancer
Ein Load Balancer wird benötigt, um die Last auf mehrere Server zu verteilen, bei einer horizontalen Skalierung. Im einfachsten Fall, verteilt der Load Balancer jede Anfrage abwechselnd an die verschiedenen Instanzen. Ein Load Balancer kann aber auch intelligentere Logik enthalten und die Anfragen an die am wenigsten ausgelasteten Instanzen verteilen.
#### Auto Scaling
Auto Scaling bezeichnet den Vorgang, wenn automatisch neue Instanzen hinzugefügt und wieder entfernt werden, abhängig von der Auslastung der bestehenden Server. Auf diese Weise kann ihre Applikation jederzeit optimal antworten.
![AutoScaling](./CloudComputing/AutoScaling.png)
### Quellen
networkworld.com: [What is a hypervisor?](https://www.networkworld.com/article/3243262/what-is-a-hypervisor.html)
redhat.com: [What is a Hyperscaler](https://www.redhat.com/en/topics/cloud/what-is-a-hyperscaler)
ionos.de: [Serverless Computing: Das steckt hinter dem modernen Cloud-Modell](https://www.ionos.de/digitalguide/server/knowhow/serverless-computing/)
AWS I: [Storage](https://docs.aws.amazon.com/whitepapers/latest/aws-overview/storage-services.html)
Microsoft: [Hot, cool and archive access tier for blob data](https://learn.microsoft.com/en-us/azure/storage/blobs/access-tiers-overview)
missioncloud.com: [Horizontal Vs. Vertical Scaling: Which Is Right For Your App?](https://www.missioncloud.com/blog/horizontal-vs-vertical-scaling-which-is-right-for-your-app)
aws.amazon.com: [What Is Load Balancing?](https://aws.amazon.com/what-is/load-balancing/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
CloudComputing/Netzwerk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
CloudComputing/Storage.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

86
InfrastructureAsCode.md Normal file
View File

@ -0,0 +1,86 @@
# Infrastructure As Code
[TOC]
Infrastruktur als Code ist ein Paradigma (grundsätzliche Denkweise) zur Infrastruktur-Automation.
Es basiert auf konsistenten und wiederholbaren Definitionen (Code) für die Bereitstellung von Systemen und deren Konfiguration.
Produkte sind u.a. Cloud-init, Vagrant, TerraForm, CLIs etc.
#### Definition von Infrastruktur als Code
- Infrastruktur als Code ist ein Ansatz zur Automatisierung der Infrastruktur, der auf Praktiken aus der Softwareentwicklung basiert.
- Dabei werden konsistente, wiederholbare Prozesse für die Bereitstellung und Änderung von Systemen und deren Konfiguration verwendet.
- Änderungen werden an Deklarationen (Code) vorgenommen und dann durch automatisierte Prozesse, auf Systeme übertragen.
- Infrastruktur als Code hat sich in den anspruchsvollsten Umgebungen bewährt. Für Unternehmen wie Amazon, Netflix, Google und Facebook sind IT-Systeme nicht nur geschäftskritisch. Sie sind das Geschäft!
#### Ziele von Infrastruktur als Code
- Die IT-Infrastruktur unterstützt und ermöglicht Veränderungen, anstatt ein Hindernis oder eine Einschränkung zu sein.
- Änderungen am System sind Routine, ohne Drama oder Stress für Benutzer oder IT-Mitarbeiter.
- IT-Mitarbeiter verbringen ihre Zeit mit wertvollen Dingen, die ihre Fähigkeiten einbeziehen, und nicht mit sich wiederholenden Routineaufgaben.
- Benutzer können die benötigten Ressourcen definieren, bereitstellen und verwalten, ohne dass IT-Mitarbeiter dies für sie tun müssen.
- Teams können sich einfach und schnell von Fehlern erholen, anstatt davon auszugehen, dass Fehler vollständig verhindert werden können.
- Verbesserungen werden kontinuierlich vorgenommen und nicht durch teure und riskante „Urknall“ -Projekte.
- Lösungen für Probleme werden durch Implementierung, Test und Messung bewiesen, anstatt sie in Besprechungen und Dokumenten zu diskutieren.
### YAML
YAML ist eine einfache Textdatei mit einer definierten Syntax, die wir folgend verwenden werden. Es ist einfach zum Lesen.
<https://yaml.org/>: YAMLs offizielle Seite. Hier finden Sie auch den Link auf die Spezifikation.
Das folgende Beispiel von der YAML Webseite zeigt die wichtigsten Elemente. Sie haben grundsätzlich die Elemente *Collections* und *Scalars*, die unterschiedlich gemappt werden (z.B. key-value-pairs oder Aufzählungen).
![yaml](./x_gitres/yaml.png)
### Cloud-init
Cloud-init bietet eine Konfiguration des Betriebssystem während der Installation. Stellen Sie sich folgendes Szenario vor. Sie müssen 10 Server installieren mit verschiedenen Betriebssystemen (Ubuntu, Redhat). Alle benötigen die gleiche Konfiguration betreffend Software/Paketen. Sie haben die folgenden Optionen:
- Sie installieren alle Server einzeln und installieren alle Pakete und führen die verschiedenen Befehle aus.
- Sie erstellen ein Bash-Script, welches alle Befehle ausführt. Sie müssen es nur noch ausführen. Trotzdem haben Sie noch den Aufwand das Skript auf alle Server zu laden und auszuführen.
- Sie erstellen eine Konfiguration-Datei und geben diese bei der Installation der Instanz mit. Keine weiteren Schritte sind notwendig. Dies ist genau das, was Cloud-init ihnen bietet.
Es wird hier klar, welche Variante bevorzugt wird. Die Automatisierung kann natürlich noch weiter getrieben werden, aber dies kommt in einem späteren Kapitel.
Die Referenz zu Cloud-init Dateien ist umfangreich. Sie werden in der Kompetenz KN02 die wichtigsten Elemente und Konfigurationen kennenlernen und anwenden.
<https://cloudinit.readthedocs.io/en/latest/>: Cloud-inits offzielle Seite.
### Command Line Interfaces
Mit Cloud-Init haben Sie die Installation eines Servers automatisiert. Die Command Line Interfaces (CLIs) der verschiedenen Anbieter bieten Unterstützung bei der **Automatisierung der Infrastruktur**. Sie können mit diesen CLIs Instanzen, Sicherheitsgruppen, Netzwerk-Interfaces, etc erstellen. Dies ist also eine zusätzliche Ebene der Automatisierung. Natürlich können Cloud-Init Konfigurationen auch gleich mit geladen werden, so dass die erstellten Objekte auch korrekt Initialisiert werden.
Beispiel zu CLIs der Anbieter:
- AWS: <https://aws.amazon.com/cli/>
- Azure: <https://learn.microsoft.com/en-us/cli/azure/install-azure-cli>
- Google: <https://cloud.google.com/sdk/gcloud>
- Heroku: https://devcenter.heroku.com/articles/heroku-cli
### TerraForm
TerraForm ist ein Anbieter, der Cloud-Provider unabhängig ist. Mit Terraform können sie also die Infrastruktur aller Anbieter verwalten. Die Sprache ist soweit entwickelt, dass Sie direkt auch mit Rückgabewerten arbeiten können. Stellen Sie sich vor, Sie erstellen eine IP-Adresse. Die neu erstellte IP-Adresse hat eine ID (oder Referenz), die Sie vorher nicht kannten. Wenn Sie mit CLIs arbeiten, müssen Sie diese manuell oder mit einem eigenen Skript aus dem Rückgabewert des CLI-Requests auslesen und im nächsten Befehl einfügen bevor Sie den nächsten Befehl ausführen können.
TerraForm bietet die Möglichkeit, die IDs direkt auszulesen und als Variable in der nächsten Ressource direkt zu verwenden. Auf diese Weise können Sie die gesamte Infrastruktur in einem Skript und einem Befehl erstellen und dies sogar über mehrere Cloud-Provider hinweg.
Natürlich benötigen Sie auch für TerraForm eine CLI: <https://developer.hashicorp.com/terraform>.
### Quellen
Infrastructure As Code: [Cloud Native Kurs TBZ/HF](https://gitlab.com/ch-tbz-hf/Stud/cnt/-/tree/main/2_Unterrichtsressourcen/B)
Screenshot YAML: [Offizielle Webseite](https://yaml.org/spec/1.2.2/#21-collections)

57
KN00/KN00.md Normal file
View File

@ -0,0 +1,57 @@
<!--Pfad nicht koorekt ![TBZ Logo](../../x_gitres/tbz_logo.png)
-->
[TOC]
# KN00: Lernziele
Die Lernziele sind auch im Zusammenhang mit der Entwicklung der [Fach- und Methodenkompetenz](https://lex.berufsbildung.ch/dyn/11014.aspx?lang=DE&action=detail&value=366&lex=0) zu verstehen. Welche Handlungskompetenzen in diesem Modul zu erwerben sind, ist in der Modulindentifikation [346 - Cloud Lösungen konzipieren und realisieren](https://modulbaukasten.ch/Module/346_1_Cloud%20L%C3%B6sungen%20konzipieren%20und%20realisieren.pdf) von ICT-Berufsbildung festgehalten.
Die [Kompetenzmatrix](https://gitlab.com/ch-tbz-it/Stud/m346/m346/-/blob/main/Kompetenzmatrix.md) beschreibt allgemeingültig formuliert für jedes Kompetenzband die zu erfüllenden Voraussetzungen, um eine Kompetenzstufe zu erreichen.
Inhalt und Lernziele von diesem Ma­nu­skript:
## Cloud-init
- Sie kennen die Grundelemente von [YAML](https://spacelift.io/blog/yaml) und erkennen diese in [Cloud-init](https://cloud-init.io/) Dateien.
- Sie können die Vorteile von Cloud-init erläutern.
- Sie kennen die wichtigsten Elemente von Cloud-init und können diese auch anwenden.
- Sie finden sich mit der offiziellen Referenz zurecht und können ein Element nachschlagen oder neue Elemente entdecken und anwenden.
- Sie können eine virtuelle Instanz mit Cloud-init installieren.
- Sie kennen den Begriff "[Infrastructure As Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)" und können ihn erklären.
- Sie können Produkte nennen, die "Infrastructure As Code" anbieten (mit Hilfe des Internets).
## Virtualisierung
- Sie können den Begriff der "Virtualisierung" erläutern.
- Sie können grob erklären welche Rolle ein "[Hypervisor](https://www.redhat.com/en/topics/virtualization/what-is-a-hypervisor)" in der Virtualisierung spielt.
- Sie kennen den Unterschied zwischen Typ 1 und Typ 2 Hypervisors und können den auch erklären.
- Sie können den Begriff "[Hyperscaler](https://www.redhat.com/en/topics/virtualization/what-is-a-hypervisor)" erklären im Zusammenhang mit Cloud-Systemen.
- Sie kennen Schichten von Cloud-Systemen.
## Betriebsmodelle
- Sie kennen die drei Betriebsmodelle und können Sie erklären.
- Sie kennen die Unterteilung zwischen Public und Private Cloud und können Sie erklären.
- Sie können Beispiele zu den Betriebsmodellen nennen.
## Servicemodelle
- Sie kennen die vier Servicemodelle und können Sie erklären.
- Sie wissen welches Servicemodell auf einem anderen aufbaut (z.B. PaaS auf IaaS).
- Sie können Beispielprodukte für die Servicemodelle nennen (mit Hilfe des Internets)
## (Cloud-) Migrationsmodelle
- Sie kennen die Begriffe der Migrationsmodellen.
- Sie kennen die Zielplattform der Migrationsmodellen.
- Bei einem gegebenen Szenario können Sie für ein Migrationsmodell argumentieren.
## Speichermodelle
- Sie kennen die vier Speichermodelle
- Sie wissen für welchen Einsatz die Speichermodelle sinnvoll Verwendung finden.
- Sie können Beispiele zur Benutzung der Speichermodelle geben.
- Sie kennen den Unterschied zwischen persistentem und flüchtigem Speicher und können diesen erklären, speziell im Zusammenhang mit virtuellen Instanzen.
- Sie kennen den Unterschied der Lese- und Schreibgeschwindigkeiten der Speichermodelle.

15
KN03/cloud-init.yaml Normal file
View File

@ -0,0 +1,15 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0WGP1EZykEtv5YGC9nMiPFW3U3DmZNzKFO5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYjt6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqMvPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD aws-key
ssh_pwauth: false
disable_root: false
package_update: true
packages:
- curl
- wget

13
KN04/image.php Normal file
View File

@ -0,0 +1,13 @@
<?php $ihrname = "Hans Muster"; ?>
<html>
<head>
<title><?php echo($ihrname) ?></title>
</head>
<body>
Hier kommt Ihr Text.
<br />
<img src="URL-To-The-Image" />
Platzieren Sie hier notwendige Quellenangaben, z.B. wenn der Inhalt von unsplash kommt.
</body>
</html>

21
KN06/cloud-init-db.yaml Normal file
View File

@ -0,0 +1,21 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0WGP1EZykEtv5YGC9nMiPFW3U3DmZNzKFO5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYjt6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqMvPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD aws-key
ssh_pwauth: true
disable_root: false
package_update: true
packages:
- mariadb-server
runcmd:
- sudo mysql -sfu root -e "GRANT ALL ON *.* TO 'admin'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;"
- sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/50-server.cnf
- sudo systemctl restart mariadb.service
- sudo cd /home/ubuntu
- sudo git clone https://gitlab.com/ch-tbz-it/Stud/m346/m346scripts.git
- sudo mysql -sfu root < ./m346scripts/KN05/shop-database.sql

View File

@ -0,0 +1,73 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0WGP1EZykEtv5YGC9nMiPFW3U3DmZNzKFO5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYjt6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqMvPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD aws-key
ssh_pwauth: true
disable_root: false
package_update: true
packages:
- curl
- wget
- nginx
- aspnetcore-runtime-6.0
write_files:
- content: |
[Unit]
Description=Demo Shop
[Service]
WorkingDirectory=/var/www/app
ExecStart=/usr/bin/dotnet /var/www/app/ShopDemo.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
path: /etc/systemd/system/shop-app.service
- content: |
server {
listen 80;
server_name default;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
path: /home/ubuntu/nginx
runcmd:
- sudo cd ~
- sudo git clone https://gitlab.com/ch-tbz-it/Stud/m346/m346scripts.git
# install mongodb shell
- sudo wget -qO- https://www.mongodb.org/static/pgp/server-6.0.asc | sudo tee /etc/apt/trusted.gpg.d/server-6.0.asc
- sudo echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
- sudo apt-get update
- sudo apt-get install -y mongodb-mongosh
# import mongodb collections
- mongosh "mongodb+srv://[[Mongodb-Cluster-URL]]/" --u [[Mongodb-username]] -p [[Mongodb-password]] < ~/KN06/shop-database-mongodb.txt
# install App
- sudo mkdir /var/www
- sudo mkdir /var/www/app
- sudo sed -i 's/<clusterUrl>/[[Mongodb-Cluster-URL]]/g' ./m346scripts/KN06/dotnet/appsettings.json
- sudo sed -i 's/<username>/[[Mongodb-username]]/g' ./m346scripts/KN06/dotnet/appsettings.json
- sudo sed -i 's/<password>/[[Mongodb-password]]/g' ./m346scripts/KN06/dotnet/appsettings.json
- sudo cp -r ./m346scripts/KN06/dotnet/* /var/www/app/
- sudo systemctl enable shop-app.service
- sudo systemctl start shop-app.service
- sudo service nginx start
- sudo cp /home/ubuntu/nginx /etc/nginx/sites-available/default
- sudo nginx -s reload

View File

@ -0,0 +1,58 @@
#cloud-config
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0WGP1EZykEtv5YGC9nMiPFW3U3DmZNzKFO5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYjt6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqMvPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD aws-key
ssh_pwauth: true
disable_root: false
package_update: true
packages:
- curl
- wget
- nginx
- openjdk-18-jre
write_files:
- content: |
[Unit]
Description=Demo Shop
After=syslog.target
[Service]
WorkingDirectory=/var/www/app
User=www-data
ExecStart=java -jar /var/www/app/shopdemo-1.0.0.jar --spring.config.additional-location=production.properties SuccessExitStatus=143
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
path: /etc/systemd/system/shop-app.service
- content: |
server {
listen 80;
server_name [[Public-IP-Web!]];
location / {
proxy_pass http://127.0.0.1:5001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
path: /home/ubuntu/nginx
runcmd:
- sudo mkdir /var/www
- sudo mkdir /var/www/app
- sudo git clone https://gitlab.com/ch-tbz-it/Stud/m346/m346scripts.git
- sudo sed -i 's/<your-connection-string>/jdbc:mysql:\/\/[[Private-IP-DB!]]:3306\/shop/g' ./m346scripts/KN05/java/production.properties
- sudo cp -r ./m346scripts/KN05/java/* /var/www/app/
- sudo systemctl enable shop-app.service
- sudo systemctl start shop-app.service
- sudo service nginx start
- sudo cp /home/ubuntu/nginx /etc/nginx/sites-available/default
- sudo nginx -s reload

26
KN08/Readme.md Normal file
View File

@ -0,0 +1,26 @@
# Backup / Cleanup Script
In diesem Ordnern finden Sie zwei Python-Skripts, die sie für ein Backup und späteres Aufräumen Ihrer Instanzen verwenden können. Die beiden Skripts wurden verändert für Python 3.9 (Quelle: medium.com).
[Backup-Skript](./backup.py)
[Cleanup-Skript](./cleanup.py)
**Funktionsweise**
Sie müssen Ihrer Instanz den Tag "Backup" hinzufügen. Das **Cleanup-**Skript sucht alle Instanzen mit diesem Tag und erstellt einen Snapshot, ebenfalls mit Tag "DeleteOn" und einem Daten 7 Tage in der Zukunft.
![tag](./tag.png)
Das **Cleanup-**Skript sucht nach allen Snapshots mit dem "DeleteOn"-Tag und löscht diese, falls das Datum überschritten wird.
![snapshots](./snapshots.png)
## Quellen
medium.com: [Automating Backups using AWS Lambda](https://medium.com/cognitoiq/automating-backups-using-aws-lambda-baa013fdffc7)

63
KN08/backup.py Normal file
View File

@ -0,0 +1,63 @@
import boto3
import collections
import datetime
ec = boto3.client('ec2')
def lambda_handler(event, context):
reservations = ec.describe_instances(
Filters=[
{'Name': 'tag-key', 'Values': ['backup', 'Backup']},
]
).get(
'Reservations', []
)
instances = sum(
[
[i for i in r['Instances']]
for r in reservations
], [])
print ('Found %d instances that need backing up' % len(instances))
to_tag = collections.defaultdict(list)
for instance in instances:
try:
retention_days = [
int(t.get('Value')) for t in instance['Tags']
if t['Key'] == 'Retention'][0]
except IndexError:
retention_days = 7
for dev in instance['BlockDeviceMappings']:
if dev.get('Ebs', None) is None:
continue
vol_id = dev['Ebs']['VolumeId']
print ("Found EBS volume %s on instance %s" % (vol_id, instance['InstanceId']))
snap = ec.create_snapshot(
VolumeId=vol_id,
)
to_tag[retention_days].append(snap['SnapshotId'])
print ("Retaining snapshot %s of volume %s from instance %s for %d days" % (
snap['SnapshotId'],
vol_id,
instance['InstanceId'],
retention_days,
))
for retention_days in to_tag.keys():
delete_date = datetime.date.today() + datetime.timedelta(days=retention_days)
delete_fmt = delete_date.strftime('%Y-%m-%d')
print ("Will delete %d snapshots on %s" % (len(to_tag[retention_days]), delete_fmt))
ec.create_tags(
Resources=to_tag[retention_days],
Tags=[
{'Key': 'DeleteOn', 'Value': delete_fmt},
]
)

26
KN08/cleanup.py Normal file
View File

@ -0,0 +1,26 @@
import boto3
import re
import datetime
ec = boto3.client('ec2')
"""
This function looks at *all* snapshots that have a "DeleteOn" tag containing
the current day formatted as YYYY-MM-DD. This function should be run at least
daily.
"""
def lambda_handler(event, context):
account_ids = list()
delete_on = datetime.date.today().strftime('%Y-%m-%d')
filters = [
{'Name': 'tag-key', 'Values': ['DeleteOn']},
{'Name': 'tag-value', 'Values': [delete_on]},
]
snapshot_response = ec.describe_snapshots(OwnerIds=account_ids, Filters=filters)
for snap in snapshot_response['Snapshots']:
print ("Deleting snapshot %s" % snap['SnapshotId'])
ec.delete_snapshot(SnapshotId=snap['SnapshotId'])

BIN
KN08/snapshots.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
KN08/tag.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

18
Kompetenzmatrix.md Normal file
View File

@ -0,0 +1,18 @@
# Kompetenzmatrix
| Kompetenzband: | HZ | Beginner | Intermediate | Advanced |
| -------------------------------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **A** - Anforderungen analysieren | 1, 2 | A-1-B:<br/>Ich kenne die Unternehmensziele bezüglich des IT-Betriebs und weiss, was dies für den Betrieb einer Applikation bedeutet | A-1-I:<br/>Ich kann aus den Unternehmenszielen die für den Applikationsbetrieb passende Strategie auswählen | A-1-A:<br/>Ich kann eine auf die Unternehmensziele ausgerichtete Strategie für den Applikationsbetrieb formulieren und positive Rückkopplungen für die Unternehmensziele aufzeigen |
| **B** - Betriebsarten evaluieren | 1 | B-1-B:<br/>Ich kenne Service- und Betriebsmodelle des Cloud-Computings, sowie deren Unterschiede | B-1-I:<br/>Ich kann passende Service- und Betriebsmodelle des Cloud-Computings für spezifische Anwendungsfälle auswählen | B-1-A:<br/>Ich kann die Cloud Service- und Betriebsmodelle des Cloud-Computings auf die Eignung für spezifische Anwendungsfälle abwägen und eine fundierte Empfehlung abgeben |
| **C** - Aufwände schätzen | 2 | C-1-B:<br/>Ich kann die Fremdkosten für die Betriebsarten  kalkulieren | C-1-I:<br/>Ich kann die Fremdkosten für die Betriebsarten kalkulieren, sowie den nötigen Personalaufwand dafür abschätzen | C-1-A:<br/>Ich kann die Fremdkosten für die Betriebsarten kalkulieren, den nötigen Personalaufwand miteinbeziehen, sowie  anfallende Migrationsaufwände abschätzen |
| **D** - Optionen auf dem Markt vergleichen | 1, 2 | D-1-B:<br/>Ich kann die Unterschiede der verschiedenen Marktteilnehmer und deren Angeboten aufzeigen | D-1-I:<br/>Ich kann aufgrund der Unterschiede der verschiedenen Marktteilnehmer und deren Angeboten, passende Lösungsoptionen zusammenstellen | D-1-A:<br/>Ich kann die Optionen auf dem Markt zusammenstellen und aufgrund deren Unterschiede, Optimierungen oder Alternativen aufzeigen |
| **E** - Betriebsarchitektur konzipieren | 3 | E-1-B:<br/>Ich kann eine einfache Betriebsarchitektur entwickeln, die den Anforderungen genügt und die Schutzziele einhält | E-1-I:<br/>Ich kann eine Betriebsarchitektur entwickeln, die den Anforderungen genügt, die Schutzziele einhält und einfach wartbar ist | E-1-A:<br/>Ich kann eine hochverfügbare Betriebsarchitektur entwickeln, die den Anforderungen genügt, die Schutzziele einhält,  wartbar und resilient ist |
| **F** - Applikation in Betrieb nehmen | 3, 4 | F-1-B:<br/>Ich kann eine vorgegebene Applikation mittels vorgefertigten Scripts oder Rezepten in der Cloud in Betrieb nehmen | F-1-I:<br/>Ich kann eine vorgegebene Applikation mittels selber erweiterten Scripts oder Rezepten, individualisiert in der Cloud in Betrieb nehmen | F-1-A:<br/>Ich kann eine vorgegebene Applikation mittels selber erweiterten Scripts oder Rezepten, individualisiert in der Cloud in Betrieb nehmen und dafür sorgen, dass diese automatisch skalieren kann |
| **G** - System-Sicherheit implementieren | 3, 4 | G-1-B:<br/>Ich kann einfache Default-Policies anwenden, um die Sicherheit zu gewährleisten | G-1-I:<br/>Ich kann eigene Policies implementieren, um die Sicherheit zu erhöhen | G-1-A:<br/>Ich kann mit eigenen Policies und zusäztlichem Hardening die Sicherheit maximieren |
| **H** - Datensicherheit implementieren | 3, 4 | H-1-B:<br/>Ich kann einfache Backup-Massnahmen anwenden | H-1-I:<br/>Ich kann einfache Backup-Massnahmen anwenden und mittels Restores das System wiederherstellen | H-1-A:<br/>Ich kann eigene Backup-Lösungen implementieren  und mittels gezielten Restores Teile des Systems wiederherstellen |
| **I** - System testen | 3, 4 | I-1-B:<br/>Ich kann einen Funktions- und Lasttest auf dem System durchführen | I-1-I:<br/>Ich kann einen Funktionstest durchführen und mit einem Lasttest und gezielten Analysen die Schwächen des Systems eruieren | I-1-A:<br/>Ich kann einen Funktionstest durchführen und mit gezielten Lasttests das System an seine Grenzen bringen und die Skalierbarkeit aufzeigen |
| **J** - System überwachen | 3, 4 | J-1-B:<br/>Ich kann mit einfachen Mitteln den Zustand des Systems überwachen | J-1-I:<br/>Ich kann den Zustand des Systems überwachen und mich mittels Benachrichtigungen über Probleme informieren lassen | J-1-A:<br/>Ich kann den Zustand des Systems überwachen und für allfällige Probleme entsprechende Massnahmen formulieren |
| **K** - System skalieren | 3, 4 | K-1-B:<br/>Ich kann durch hinzufügen von Ressourcen oder Speicher das System vertikal hochskalieren | K-1-I:<br/>Ich kann das System vertikal skalieren und auf seine horizontale Skalierbarkeit beurteilen | K-1-A:<br/>Ich kann das System vertikal skalieren und Möglichkeiten für die horizontale Skalierbarkeit aufzeigen |
## Verbindung von den Kompetenznachweisen (KN) zur Kompetenzmatrix
![Verbindung von den Kompetenznachweisen (KN) zur Kompetenzmatrix](./x_gitres/M346-Verbindung_von_den_Kompetenznachweisen__KN__zur_Kompetenzmatrix.png)

23
PublicKey/346.pub Normal file
View File

@ -0,0 +1,23 @@
---- BEGIN SSH2 PUBLIC KEY - NUY ----
AAAAB3NzaC1yc2EAAAADAQABAAABAQC0WGP1EZykEtv5YGC9nMiPFW3U3DmZNzKF
O5nEu6uozEHh4jLZzPNHSrfFTuQ2GnRDSt+XbOtTLdcj26+iPNiFoFha42aCIzYj
t6V8Z+SQ9pzF4jPPzxwXfDdkEWylgoNnZ+4MG1lNFqa8aO7F62tX0Yj5khjC0Bs7
Mb2cHLx1XZaxJV6qSaulDuBbLYe8QUZXkMc7wmob3PM0kflfolR3LE7LResIHWa4
j4FL6r5cQmFlDU2BDPpKMFMGUfRSFiUtaWBNXFOWHQBC2+uKmuMPYP4vJC9sBgqM
vPN/X2KyemqdMvdKXnCfrzadHuSSJYEzD64Cve5Zl9yVvY4AqyBD
---- END SSH2 PUBLIC KEY ----
---- BEGIN PUBLIC KEY - CAL ----
AAAAB3NzaC1yc2EAAAADAQABAAACAQCz/wpWmsCxaQyuNFrIachc/q9nUdByoUcBc
icl/wnKLFktKp6du9np9Uhmo4M0tVHNnWCt5uNEi2ks/0XEbg2J+4heuAAKEDr/TV
bgabiWGclYKpEWZvmw8gsQwfpAKVG4aS2re7wB2uhw82ZqzJVpGm3ne+sNnz5uVrx
N8HUnuR2OWJD6bA9l/fBmE6zdObVXgrCJGjZmVyB5GMeTDJKExgoBpLggZn9CNdu7
Sx989xtNLehu6SWM+mGCq9Lcu7usiPG+SuEb8XynYaCOnv8+Oko6SYeJ9Omq/E7Eg
6vZHqCbBQ81TIZrGKcikLmF2xP7EOprGOSPVewke7ak7vvmOI+p/RfIAyXj1+GYny
+esk9G+qDRFXP9uiIlMfH1oGkQkztvSDMH+EOHqgY66NWQJPj83CaWH/euR0MROHX
jm1ar3RuN9qcASAnzCOQQ1FMwFkpIV5x0NDRx0Zp1rLt8ZUFykmIuHZI4g9u6RdAi
uWUxx9/eF0fXZa6Ju7GEMKeMtZxJJjmB/WCOylbkT+NPw5RcxgyRLKmUAicnYKXBm
ULY3pQM/Ui8KiCyJqRbLDBAR+XZYsZ7X5uhcuteu8KIfA2xEbInB4Q3c0DnnSih+G
EC4pEbz+NOfeCpLJEn4gfyV1S9S08sG62ls8NPFociA9aWmE1oXfcqwvOkkYhxOw==
---- END SSH2 PUBLIC KEY ----

19
README.md Normal file
View File

@ -0,0 +1,19 @@
# m346: Cloudlösungen konzipieren und realisieren
## Übersicht
In diesem Modul erarbeiten Sie sich teils geführt, teils selbstständig Kompetenzen.
## Unterlagen
- [Informationen zu den Abgaben](./Abgaben.md)
- [Infrastructure As Code](./InfrastructureAsCode.md)
- [Cloud Computing](./CloudComputing.md)
![overview](./x_gitres/overview.png)
## Leistungsmessung
Die Kompetenzen werden gewichtet gewertet und jede Kompetenz trägt zur Gesamtnote bei.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
x_gitres/overview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

BIN
x_gitres/tbz_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
x_gitres/yaml.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB