Cloud
Düsseldorf 12.09.2024
Cloud Meetup bei Vibe Group
Vladimir Dobriakov
infrastructure-as-code.de
- Wann ist Cloud sinnvoll? (15 Min.)
- Cloud und DSGVO (10 Min.)
- Vendor Lock-in und Exit-Strategie (15 Min.)
Wann ist Cloud sinnvoll?
(15 Min.)
graph TD
S[**SaaS** - Software as a Service] --> P[**PaaS** - Platform as a Service]
P--> I[**IaaS** - Infrastructure as a Service]
%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '16px'}}}%%
graph TD
S[**SaaS** - Software as a Service] --> P["**PaaS** - Platform as a Service
(managed RDBMS, container srvc,
Monitoring, Logging)"]
P--> I["**IaaS** - Computing, Storage, Netze
AWS EC2, S3, VPC (SDN)
EC2 vs. VMware vs. KVM"]
I--> H["Hardware
(Servers, NVMe, Routers)"]
H--> R["Rechenzentrum
(Zutritt, USV, Brandschutz, Racks)"]
Checkliste für Abwägung
- kann ich meine Workloads planen oder brauche ich eine plötzliche Skalierung?
- brauche ich schnelles Time-to-Market?
- habe ich wenige Anwendungen, dafür aber mit hohen Hardware-Anforderungen?
- oder brauche ich wenig Rechenleistung, dafür aber komplexe Anwendungslandschaft?
- habe ich Kompetenz für einzelne Schichten im Hause? z.B. sollen die Entwickler k8s lediglich nutzen oder kann ich es auch installieren/updaten?
- habe ich sowieso schon ein Team, was 24x7 die Anwendungen betreut?
Wann ist Cloud sinnvoll
Fragen ?
Cloud
Datenschutz
(10 Min.)
DSGVO, Speicherung der Daten in Europa, speziell für Versicherungen, Medizin und Banken
GDPR/DSGVO
- rechtlich Grundlage
(Einwilligung / Vertragserfüllung / berechtigtes Interesse) - Einwilligung
- Datenminimierung
- Rechte der Betroffenen (Auskunft / Berichtigung / Löschung)
Relevant für Hosting
- Auftragsdatenverarbeitung
- Übertragung persönlicher Daten außerhalb der EU
- Meldung von Datenschutzverletzungen
- technischen Maßnahmen zum Schutz der Daten
Technische Maßnahmen
- physikalische Sicherheit und Zutrittskontrolle
- network intrusion detection
- Datenverschlüsselung (at-rest, in-transit, mit eigenem
Schlüsselmanagement oder ausgelagert)
- patch management, zero day attacks, SSH Heartbleed; vergleiche AWS Systems Manager
Formale Kriterien - Compliance, Audits, Zertifizierungen
Provider Unterschiede
- AWS - secure by default
- Azure - works by default
Provider-Vergleich/Bewertung
- wie ist die Security Track Record?
- Zertifizierungen/Audits
Vendor Lock-in
EXIT-Strategie
(15 Min.)
%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '16px'}}}%%
graph TD
S[**SaaS** - Software as a Service] --> P["**PaaS** - Platform as a Service
(managed RDBMS, container srvc,
Monitoring, Logging)"]
P--> I["**IaaS** - Computing, Storage, Netze
AWS EC2, S3, VPC (SDN)
EC2 vs. VMware vs. KVM"]
Checkliste
- will ich überhaupt Vendor Lock-in vermeiden oder möchte ich gerade die
spezifischen Services nutzen?
- nur IaaS oder eine limitierte Liste der managed PaaS Services auswählen - Cloud Governance
- Infrastructure-as-code für ausführbare Dokumentation und ein nachvollziehbares Setup - erleichtert den Umzug
Infrastructure-as-Code
Terraform / ansible / AWS CloudFormation templates
resource "aws_vpc" "main" { # Create a VPC
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "main" { # Create a Subnet
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-west-2a"
}
resource "aws_security_group" "allow_ssh" { # Create a Security Group
vpc_id = aws_vpc.main.id
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "example" { # Create an EC2 Instance
ami = "ami-0c55b159cbfafe1f0" # TODO valid AMI ID for your region
instance_type = "t2.micro"
subnet_id = aws_subnet.main.id
vpc_security_group_ids = [aws_security_group.allow_ssh.id]
tags = {
Name = "example-instance"
}
}
resource "hcloud_network" "hc_private" {
name = "hc_private"
ip_range = var.ip_range
}
resource "hcloud_server_network" "web_network" {
count = var.instances
server_id = hcloud_server.web[count.index].id
subnet_id = hcloud_network_subnet.hc_private_subnet.id
}
resource "hcloud_network_subnet" "hc_private_subnet" {
network_id = hcloud_network.hc_private.id
type = "cloud"
network_zone = "eu-central"
ip_range = var.ip_range
}
resource "hcloud_server" "web" {
count = var.instances
name = "web-server-${count.index}"
image = var.os_type
server_type = var.server_type
location = var.location
ssh_keys = [hcloud_ssh_key.default.id]
labels = {
type = "web"
}
user_data = file("user_data.yml")
}