Before I can use a particular service, I have to enable the API in my Google project. Sometimes when I do this, more services are enabled than the one I specified. In this blog I will show you how to find service dependencies like this.
Deprecation Notice This blog documented the usefulness of an undocumented property in the output of the gcloud services list
command. This property has disappeared, hence the instructions here are no longer valid.
To see this in effect, I am going to enable the Cloud Functions service. First I will show you that enabling Cloud Functions, will actually enable six services in total. Then I will show you how you can list the dependencies. Finally, I will present you with a small utility and graph with all dependencies for you to play around with.
enabling Cloud Functions
So I am going to show you that enabling Cloud Functions is actually enabling multiple services. First, I am going to check the enabled services in my project:
gcloud services list
The output looks roughly like this:
NAME TITLE
bigquery.googleapis.com BigQuery API
...
servicemanagement.googleapis.com Service Management API
serviceusage.googleapis.com Service Usage API
In this case, the Cloud Functions service is not listed.
enabling the service
To enable Cloud Functions in my project, I type:
$ gcloud services enable cloudfunctions
Operation "operations/acf.3170fc7d-dc07-476f-851b-ff0cc2b9d79f" finished successfully.
Now, when I check the list of enabled services again, the number of active services has increased with the following six services!
NAME TITLE
cloudfunctions.googleapis.com Cloud Functions API
logging.googleapis.com Cloud Logging API
pubsub.googleapis.com Cloud Pub/Sub API
source.googleapis.com Legacy Cloud Source Repositories API
storage-api.googleapis.com Google Cloud Storage JSON API
storage-component.googleapis.com Cloud Storage
...
Could I have predicted this before i enabled it? Yes, I could have..
listing all available services
To list all the available services, I use the following command:
gcloud services list --available --format json
The result is a list of objects with meta information about the service:
{
"config": {
"name": "cloudfunctions.googleapis.com",
"title": "Cloud Functions API",
"documentation": {},
"features": [],
"monitoredResources": [
"monitoring": {},
"quota": {},
"authentication": {},
"usage": {}
},
"dependencyConfig": {
"dependsOn": [],
"directlyDependsOn": []
"directlyRequiredBy": [],
"requiredBy": []
},
"serviceAccounts": [],
"state": "DISABLED"
}
I see four main attributes for each service: config
, dependencyConfig
, serviceAccounts
and state
. The fields dependencyConfig
lists the service dependencies, while serviceAccounts
lists the service accounts which are created in the project for this service. Note that these fields are not part of the documented service usage API.
listing specific dependencies
So, this service usage API provides all the dependencies of a specific service. To list all dependent services of Cloud Functions, I use the following command:
gcloud services list \
--available --format json | \
jq --arg service cloudfunctions.googleapis.com \
'map(select(.config.name == $service)|
{
name: .config.name,
dependsOn: .dependencyConfig.dependsOn
}
)'
and the result is:
{
"name": "cloudfunctions.googleapis.com",
"dependsOn": [
"cloudfunctions.googleapis.com",
"logging.googleapis.com",
"pubsub.googleapis.com",
"source.googleapis.com",
"storage-api.googleapis.com",
"storage-component.googleapis.com"
]
}
These are precisely the six services that were previously enabled \o/
. If you want to explore dependencies yourself, you can use this bash script. If you do not want to type, you can browse through the entire graph
. I know it is a bit tiny, but luckily it is a scalable vector graphic. So open it in a separate window and you can pan and zoom.
conclusion
Thanks to some undocumented properties of by the Google service usage API, I can find all dependencies between Google Cloud Platform services.