SlideShare ist ein Scribd-Unternehmen logo
Production-Ready Infrastruktur
in 3 Wochen
André Goliath
Was mache ich eigentlich hier?
Seit ca. 13 Jahren “entwickelnder Architekt”
… ursprünglich mal ECMAScript (4)-Jünger…
… dann auf die dunkle Seite konvertiert (JEE)
… dann kam Spring Boot…
… und jetzt AWS…
Warum ist AWS eigentlich so schwierig?
Wer von euch hat wirklich Ahnung
von DNS, Load Balancern, Firewalls, Netzwerktopologien,…?
Warum ist AWS eigentlich so schwierig?
Wir starten auf der komplett grünen Wiese,
vielleicht zum ersten Mal in unserem Leben
Ich liebe Infrastruktur!
Aber wie mappe ich meine Erfahrungen
mit klassischer Infrastruktur auf AWS?
Und was muss alles getan werden,
damit wir möglichst bald mit der Fachlichkeit anfangen können?
Und was brauchen wir überhaupt von AWS?
Welche Anforderungen haben wir an unsere Architektur?
Welche Anforderungen haben wir an unsere Architektur?
Security-by-default
Welche Konsequenzen
haben die Aktionen von
unerfahrenen Entwicklern?
Welche Anforderungen haben wir an unsere Architektur?
Monitoring, Logging und hohe Dev Exp. von Anfang an
Nie wieder „öhhh da muss ich
erstmal nachgucken wie man das
nochmal macht..“
Welche Anforderungen haben wir an unsere Architektur?
Nur so komplex wie unbedingt nötig
Wie lange brauche ich, um einen
neuen Entwickler zu erklären wie
unser Setup funktioniert?
Wieviel Aufwand ist das initiale
Setup?
Welche Schritte sind notwendig,
um neue Clients oder APIs
onzuboarden?
Welche Anforderungen haben wir an unsere Architektur?
100% über versionierten Quelltext verwaltet
Wissen wir in 5 Jahren noch
exakt, was auf unseren
Blechen installiert ist?
Security-by-default
Nur so komplex wie
unbedingt nötig
Monitoring, Logging
und hohe Dev Experience
von Anfang an
100% über versionierten
Quelltext verwaltet
Part 1: Account- und User-Struktur
AWS Organization "meinProjekt"
Account "root"
Account
"security"
Account
"collab"
Account
"cicd"
Account
"qa"
Account
"stage"
Account
"prod"
Account
"spielwiese"
Reza
Philipp
André
dev
dev&qa-write
qa-full-access & stage-read & prod-read
Part 2: Wie war das mit der Developer Experience?
Wir haben schnell gemerkt, dass wir
entweder Shortcuts gehen müssen oder
noch lange mit dem Setup beschäftigt sein werden
Enter gruntwork.io
- Open-Source Tooling
- Infrastructure as Code Bibliothek
- Referenzarchitektur
- Viel Trainingsmaterial (Videos und Blogs)
- Support und hoher Reifegrad
- Subscription kostet 700 USD/Monat für AWS
Terragrunt
https://terragrunt.gruntwork.io/
└── live
├── prod
│ ├── app
│ │ └── main.tf
│ ├── mysql
│ │ └── main.tf
│ └── dns
│ └── main.tf
├── qa
│ ├── app
│ │ └── main.tf
│ ├── mysql
│ │ └── main.tf
│ └── dns
│ └── main.tf
└── stage
├── app
│ └── main.tf
├── mysql
│ └── main.tf
└── dns
└── main.tf
Eine klassische Terraform Struktur
Eine klassische Terragrunt Struktur
└── modules
├── app
│ └── main.tf
│ └── variables.tf
│ └── outputs.tf
├── mysql
│ └── main.tf
│ └── variables.tf
│ └── outputs.tf
└── dns
└── main.tf
└── variables.tf
└── outputs.tf
└── live
├── prod
│ ├── app
│ │ └── terragrunt.hcl
│ ├── mysql
│ │ └── terragrunt.hcl
│ └── dns
│ │ └── terragrunt.hcl
│ └── terragrunt.hcl
├── qa
│ ├── app
│ │ └── terragrunt.hcl
│ ├── mysql
│ │ └── terragrunt.hcl
│ └── dns
│ └── terragrunt.hcl
└── stage
├── app
│ └── …
…
└── live
├── prod
│ ├── app
│ │ └── terragrunt.hcl
│ ├── mysql
│ │ └── terragrunt.hcl
│ └── dns
│ │ └── terragrunt.hcl
│ └── terragrunt.hcl
├── qa
│ ├── app
│ │ └── terragrunt.hcl
│ ├── mysql
│ │ └── terragrunt.hcl
│ └── dns
│ └── terragrunt.hcl
└── stage
├── app
│ └── …
…
Die “root” terragrunt.hcl eines Accounts
# Configure Terragrunt to automatically store tfstate files in an S3 bucket
remote_state {
backend = "s3"
config = {
encrypt = true
bucket = "acme-multi-account-dev-terraform-state"
key = "${path_relative_to_include()}/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-locks"
}
}
# „environment-global“ variables
inputs = merge(
yamldecode(
file("${get_terragrunt_dir()}/${find_in_parent_folders("region.yaml",
"${path_relative.. ),
yamldecode(
file("${get_terragrunt_dir()}/${find_in_parent_folders("env.yaml",
"${path_relat…")}"),
),
# Additional global inputs to pass to all modules called in this directory tree.
{
aws_account_id = "123345345456"
terraform_state_s3_bucket = "acme-multi-account-prod-terraform-state"
terraform_state_aws_region = "us-east-1"
},
)
└── live
├── prod
│ ├── app
│ │ └── terragrunt.hcl
│ ├── mysql
│ │ └── terragrunt.hcl
│ └── dns
│ │ └── terragrunt.hcl
│ └── terragrunt.hcl
├── qa
│ ├── app
│ │ └── terragrunt.hcl
│ ├── mysql
│ │ └── terragrunt.hcl
│ └── dns
│ └── terragrunt.hcl
└── stage
├── app
│ └── …
…
Eine “Modul” terragrunt.hcl eines Accounts
terraform {
#git
source = "git::ssh://git@github.com/…/modules.git//networking/dns/a?ref=898…"
}
include {
path = find_in_parent_folders()
}
dependency "app" {
config_path = "../app"
}
inputs = {
…
domain_to_ip_list = {
"appname": {
domain: dependency.app.appname,
ip: dependency.app.elasticip.ip
},
"app2": {
domain:"app2",
ip:"12.123.123.12"
}
}
ttl = 600
}
Gruntworks.io Referenzarchitektur
https://blog.gruntwork.io/
how-to-build-an-end-to-end-production-grade-architecture-
on-aws-part-1-eae8eeb41fec
In folgenden Punkten weichen wir bewusst von der
Multi-Account Referenzarchitektur ab
- Geringfügig angepasste Account-Struktur
- Wir verwenden gitlab und perspektivisch Spinnaker statt Jenkins
- Nur ein VPN von welchem alle anderen Accounts erreicht werden können
- Wir erweitern die Architektur um API und Access Management
Gruntworks.io Infrastructure-as-Code Library
Key Takeaways
Du musst nicht alles vergessen, was du über Infrastruktur weißt,
wenn du mit AWS anfängst.
Ganz im Gegenteil, die Basics im Bereich Netzwerk sind unerlässlich,
um sich schnell in AWS zurecht zu finden.
Mach es von Anfang an richtig.
Du musst das Rad nicht neu erfinden.
Jemand anders hatte bereits das gleiche Problem wie du.
Tschö!
André Goliath
andre.goliath@senacor.de
https://www.slideshare.net/andregoliath
https://blog.senacor.com/author/andre/

Weitere ähnliche Inhalte

Was ist angesagt?

Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
Jan Gehring
 
Cloud Provisioning mit Juju
Cloud Provisioning mit JujuCloud Provisioning mit Juju
Cloud Provisioning mit Juju
Frank Müller
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
Sebastian Springer
 
node.js
node.jsnode.js
Webapplikationen mit Node.js
Webapplikationen mit Node.jsWebapplikationen mit Node.js
Webapplikationen mit Node.js
Sebastian Springer
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
Sebastian Springer
 
Einführung in Laravel und GulpJS
Einführung in Laravel und GulpJSEinführung in Laravel und GulpJS
Einführung in Laravel und GulpJS
thespazecookie
 
IT Automatisierung mit Salt Stack | Thorsten Kramm @ FrosCon 2014
IT Automatisierung mit Salt Stack | Thorsten Kramm @ FrosCon 2014IT Automatisierung mit Salt Stack | Thorsten Kramm @ FrosCon 2014
IT Automatisierung mit Salt Stack | Thorsten Kramm @ FrosCon 2014
thorstenkramm
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
Frank Müller
 
JsUnconf 2014
JsUnconf 2014JsUnconf 2014
JsUnconf 2014
emrox
 

Was ist angesagt? (11)

Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 
Cloud Provisioning mit Juju
Cloud Provisioning mit JujuCloud Provisioning mit Juju
Cloud Provisioning mit Juju
 
Nginx
NginxNginx
Nginx
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
node.js
node.jsnode.js
node.js
 
Webapplikationen mit Node.js
Webapplikationen mit Node.jsWebapplikationen mit Node.js
Webapplikationen mit Node.js
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
Einführung in Laravel und GulpJS
Einführung in Laravel und GulpJSEinführung in Laravel und GulpJS
Einführung in Laravel und GulpJS
 
IT Automatisierung mit Salt Stack | Thorsten Kramm @ FrosCon 2014
IT Automatisierung mit Salt Stack | Thorsten Kramm @ FrosCon 2014IT Automatisierung mit Salt Stack | Thorsten Kramm @ FrosCon 2014
IT Automatisierung mit Salt Stack | Thorsten Kramm @ FrosCon 2014
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
JsUnconf 2014
JsUnconf 2014JsUnconf 2014
JsUnconf 2014
 

Ähnlich wie Production-ready Infrastruktur in 3 Wochen

Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
Jens Siebert
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit Rust
Jens Siebert
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
OPEN KNOWLEDGE GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
Josef Adersberger
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
QAware GmbH
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
OPEN KNOWLEDGE GmbH
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
gedoplan
 
Infrastructure as Code mit Terraform
Infrastructure as Code mit TerraformInfrastructure as Code mit Terraform
Infrastructure as Code mit Terraform
Harald Schmaldienst
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
remigius-stalder
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
codepitbull
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
Sebastian Springer
 
Chaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps TeamsChaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps Teams
Ramon Anger
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
OPITZ CONSULTING Deutschland
 
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickBig Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Karin Patenge
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
OPITZ CONSULTING Deutschland
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
gedoplan
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Gregor Biswanger
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
OPEN KNOWLEDGE GmbH
 

Ähnlich wie Production-ready Infrastruktur in 3 Wochen (20)

Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit Rust
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Infrastructure as Code mit Terraform
Infrastructure as Code mit TerraformInfrastructure as Code mit Terraform
Infrastructure as Code mit Terraform
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
 
Chaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps TeamsChaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps Teams
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im ÜberblickBig Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
Big Data Community Webinar vom 16. Mai 2019: Oracle NoSQL DB im Überblick
 
Node.js für Webapplikationen
Node.js für WebapplikationenNode.js für Webapplikationen
Node.js für Webapplikationen
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
 

Production-ready Infrastruktur in 3 Wochen

  • 1. Production-Ready Infrastruktur in 3 Wochen André Goliath
  • 2. Was mache ich eigentlich hier? Seit ca. 13 Jahren “entwickelnder Architekt” … ursprünglich mal ECMAScript (4)-Jünger… … dann auf die dunkle Seite konvertiert (JEE) … dann kam Spring Boot… … und jetzt AWS…
  • 3.
  • 4.
  • 5. Warum ist AWS eigentlich so schwierig? Wer von euch hat wirklich Ahnung von DNS, Load Balancern, Firewalls, Netzwerktopologien,…?
  • 6. Warum ist AWS eigentlich so schwierig? Wir starten auf der komplett grünen Wiese, vielleicht zum ersten Mal in unserem Leben
  • 8. Aber wie mappe ich meine Erfahrungen mit klassischer Infrastruktur auf AWS?
  • 9. Und was muss alles getan werden, damit wir möglichst bald mit der Fachlichkeit anfangen können?
  • 10. Und was brauchen wir überhaupt von AWS?
  • 11.
  • 12. Welche Anforderungen haben wir an unsere Architektur?
  • 13. Welche Anforderungen haben wir an unsere Architektur? Security-by-default Welche Konsequenzen haben die Aktionen von unerfahrenen Entwicklern?
  • 14. Welche Anforderungen haben wir an unsere Architektur? Monitoring, Logging und hohe Dev Exp. von Anfang an Nie wieder „öhhh da muss ich erstmal nachgucken wie man das nochmal macht..“
  • 15. Welche Anforderungen haben wir an unsere Architektur? Nur so komplex wie unbedingt nötig Wie lange brauche ich, um einen neuen Entwickler zu erklären wie unser Setup funktioniert? Wieviel Aufwand ist das initiale Setup? Welche Schritte sind notwendig, um neue Clients oder APIs onzuboarden?
  • 16. Welche Anforderungen haben wir an unsere Architektur? 100% über versionierten Quelltext verwaltet Wissen wir in 5 Jahren noch exakt, was auf unseren Blechen installiert ist?
  • 17. Security-by-default Nur so komplex wie unbedingt nötig Monitoring, Logging und hohe Dev Experience von Anfang an 100% über versionierten Quelltext verwaltet
  • 18. Part 1: Account- und User-Struktur
  • 19. AWS Organization "meinProjekt" Account "root" Account "security" Account "collab" Account "cicd" Account "qa" Account "stage" Account "prod" Account "spielwiese" Reza Philipp André dev dev&qa-write qa-full-access & stage-read & prod-read
  • 20. Part 2: Wie war das mit der Developer Experience?
  • 21. Wir haben schnell gemerkt, dass wir entweder Shortcuts gehen müssen oder noch lange mit dem Setup beschäftigt sein werden
  • 22. Enter gruntwork.io - Open-Source Tooling - Infrastructure as Code Bibliothek - Referenzarchitektur - Viel Trainingsmaterial (Videos und Blogs) - Support und hoher Reifegrad - Subscription kostet 700 USD/Monat für AWS
  • 24. └── live ├── prod │ ├── app │ │ └── main.tf │ ├── mysql │ │ └── main.tf │ └── dns │ └── main.tf ├── qa │ ├── app │ │ └── main.tf │ ├── mysql │ │ └── main.tf │ └── dns │ └── main.tf └── stage ├── app │ └── main.tf ├── mysql │ └── main.tf └── dns └── main.tf Eine klassische Terraform Struktur
  • 25. Eine klassische Terragrunt Struktur └── modules ├── app │ └── main.tf │ └── variables.tf │ └── outputs.tf ├── mysql │ └── main.tf │ └── variables.tf │ └── outputs.tf └── dns └── main.tf └── variables.tf └── outputs.tf └── live ├── prod │ ├── app │ │ └── terragrunt.hcl │ ├── mysql │ │ └── terragrunt.hcl │ └── dns │ │ └── terragrunt.hcl │ └── terragrunt.hcl ├── qa │ ├── app │ │ └── terragrunt.hcl │ ├── mysql │ │ └── terragrunt.hcl │ └── dns │ └── terragrunt.hcl └── stage ├── app │ └── … …
  • 26. └── live ├── prod │ ├── app │ │ └── terragrunt.hcl │ ├── mysql │ │ └── terragrunt.hcl │ └── dns │ │ └── terragrunt.hcl │ └── terragrunt.hcl ├── qa │ ├── app │ │ └── terragrunt.hcl │ ├── mysql │ │ └── terragrunt.hcl │ └── dns │ └── terragrunt.hcl └── stage ├── app │ └── … … Die “root” terragrunt.hcl eines Accounts # Configure Terragrunt to automatically store tfstate files in an S3 bucket remote_state { backend = "s3" config = { encrypt = true bucket = "acme-multi-account-dev-terraform-state" key = "${path_relative_to_include()}/terraform.tfstate" region = "us-east-1" dynamodb_table = "terraform-locks" } } # „environment-global“ variables inputs = merge( yamldecode( file("${get_terragrunt_dir()}/${find_in_parent_folders("region.yaml", "${path_relative.. ), yamldecode( file("${get_terragrunt_dir()}/${find_in_parent_folders("env.yaml", "${path_relat…")}"), ), # Additional global inputs to pass to all modules called in this directory tree. { aws_account_id = "123345345456" terraform_state_s3_bucket = "acme-multi-account-prod-terraform-state" terraform_state_aws_region = "us-east-1" }, )
  • 27. └── live ├── prod │ ├── app │ │ └── terragrunt.hcl │ ├── mysql │ │ └── terragrunt.hcl │ └── dns │ │ └── terragrunt.hcl │ └── terragrunt.hcl ├── qa │ ├── app │ │ └── terragrunt.hcl │ ├── mysql │ │ └── terragrunt.hcl │ └── dns │ └── terragrunt.hcl └── stage ├── app │ └── … … Eine “Modul” terragrunt.hcl eines Accounts terraform { #git source = "git::ssh://git@github.com/…/modules.git//networking/dns/a?ref=898…" } include { path = find_in_parent_folders() } dependency "app" { config_path = "../app" } inputs = { … domain_to_ip_list = { "appname": { domain: dependency.app.appname, ip: dependency.app.elasticip.ip }, "app2": { domain:"app2", ip:"12.123.123.12" } } ttl = 600 }
  • 29.
  • 30. In folgenden Punkten weichen wir bewusst von der Multi-Account Referenzarchitektur ab - Geringfügig angepasste Account-Struktur - Wir verwenden gitlab und perspektivisch Spinnaker statt Jenkins - Nur ein VPN von welchem alle anderen Accounts erreicht werden können - Wir erweitern die Architektur um API und Access Management
  • 33. Du musst nicht alles vergessen, was du über Infrastruktur weißt, wenn du mit AWS anfängst. Ganz im Gegenteil, die Basics im Bereich Netzwerk sind unerlässlich, um sich schnell in AWS zurecht zu finden. Mach es von Anfang an richtig. Du musst das Rad nicht neu erfinden. Jemand anders hatte bereits das gleiche Problem wie du.