commit 4db9fcd3ab0bd21e77e4cca5fc70a592ab24fe39 Author: Marcello Calisto Date: Sat Aug 26 13:53:14 2023 +0200 Initial commit diff --git a/Abgaben.md b/Abgaben.md new file mode 100644 index 0000000..02575c2 --- /dev/null +++ b/Abgaben.md @@ -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]: diff --git a/CloudComputing.md b/CloudComputing.md new file mode 100644 index 0000000..110facf --- /dev/null +++ b/CloudComputing.md @@ -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/) diff --git a/CloudComputing/AutoScaling.png b/CloudComputing/AutoScaling.png new file mode 100644 index 0000000..4e1706e Binary files /dev/null and b/CloudComputing/AutoScaling.png differ diff --git a/CloudComputing/Hyperscaler.png b/CloudComputing/Hyperscaler.png new file mode 100644 index 0000000..03145d4 Binary files /dev/null and b/CloudComputing/Hyperscaler.png differ diff --git a/CloudComputing/Hypervisor.png b/CloudComputing/Hypervisor.png new file mode 100644 index 0000000..37cf70e Binary files /dev/null and b/CloudComputing/Hypervisor.png differ diff --git a/CloudComputing/Netzwerk.png b/CloudComputing/Netzwerk.png new file mode 100644 index 0000000..ca8dfe5 Binary files /dev/null and b/CloudComputing/Netzwerk.png differ diff --git a/CloudComputing/Sicherheit.png b/CloudComputing/Sicherheit.png new file mode 100644 index 0000000..5df16e8 Binary files /dev/null and b/CloudComputing/Sicherheit.png differ diff --git a/CloudComputing/Sicherheit2.png b/CloudComputing/Sicherheit2.png new file mode 100644 index 0000000..fd9f03d Binary files /dev/null and b/CloudComputing/Sicherheit2.png differ diff --git a/CloudComputing/Storage.png b/CloudComputing/Storage.png new file mode 100644 index 0000000..d61a418 Binary files /dev/null and b/CloudComputing/Storage.png differ diff --git a/InfrastructureAsCode.md b/InfrastructureAsCode.md new file mode 100644 index 0000000..a4b3a04 --- /dev/null +++ b/InfrastructureAsCode.md @@ -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. + +: 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. + +: 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: +- Azure: +- Google: +- 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: . + + + +### 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) + + + + + diff --git a/KN00/KN00.md b/KN00/KN00.md new file mode 100644 index 0000000..67f3131 --- /dev/null +++ b/KN00/KN00.md @@ -0,0 +1,57 @@ + + +[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. + + + diff --git a/KN03/cloud-init.yaml b/KN03/cloud-init.yaml new file mode 100644 index 0000000..e6c4ba5 --- /dev/null +++ b/KN03/cloud-init.yaml @@ -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 diff --git a/KN04/image.php b/KN04/image.php new file mode 100644 index 0000000..009bc16 --- /dev/null +++ b/KN04/image.php @@ -0,0 +1,13 @@ + + + + <?php echo($ihrname) ?> + + + Hier kommt Ihr Text. +
+ + + Platzieren Sie hier notwendige Quellenangaben, z.B. wenn der Inhalt von unsplash kommt. + + diff --git a/KN06/cloud-init-db.yaml b/KN06/cloud-init-db.yaml new file mode 100644 index 0000000..f1010cd --- /dev/null +++ b/KN06/cloud-init-db.yaml @@ -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 diff --git a/KN06/cloud-init-web-dotnet.yaml b/KN06/cloud-init-web-dotnet.yaml new file mode 100644 index 0000000..8371a4d --- /dev/null +++ b/KN06/cloud-init-web-dotnet.yaml @@ -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//[[Mongodb-Cluster-URL]]/g' ./m346scripts/KN06/dotnet/appsettings.json + - sudo sed -i 's//[[Mongodb-username]]/g' ./m346scripts/KN06/dotnet/appsettings.json + - sudo sed -i 's//[[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 + diff --git a/KN06/cloud-init-web-java.yaml b/KN06/cloud-init-web-java.yaml new file mode 100644 index 0000000..8f742b0 --- /dev/null +++ b/KN06/cloud-init-web-java.yaml @@ -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//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 diff --git a/KN08/Readme.md b/KN08/Readme.md new file mode 100644 index 0000000..f65f385 --- /dev/null +++ b/KN08/Readme.md @@ -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) + diff --git a/KN08/backup.py b/KN08/backup.py new file mode 100644 index 0000000..85186d0 --- /dev/null +++ b/KN08/backup.py @@ -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}, + ] + ) \ No newline at end of file diff --git a/KN08/cleanup.py b/KN08/cleanup.py new file mode 100644 index 0000000..d7db3c9 --- /dev/null +++ b/KN08/cleanup.py @@ -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']) \ No newline at end of file diff --git a/KN08/snapshots.png b/KN08/snapshots.png new file mode 100644 index 0000000..24cebb0 Binary files /dev/null and b/KN08/snapshots.png differ diff --git a/KN08/tag.png b/KN08/tag.png new file mode 100644 index 0000000..48a3740 Binary files /dev/null and b/KN08/tag.png differ diff --git a/Kompetenzmatrix.md b/Kompetenzmatrix.md new file mode 100644 index 0000000..62d913a --- /dev/null +++ b/Kompetenzmatrix.md @@ -0,0 +1,18 @@ +# Kompetenzmatrix +| Kompetenzband: | HZ | Beginner | Intermediate | Advanced | +| -------------------------------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **A** - Anforderungen analysieren | 1, 2 | A-1-B:
Ich kenne die Unternehmensziele bezüglich des IT-Betriebs und weiss, was dies für den Betrieb einer Applikation bedeutet | A-1-I:
Ich kann aus den Unternehmenszielen die für den Applikationsbetrieb passende Strategie auswählen | A-1-A:
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:
Ich kenne Service- und Betriebsmodelle des Cloud-Computings, sowie deren Unterschiede | B-1-I:
Ich kann passende Service- und Betriebsmodelle des Cloud-Computings für spezifische Anwendungsfälle auswählen | B-1-A:
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:
Ich kann die Fremdkosten für die Betriebsarten  kalkulieren | C-1-I:
Ich kann die Fremdkosten für die Betriebsarten kalkulieren, sowie den nötigen Personalaufwand dafür abschätzen | C-1-A:
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:
Ich kann die Unterschiede der verschiedenen Marktteilnehmer und deren Angeboten aufzeigen | D-1-I:
Ich kann aufgrund der Unterschiede der verschiedenen Marktteilnehmer und deren Angeboten, passende Lösungsoptionen zusammenstellen | D-1-A:
Ich kann die Optionen auf dem Markt zusammenstellen und aufgrund deren Unterschiede, Optimierungen oder Alternativen aufzeigen | +| **E** - Betriebsarchitektur konzipieren | 3 | E-1-B:
Ich kann eine einfache Betriebsarchitektur entwickeln, die den Anforderungen genügt und die Schutzziele einhält | E-1-I:
Ich kann eine Betriebsarchitektur entwickeln, die den Anforderungen genügt, die Schutzziele einhält und einfach wartbar ist | E-1-A:
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:
Ich kann eine vorgegebene Applikation mittels vorgefertigten Scripts oder Rezepten in der Cloud in Betrieb nehmen | F-1-I:
Ich kann eine vorgegebene Applikation mittels selber erweiterten Scripts oder Rezepten, individualisiert in der Cloud in Betrieb nehmen | F-1-A:
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:
Ich kann einfache Default-Policies anwenden, um die Sicherheit zu gewährleisten | G-1-I:
Ich kann eigene Policies implementieren, um die Sicherheit zu erhöhen | G-1-A:
Ich kann mit eigenen Policies und zusäztlichem Hardening die Sicherheit maximieren | +| **H** - Datensicherheit implementieren | 3, 4 | H-1-B:
Ich kann einfache Backup-Massnahmen anwenden | H-1-I:
Ich kann einfache Backup-Massnahmen anwenden und mittels Restores das System wiederherstellen | H-1-A:
Ich kann eigene Backup-Lösungen implementieren  und mittels gezielten Restores Teile des Systems wiederherstellen | +| **I** - System testen | 3, 4 | I-1-B:
Ich kann einen Funktions- und Lasttest auf dem System durchführen | I-1-I:
Ich kann einen Funktionstest durchführen und mit einem Lasttest und gezielten Analysen die Schwächen des Systems eruieren | I-1-A:
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:
Ich kann mit einfachen Mitteln den Zustand des Systems überwachen | J-1-I:
Ich kann den Zustand des Systems überwachen und mich mittels Benachrichtigungen über Probleme informieren lassen | J-1-A:
Ich kann den Zustand des Systems überwachen und für allfällige Probleme entsprechende Massnahmen formulieren | +| **K** - System skalieren | 3, 4 | K-1-B:
Ich kann durch hinzufügen von Ressourcen oder Speicher das System vertikal hochskalieren | K-1-I:
Ich kann das System vertikal skalieren und auf seine horizontale Skalierbarkeit beurteilen | K-1-A:
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) diff --git a/PublicKey/346.pub b/PublicKey/346.pub new file mode 100644 index 0000000..71b3dbf --- /dev/null +++ b/PublicKey/346.pub @@ -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 ---- + diff --git a/README.md b/README.md new file mode 100644 index 0000000..5407b9c --- /dev/null +++ b/README.md @@ -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. diff --git a/x_gitres/M346-Verbindung_von_den_Kompetenznachweisen__KN__zur_Kompetenzmatrix.png b/x_gitres/M346-Verbindung_von_den_Kompetenznachweisen__KN__zur_Kompetenzmatrix.png new file mode 100644 index 0000000..4754630 Binary files /dev/null and b/x_gitres/M346-Verbindung_von_den_Kompetenznachweisen__KN__zur_Kompetenzmatrix.png differ diff --git a/x_gitres/overview.png b/x_gitres/overview.png new file mode 100644 index 0000000..0f18baf Binary files /dev/null and b/x_gitres/overview.png differ diff --git a/x_gitres/tbz_logo.png b/x_gitres/tbz_logo.png new file mode 100644 index 0000000..af0778e Binary files /dev/null and b/x_gitres/tbz_logo.png differ diff --git a/x_gitres/yaml.png b/x_gitres/yaml.png new file mode 100644 index 0000000..cc47ecd Binary files /dev/null and b/x_gitres/yaml.png differ