Blog

Erstellen von Typ-Anbietern für Google Deployment Manager

Maarten Baijs

Aktualisiert Oktober 21, 2025
2 Minuten

Deployment Manager ist ein Infrastrukturbereitstellungsdienst, der die Erstellung und Verwaltung von Google Cloud Platform-Ressourcen automatisiert. Viele GCP-Ressourcen können mit den verfügbaren GDM-Typen erstellt werden. Im Wesentlichen ist ein GDM-Typ eine Abstraktion über der API eines GCP-Dienstes. Einige Typen fehlen jedoch, daher möchte ich Ihnen in diesem Blog zeigen, wie Sie diese selbst hinzufügen können. GDM unterstützt jinja2 und Python-Vorlagen. In diesem Blog werden wir Python verwenden.

Suche nach dem Funddokument

Bevor wir unseren neuen Typ erstellen können, müssen wir das Erkennungsdokument finden, das mit der API des Dienstes verbunden ist, den wir hinzufügen möchten. Die im Discovery-Dokument enthaltenen Informationen umfassen Eigenschaften auf API-Ebene wie API-Inhalte, Ressourcenschemata, Authentifizierungsbereiche und Methoden. Ein Link zu diesem Dokument befindet sich in der übrigen Dokumentation des Dienstes, zum Beispiel: https://cloud.google.com/scheduler/docs/reference/rest

Erstellen des Typ-Anbieters

Da wir nun das Discovery-Dokument haben, können wir unsere Typressource erstellen. Es ist wichtig, die Eigenschaft "inputMappings" hinzuzufügen, da diese die Anmeldedaten enthält, die für die Authentifizierung bei der API benötigt werden.

def _generateSchedulerTypeResource(context):
   properties = {
       'descriptorUrl': 'https://cloudscheduler.googleapis.com/$discovery/rest?version=v1beta1',
       'options': {
         'inputMappings': [
           {
             'fieldName': 'Authorization',
             'location': 'HEADER',
             'value': '$.concat("Bearer ", $.googleOauth2AccessToken())',
           },
         ],
       }
   }

   return {
       ‘name‘: ‘cloudscheduler-v1beta1‘,
       ‘type‘: ‘deploymentmanager.v2beta.typeProvider‘,
       ‘properties‘: properties,
   }

Erstellen der Ressource

Mit unserem frisch erstellten Type Provider können wir eine Serviceressource definieren. Die Eigenschaft "action" im folgenden Code ist eine Verkettung der Projekt-ID, des Namens des Typanbieters und der Rest-Api-Endpunkt-ID, die aus dem Discovery-Dokument destilliert werden kann.Das Diktat "properties" enthält die Anfrageeigenschaften, die Sie an die API senden möchten. Der Wert der Eigenschaft "dependsOn" muss mit dem Namen des Typanbieters übereinstimmen.

def _generateSchedulerJobResource(context):
   project_id = 'myprojectid'
   region = 'europe-west2'
   parent = 'projects/' + project_id + '/locations/' + region
   name_short = 'myjob'
   name_full = parent + '/jobs/' + name_short
   topic = 'trigger-job'

   properties = {
       ‘name‘: name_full,
       ‘parent‘: parent,
       ‘content‘: name_short,
       ‘schedule‘: ‘0 6 */1 * *‘,
       ‘timeZone‘: ‘Europe/Brussels‘,
       ‘pubsubTarget‘: {
           ‘topicName‘: ‘projects/‘ + project_id + ‘/topics/‘ + topic,
           ‘attributes‘: {
               ‘source‘: ‘cloudscheduler‘,
           },
       },
   }
   metadata = {
       ‘dependsOn‘: [‘cloudscheduler-v1beta1‘],
   }
   return {
       ‘name‘: ‘cloudscheduler-job-‘ + name_short,
       ‘action‘: project_id + ‘/cloudscheduler-v1beta1:cloudscheduler.projects.locations.jobs.create‘,
       ‘properties‘: properties,
       ‘metadata‘: metadata,
   }

Zusammenstellen

In unserer Hauptfunktion, die "GenerateConfig" heißen muss, definieren wir eine Liste mit den Ressourcen, die wir erstellen möchten.

def GenerateConfig(context):
   resources = [
       _generateSchedulerTypeResource(context),
       _generateSchedulerJobResource(context),
   ]

   return {‘resources‘: resources}

Verfasst von

Maarten Baijs

Contact

Let’s discuss how we can support your journey.