I want to automatically start/stop our app engine services by running a bash script.
I know it's easy to run gcloud app versions start/stop
, but I don't want to manually check the version number. I want to dynamically pass the version that is serving 100% traffic to gcloud and tell it to stop.
On the flip side, I also want to tell gcloud to start the most recently deployed version.
What's the recommended way to do this?
Thanks!
One way to do that is to use
gcloud
's keys and flags:projections
,--format
,--filters
. To read more directly from the terminal usegcloud topic
, for example:In order to see what fields/properties are available use
--format=flattened
, like:For the sake of simplicity I will leave outside everything but
gcloud
.'table[no-heading](service)'
outputs a table without heading, which is set in brackets, and a single column with service IDs, which is set in parentheses.--filter="service=$SERVICE AND version.servingStatus=SERVING AND NOT id=$RECENT"
will only show versions from indicated service that are serving, except the one indicated byRECENT
.Additionally, if you would want to use dates for filtering:
version.createTime.date(format="%s")
is a function date convertingversion.createTime.date
into the number of seconds since the Epoch.%s
comes from strftime(3) and returns dates in Epoch format which is easier to understand and compare.--sort-by="~version.createTime"
sorts by creation date and because of~
in descending order.One approach is to use the
--stop-previous-version
and/or--promote
options when deploying withgcloud app deploy
(they should be the default if I interpret the docs correctly, unless you use--no-stop-previous-version
and/or--no-promote
):But, if you're using the standard environment and dynamic scaling, you should be aware that if the previous version handles a lot of traffic there may be service degradation/interruptions during the switch (it may take a while for the GAE autoscaler to determine how many new version instances it needs to spin up to handle that traffic, see Use traffic migration or splitting when switching to a new default version. You can perform these programmatically, see Not applicable to the flex environment, which doesn't support traffic splitting.
Also potentially of interest: GAE shutdown or restart all the active instances of a service/app
You can only control at which deployed version(s) is the traffic routed to by default, you can't really stop all traffic to a deployed version, it can always be reached via targeted routing.
BTW, the gcloud app versions [start|stop] commands are only applicable to manually scaled services: