Dieses Repository stellt eine provider-native Terraform-Referenz fuer Replatforming nach STACKIT Cloud Foundry bereit.
Der Stack umfasst:
- SCF-Organisation und technischer Org-Manager via STACKIT Provider
- Spring-Music-App auf Cloud Foundry
- Redis und RabbitMQ als echte Cloud Foundry Marketplace Managed Services
- App Autoscaler als Cloud Foundry Marketplace Managed Service
- Cloud Foundry Service-Instanzen direkt per Offering/Plan
- Observability-Instanz auf STACKIT
cp env.tfvars.example terraform.tfvars- Werte in
terraform.tfvarsanpassen terraform initterraform planterraform apply
- Terraform >= 1.5
- Zugriff auf ein STACKIT Projekt mit SCF/Marketplace/Observability Berechtigung
- Provider-Authentifizierung fuer
stackitcloud/stackitueber Umgebungsvariablen oder Service Account Key - Erreichbarkeit der Cloud Foundry API fuer das Zielprojekt
- SCF-Bootstrap folgt dem offiziellen Pattern:
stackit_scf_organizationdata.stackit_scf_platformstackit_scf_organization_managerprovider "cloudfoundry"wird mit diesen Outputs konfiguriert
- Redis/RabbitMQ werden als CF Managed Services direkt aus dem Marketplace erstellt.
- App Autoscaler wird als CF Managed Service direkt aus dem Marketplace erstellt.
- Die Plan-ID wird ueber
data.cloudfoundry_service_planaus Offering- und Plan-Namen aufgeloest. - App-Credentials werden ueber standardmaessige Service-Bindings in
VCAP_SERVICESinjiziert. - Die Route wird ueber die gemeinsame Domain
cf_domainerstellt.
setup_observability: Observability-Instanz erstellensetup_database: Redis und RabbitMQ als CF Marketplace-Service-Instanzen erstellensetup_autoscaler: App-Autoscaler als CF Marketplace-Service-Instanz erstellensetup_workload: Spring-Music-App und Route deployensetup_cf_service_bindingsist standardmaessigtrue, damit VCAP_SERVICES fuer die App gesetzt wirdprovision_observability_dashboard: erstellt ein vorkonfiguriertes Grafana-Dashboard fuer den CF-Use-Case
Das Beispiel nutzt folgende in der Ziel-Foundation verfuegbare Defaults:
- Redis: Offering
appcloud-redis7 - RabbitMQ: Offering
appcloud-rabbitmq40 - Autoscaler: Offering
autoscaler, Planautoscaler-free-plan
Planstrategie (bewusst statt zufaellig):
deployment_environment = "dev"oder"demo": Default auf Single-Plans- Redis:
redis-1.4.10-single - RabbitMQ:
rabbitmq-2.4.10-single
- Redis:
deployment_environment = "prod": Default auf Replica-Plans- Redis:
redis-2.8.10-replica - RabbitMQ:
rabbitmq-2.4.10-replica
- Redis:
Wenn eure Foundation andere Plan-Namen verwendet, passe in terraform.tfvars nur
cf_redis_service_offering_name, cf_redis_service_plan_name,
cf_rabbitmq_service_offering_name und cf_rabbitmq_service_plan_name an.
Hinweis: Setze cf_redis_service_plan_name und cf_rabbitmq_service_plan_name nur dann explizit, wenn du die environment-basierten Defaults ueberschreiben willst.
- Wenn
admin_emaildem technischen SCF-Org-Manager entspricht, wird die zusaetzliche CF-Rolleorganization_managernicht erneut erstellt. - Damit werden Konflikte wie "already has organization_manager" vermieden.
spring_music_app_name: Name der CF-Appspring_music_route: Oeffentliche App-URL (direkt testbar)scf_org_nameundcf_space_name: CF-Kontext fuer Login und Troubleshootingcf_api_url: CF-API-Endpunkt fuercf loginobservability_dashboard_urlundobservability_grafana_url: direkte Links ins Monitoringautoscaler_instance_id: GUID der CF-Autoscaler-Service-Instanzautoscaler_enabled: zeigt, ob der Autoscaler-Service in diesem Deployment aktiviert istautoscaler_policy_thresholds: dokumentierte Ziel-Schwellenwerte fuer Scale-up/Scale-downloadgen_configuration: Metadaten zum Lastgenerator-Setup fuer reproduzierbare Validierung- zusaetzlich weiterhin IDs fuer Automatisierung (
project_id,scf_org_id,cf_space_id, Service-IDs)
Die Installation des Autoscaler-Marketplace-Service ist vollstaendig Terraform-basiert.
Die konkrete Autoscaling-Policy (Rules wie CPU/throughput thresholds) kann mit den aktuell verfuegbaren Terraform-Resources des Providers cloudfoundry/cloudfoundry nicht als eigene Resource modelliert werden (im Schema sind u. a. cloudfoundry_service_instance vorhanden, aber keine cloudfoundry_autoscaling_policy-Resource).
Falls wir die Policy trotzdem automatisiert setzen sollen, gibt es zwei Optionen:
- CLI/API-Post-Step (z. B.
cf attach-autoscaling-policy) als explizit freigegebene Ausnahme. - Warten auf/Beitrag zu nativer Provider-Unterstuetzung fuer Autoscaler-Policies.
Ohne deine Freigabe bauen wir keinen CLI-Workaround in den Standard-Apply ein.
terraform destroy
Hinweis: Beim Destroy werden zuerst App und CF-Ressourcen entfernt, danach die zugrundeliegenden Managed Services.