GOOGLE CLOUD FUNCTIONS → STACKIT · GIDS
Google Cloud Functions naar STACKIT
STACKIT kent geen algemeen beschikbare function-as-a-service, dus een function wordt een app: een Cloud Foundry-app of een container op SKE. De code en de runtime verhuizen; de trigger niet, want een event uit Pub/Sub of Cloud Storage moet worden herschreven als consumer van de gemigreerde messaging- of opslagdienst. StackToIT deelt een function in als CONTAINERIZE en schrijft het platform eromheen.
De migratie, stap voor stap
De stappen volgen de eenheden van de voorbeeldrun, in de volgorde van de golven.
Maak een lijst van functions per generatie en trigger
Google documenteert twee generaties van Cloud Functions; de tweede generatie wordt beschreven in de Cloud Run-documentatie. Noteer per function de trigger (HTTP, Pub/Sub, storage-event, schema), runtime, geheugen, timeout, instancelimieten, ingress-instelling, service account en secrets.
Kies het doelplatform
Een Cloud Foundry-app past bij code die u met een buildpack pusht; een container op SKE past bij een function die al als image wordt geleverd of naast andere workloads moet staan. De run stelt voor de function Cloud Foundry voor en voor het schema SKE; consolideren op één platform is uw keuze.
Verplaats eerst de fundamenten
Service account, bronbucket en topic staan in golf 1 van de run; het secret volgt in golf 2. Het service account wordt een STACKIT-service account, de bucket een STACKIT Object Storage-bucket en het secret een sleutel in Secrets Manager.
Herschrijf de trigger
Het topic wordt een RabbitMQ-exchange en de subscription een queue. De code van de function stapt over van het Pub/Sub-event naar een AMQP-consumer, met bewust ingesteld bevestigings- en retrygedrag.
Push de app
Schrijf het manifest op basis van de lijst met niet overgenomen eigenschappen van de run. Voor het voorbeeld betekent dat de appnaam send-receipt, 256 MB geheugen, hoogstens 5 instances, de variabele MAIL_FROM en het secret MAIL_API_KEY; de timeout van 60 seconden van de function vergt een eigen beslissing. Push de app naar een space van de organization uit het concept.
Maak het schema opnieuw aan
Schrijf de CronJob, of een Cloud Foundry-task, die het nieuwe endpoint op het oude schema aanroept. Het endpointadres verandert, dus het doel van het schema verandert mee.
Test, cutover, bewaar de oude function
Publiceer testberichten, vergelijk de uitvoer met de function die nog draait, schakel de publishers over en verwijder de oude function na acceptatie. Dit is algemene praktijk, geen stap die de run uitvoert.
Een function met Pub/Sub-trigger, omgezet
Een omgeving die voor deze pagina is geschreven en op 4 november 2026 door StackToIT is beoordeeld: een function van de tweede generatie met een Pub/Sub-topic als trigger, het service account, een secret, een bronbucket en een nachtelijke Cloud Scheduler-job. Links: de function uit de invoer. Rechts: het blok dat de run ervoor als concept schreef; de reviewcommentaren boven het blok zijn hier weggelaten.
resource "google_cloudfunctions2_function" "receipt" {
name = "send-receipt"
location = "europe-west3"
build_config {
runtime = "python312"
entry_point = "handle_paid_order"
source {
storage_source {
bucket = google_storage_bucket.fn_source.name
object = google_storage_bucket_object.receipt_zip.name
}
}
}
service_config {
available_memory = "256M"
timeout_seconds = 60
max_instance_count = 5
service_account_email = google_service_account.fn.email
ingress_settings = "ALLOW_INTERNAL_ONLY"
environment_variables = {
MAIL_FROM = "orders@example.com"
}
secret_environment_variables {
key = "MAIL_API_KEY"
project_id = "shop-events-prod"
secret = google_secret_manager_secret.mail_key.secret_id
version = "latest"
}
}
event_trigger {
trigger_region = "europe-west3"
event_type = "google.cloud.pubsub.topic.v1.messagePublished"
pubsub_topic = google_pubsub_topic.orders_paid.id
retry_policy = "RETRY_POLICY_RETRY"
}
}resource "stackit_scf_organization" "migrated_apps" {
project_id = var.project_id
name = "migrated-apps"
}Een organization, geen app
Het concept maakt de Cloud Foundry-organization aan die de gemigreerde apps host. De app zelf wordt met een manifest naar een space gepusht, en dat manifest genereert de run niet.
Wat in commentaren staat
Naam, bronlocatie, geheugen, instances, omgeving, secrets en netwerkinstellingen staan vermeld als niet overgenomen, zodat u ze in het manifest kunt kopiëren.
Alleen-interne ingress wordt genoemd
Een Cloud Foundry-app is bereikbaar op zijn route. De run meldt dat alleen-interne ingress niet wordt overgenomen en dat u moet beperken wie de app kan bereiken.
De trigger en het schema
De function draait niet alleen. Het topic en de schedulerjob worden een berichtenbroker en een cronjob, en de run schrijft de platforms die daarvoor nodig zijn als concept. Elk invoerblok staat naast het blok dat de run ervoor schreef; de reviewcommentaren zijn hier weggelaten.
resource "google_pubsub_topic" "orders_paid" {
name = "orders-paid"
}resource "stackit_rabbitmq_instance" "messaging" {
project_id = var.project_id
name = "messaging"
plan_name = var.rabbitmq_plan_name
version = var.rabbitmq_version
parameters = {
sgw_acl = join(",", var.rabbitmq_allowed_cidrs)
}
}resource "google_cloud_scheduler_job" "nightly" {
name = "nightly-digest"
region = "europe-west3"
schedule = "0 3 * * *"
time_zone = "Europe/Berlin"
http_target {
uri = google_cloudfunctions2_function.receipt.service_config[0].uri
http_method = "POST"
}
}resource "stackit_ske_cluster" "containers" {
project_id = var.project_id
name = "containers"
node_pools = [{
name = "workloads"
machine_type = var.containers_machine_type
minimum = var.containers_nodes_min
maximum = var.containers_nodes_max
availability_zones = var.availability_zones
}]
}Van topic naar exchange
Het topic wordt een exchange van een gedeelde RabbitMQ-instance, handmatig aangemaakt in RabbitMQ; subscriptions worden queues.
Van job naar CronJob
De schedulerjob wordt een Kubernetes CronJob op SKE die het nieuwe endpoint van de function op hetzelfde schema aanroept, 0 3 * * * in Europe/Berlin. Het manifest wordt niet gegenereerd: naam, HTTP-methode, body, headers, deadline en retrybeleid schrijft u handmatig in.
Hoe de function-omgeving wordt gekoppeld
Eén rij per eenheid van de run: acht resources gescand, zes migratie-eenheden.
| Google Cloud-resource | STACKIT-doel in de run | Migratieklasse |
|---|---|---|
| Cloud Functions-function (2e gen.) | STACKIT Cloud Foundry-app | Containerisatie |
| Cloud Scheduler-job | Kubernetes CronJob op SKE, of de taskscheduler van Cloud Foundry | Containerisatie |
| Pub/Sub-topic | Exchange van een STACKIT RabbitMQ-instance | Replatforming |
| Service account | STACKIT-service account | Herconfiguratie |
| Secret Manager-secret | Sleutel in STACKIT Secrets Manager; de waarde wordt nooit in het concept gekopieerd | Herconfiguratie |
| Cloud Storage-bucket (functionbron) | STACKIT Object Storage-bucket | Herconfiguratie |
Klassen zoals de run ze bepaalde. De accessorbinding van Secret Manager en het bronarchief zijn geen eigen eenheden.
Beslissingen die de architect neemt
Openstaande punten van de run, te vinden in execution/manual/actions.md.
Identiteit van de applicatie
Bepaal hoe de app inloggegevens krijgt. Functions die de metadata server gebruikten, hebben expliciete STACKIT-inloggegevens of workload identity nodig; de run noemt dit voor de function en voor zijn service account.
Bereikbaarheid via het netwerk
De bronfunction accepteert alleen intern verkeer. Bepaal wie de Cloud Foundry-route mag bereiken en beoordeel de openstaande instellingen die de run aan de netwerkarchitect toewijst.
Scale-to-zero en facturering
Schaling en facturering per aanroep vervallen. Dimensioneer instances op de belasting en accepteer een app die ook zonder belasting blijft draaien.
Secretinstellingen
Maak het secret opnieuw aan als sleutel in de Secrets Manager-instance uit het concept en bepaal wie die mag lezen; de run laat secretinstellingen aan de security architect.
Data in de bronbucket
De run legt de verplaatsing van de bucket vast als beslissing zonder gekozen mechanisme. Bevat de bucket alleen een deploymentarchief, dan is opnieuw bouwen vanuit de bron misschien eenvoudiger dan kopiëren.
Semantiek van de berichten
De voorbeeldtrigger stelt retry_policy = RETRY_POLICY_RETRY in. Bevestigingstermijnen, retries en dead-lettertopics van Pub/Sub worden gekoppeld aan bevestigingen, requeueing en dead-letter-exchanges, zoals de mapping van de run aangeeft. Bepaal ze per queue en zorg dat de consumer hetzelfde bericht veilig twee keer kan verwerken.
Vragen van ontwikkelaars
Heeft STACKIT een dienst zoals Cloud Functions?
Volgens de mapping van de run is er geen function-as-a-service algemeen beschikbaar op STACKIT. De function draait als Cloud Foundry-app of als container op SKE, en schaling en facturering per aanroep worden niet overgenomen.
Wat gebeurt er met een Pub/Sub-trigger?
Die wordt herschreven als consumer. Het topic wordt een RabbitMQ-exchange en de function leest een queue die eraan is gebonden, dus de code gaat van Pub/Sub-events naar AMQP-berichten.
Genereert StackToIT het Cloud Foundry-manifest?
Nee. Het schrijft de organization als concept en noemt wat een manifest nodig heeft: naam, geheugen, instances, omgeving, secrets en netwerkinstellingen. U schrijft het manifest en pusht de app.
Controleert de run of er een buildpack bestaat voor onze runtime?
Nee. Het voorbeeld gebruikt python312 met het entrypoint handle_paid_order, en de run bewaart beide in zijn mappingnotitie voor het manifest. Of een buildpack voor uw taal en versie beschikbaar is op STACKIT Cloud Foundry, bevestigt uw team zelf; zo niet, bouw dan een image en draai dat op SKE. De Cloud Foundry-FAQ van STACKIT vermeldt dat cf buildpacks de huidige ingebouwde buildpacks toont en dat volledige ondersteuning alleen die dekt; een communitybuildpack kan met zijn GitHub-URL en versietag worden genoemd, maar alleen als tijdelijke maatregel.
Bronnen
Uw volgende stap: STACKIT.
Vertel ons over uw omgeving, dan laten wij zien wat StackToIT daarvoor oplevert: doelarchitectuur, Terraform-artefacten en een gestructureerd migratieplan.
Laat uw gegevens achter, onze specialisten nemen contact met u op.
Liever zelf een e-mail sturen? connect@stacktoit.com
Hartelijk dank.
Uw verzoek is bij ons binnengekomen. Onze specialisten nemen contact met u op.