Verwendete Mittel
Folgende Mittel sind für die Implementation in dieser Umsetzung zum Einsatz gekommen:
- cloudflare
- Github Actions
- Tincloud Infrastructure Repository
- development-environment Repository
- quartz v4 template
Ziele
Folgende Ziele müssen erfüllt werden:
- Soll allgemeine DNS Einstellungen für Cloudflare verwalten
- Soll die Pages Infrastruktur für die Dokumentation bereitstellen
Umsetzung
Zur Umsetzung dieser Ziele wird mit Terraform die Bereitstellung der Cloudflare Pages Umgebung, sowie sämtliche Einstellungen gewährleistet. Anschliessend wird über das development-environment Repository bei jedem Push auf den Main Branch wird ein neuer Build mit meiner Markdown Dokumentation erzeugt und als diese Webseite auf Cloudflare Pages veröffentlicht. Für die Build Steps kommt Github Actions zum Zug.
---
title:
---
flowchart LR
push["Push Main"]
subgraph Github Action
build["Build"]
publish["Publish"]
build --> publish
end
subgraph cloudflare["Cloudflare Pages"]
doku["Semesterarbeit"]
DNS["DNS Records"]
end
tf["Terraform"]
push --> build
publish --> doku
tf -- apply --> cloudflare
Anhand der Abbildung soll vereinfacht der Ablauf der Prozesse dargestellt sein. Diese Art der Arbeit ermöglicht die Ansicht des Endprodukts innerhalb einer Minute nach einem Push auf den Main Branch auf Github.
Terraform
Die Terraform Konfiguration erstellt wenige Resourcen um die Cloudflare Pages Umgebung bereitzustellen. Eine einfache Cloudflare Pages Umgebung beinhalten folgende Cloudflare Produkte oder Features:
- Ein Cloudflare Pages Projekt
- Cloudflare Pages Domain
- CNAME Record zur Pages Domain
Pages Projekt
Mit nur 2 Resourcen hat man bereits eine einfache Cloudflare Pages Umgebung geschaffen. Ein Cloudflare Pages Projekt mitsamt der Domäne benötigt:
- Die Account ID der das Projekt zugewiesen wird
- einen Namen für das Projekt
- Einen Domänennamen
resource "cloudflare_pages_project" "development-environment" {
account_id = var.account_id
name = "development-environment"
production_branch = "main"
}
resource "cloudflare_pages_domain" "docs_dev-env" {
account_id = var.account_id
project_name = cloudflare_pages_project.development-environment.name
domain = "docs.dev-env.tincloud.tech"
}
DNS Records
Um DNS Records mit Cloudflare erstellen zu können, kann die cloudflare_record verwendet werden. Um mehrere Records erstellen zu können, kann über eine map von records iteriert werden.
In diesem Beispiel wird der CNAME Record für die Domäne auf die veröffentlichte Domäne des Cloudflare Pages Projekts.
resource "cloudflare_record" "docs_dev-env" {
zone_id = cloudflare_zone.tincloud_tech.id
name = cloudflare_pages_domain.docs_dev-env.domain
value = cloudflare_pages_project.development-environment.subdomain
type = "CNAME"
ttl = 1
proxied = true
}Einsatz
Im tincloud Infrastructure Repository kann im Ordner global/shared das main.tf initialisiert werden.
# global/shared
cd global/shared
terraform init -backend-config backend.hclPasse das .tfvars-file an und übergib es an terraform für plan oder apply
terraform plan -var-file prod.tfvars
terraform apply -var-file prod.tfvarsResourcen
Folgende Resourcen sind zur Umsetzung eingesetzt worden: