我想通过运行bash脚本自动启动/停止我们的应用引擎服务。
我知道运行gcloud app versions start/stop
很容易,但我不想手动检查版本号。我想动态地将提供100%流量的版本传递给gcloud并告诉它停止。
另一方面,我也想告诉gcloud启动最近部署的版本。
建议的方法是什么?
谢谢!
答案 0 :(得分:3)
一种方法是使用gcloud
的键和标志:projections
,--format
,--filters
。要直接从终端阅读更多信息,请使用gcloud topic
,例如:
gcloud topic projections
要查看哪些字段/属性可用,请使用--format=flattened
,例如:
gcloud app services list --format=flattened
为了简单起见,除了gcloud
之外我将不在外面。
for SERVICE in $(gcloud app services list --format='table[no-heading](id)'); do
echo "for service $SERVICE :"
RECENT=$(gcloud app versions list --format='table[no-heading](id)' --filter="service=$SERVICE" | tail -n1)
echo 'y' | gcloud app versions start $RECENT
VERSIONS=$(gcloud app versions list --format='table[no-heading](id)' --filter="service=$SERVICE AND version.servingStatus=SERVING AND NOT id=$RECENT" | tr '\n' ' ')
echo 'y' | gcloud app versions stop $VERSIONS
done
'table[no-heading](service)'
输出一个没有标题的表,在括号中设置,以及一个带有服务ID的列,在括号中设置。
--filter="service=$SERVICE AND version.servingStatus=SERVING AND NOT id=$RECENT"
只会显示正在投放的指定服务的版本,但RECENT
指示的版本除外。
此外,如果您想使用日期进行过滤:
gcloud app versions list --format='table(id, version.servingStatus, version.createTime.date(format="%s"))' --filter="service=default" --sort-by="~version.createTime"
version.createTime.date(format="%s")
是function date将version.createTime.date
转换为自纪元以来的秒数。
%s
来自strftime(3),并以Epoch格式返回日期,这更易于理解和比较。
--sort-by="~version.createTime"
按创建日期排序,因为~
按降序排序。
答案 1 :(得分:0)
一种方法是在使用gcloud app deploy
进行部署时使用--stop-previous-version
和/或--promote
选项(如果我正确解释文档,则应该是默认选项) ,除非您使用--no-stop-previous-version
和/或--no-promote
):
--promote
宣传已部署的版本以接收所有流量。覆盖了 此命令的默认
app/promote_by_default
属性值 调用。使用--no-promote
禁用。
--stop-previous-version
在部署新版本时停止以前运行的版本 接收所有流量。覆盖默认值 此命令的
app/stop_previous_version
属性值 调用。使用--no-stop-previous-version
停用。
但是,如果您正在使用标准环境和动态扩展,您应该知道如果以前的版本处理大量流量,那么切换期间可能会出现服务质量下降/中断(GAE可能需要一段时间) autoscaler确定需要多少个新版本实例来处理该流量,请参阅Use traffic migration or splitting when switching to a new default version。您可以通过编程方式执行这些操作,请参阅不适用于不支持流量分割的Flex环境。
也可能感兴趣:GAE shutdown or restart all the active instances of a service/app
您只能控制默认情况下路由到的流量的部署版本,您无法停止到部署版本的所有流量,始终可以通过{{ 3}}
顺便说一句, gcloud应用版本[targeted routing | start] 命令仅适用于手动扩展服务:
只有在您的服务的缩放模块已经使用时才可以使用它 设置为手动。