I am still beginner with golang in Google Cloud Appengine (standard). I want to use a function that is automatically call for the instance shutting down. There is a function init called during startup. Now I am looking for the opposite part like a destroy function. Seems there is something like that for python, but could not find anything for golang.
How could you realise such a destroy fuction in google appengine instances ?
This is documented at Go - How Instances are Managed.
Unfortunately the Go doc is incomplete, here's the link to the Pyton version: Python - How Instances are Managed. The way it is implemented / supported is language-agnostic.
When an instance is spin up, an HTTP GET request is sent to the /_ah/start
path.
Before an instance is taken down, an HTTP GET request is sent to the /_ah/stop
path.
You should use package init()
functions for initialization purposes as that always runs, and only once. If a request is required for your init functions, then register a handler to the _/ah/start
path.
And you may register a handler to /_ah/stop
and implement "shutdown" functionality like this:
func init() {
http.HandleFunc("/_ah/stop", shutdownHandler)
}
func shutdownHandler(w http.ResponseWriter, r *http.Request) {
doSomeWork()
saveState()
}
But you can't rely on this 100%:
Note: It's important to recognize that the shutdown hook is not always able to run before an instance terminates. In rare cases, an outage can occur that prevents App Engine from providing 30 seconds of shutdown time. Thus, we recommend periodically checkpointing the state of your instance and using it primarily as an in-memory cache rather than a reliable data store.