google-cloud-platformgoogle-cloud-functionsgoogle-deployment-manager

Does Deployment Manager have Cloud Functions support (and support for having multiple cloud functions)?


I'm looking at this repo and very confused about what's happening here: https://github.com/GoogleCloudPlatform/deploymentmanager-samples/tree/master/examples/v2/cloud_functions

In other Deployment Manager examples I see the "type" is set to the type of resource being deployed but in this example I see this:

resources:
- name: function
  type: cloud_function.py # why not "type: cloudfunctions"?
  properties:
    # All the files that start with this prefix will be packed in the Cloud Function
    codeLocation: function/
    codeBucket: mybucket
    codeBucketObject: function.zip
    location: us-central1
    timeout: 60s
    runtime: nodejs8
    availableMemoryMb: 256
    entryPoint: handler

"type" is pointing to a python script (cloud_function.py) instead of a resource type. The script is over 100 lines long and does a whole bunch of stuff.

This looks like a hack, like its just scripting the GCP APIs? The reason I'd ever want to use something like Deployment Manager is to avoid a mess of deployment scripts but this looks like it's more spaghetti.

Does Deployment Manager not support Cloud Functions and this is a hacky workaround or is this how its supposed to work? The docs for this example are bad so I don't know what's happening

Also, I want to deploy multiple function into a single Deployment Manager stack- will have to edit the cloud_function.py script or can I just define multiple resources and have them all point to the same script?

Edit

I'm also confused about what these two imports are for at the top of the cloud_function.yaml:

imports:
# The function code will be defined for the files in function/
- path: function/index.js
- path: function/package.json

Why is it importing the actual code of the function it's deploying?


Solution

  • Deployment manager simply interacts with the different kind of Google APIs. This documentation gives you a list of supported resource types by Deployment manager. I would recommend you to run this command “gcloud deployment-manager types list | grep function” and you will find this “cloudfunctions.v1beta2.function” resource type is also supported by DM.

    The template is using a gcp-type (that is in beta).The cloud_functions.py is a template. If you use a template, you can reuse it for multiple resources, you can this see example. For better understanding, easier to read/follow you can check this example of cloud functions through gcp-type.