You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Deployment Manager模板中为计算实例实现Web服务健康检查

在Deployment Manager中等待Web服务就绪后标记部署成功

完全可以实现这个需求,下面是两种常用的落地方案:

方案一:使用Deployment Manager原生Waiters资源

Waiters是DM专门用来等待部署条件满足的内置资源,你可以配置它定期检查Web服务的响应状态,直到服务正常返回后再推进部署流程。

示例模板配置

resources:
  # 定义你的计算实例
  - name: web-server-instance
    type: compute.v1.instance
    properties:
      zone: us-central1-a
      machineType: n1-standard-1
      # 实例的其他配置(镜像、启动脚本等)...

  # 定义等待Web服务就绪的Waiter
  - name: wait-for-web-service-ready
    type: deploymentmanager.v1.waiter
    properties:
      timeout: 12m  # 设置超时时间,要覆盖服务启动的5-10分钟
      target: $(ref.web-server-instance.selfLink)
      pollInterval: 30s  # 每30秒执行一次检查
      conditions:
        - conditionType: HTTP_REQUEST
          httpRequest:
            url: http://$(ref.web-server-instance.networkInterfaces[0].accessConfigs[0].natIP)
            port: 80
            responseCode: 200  # 期望的成功状态码
            # 如果是HTTPS服务,修改url为https://,port设为443,可添加以下参数跳过SSL验证(测试环境用)
            # validateSsl: false

当Waiter检测到HTTP请求返回200状态码后,才会继续部署流程,此时DM才会将部署状态标记为SUCCESS。

方案二:在实例启动脚本中内置健康检查

另一种方式是在实例的启动脚本里加入循环检查逻辑,直到Web服务就绪后再完成脚本执行。Deployment Manager默认会等待实例的启动脚本执行完毕,所以只要脚本不结束,部署就不会标记为成功。

示例启动脚本片段

#!/bin/bash
# 这里写安装、启动Web服务的命令,比如:
# apt-get update && apt-get install -y nginx
# systemctl start nginx

# 循环检查Web服务是否就绪
echo "Waiting for web service to become available..."
until curl -s -o /dev/null -w "%{http_code}" http://localhost:80 | grep -q "200"; do
  sleep 60  # 每分钟检查一次
done
echo "Web service is ready!"

关键注意事项

  • 超时设置:无论是Waiter还是启动脚本,都要确保超时时间足够覆盖服务启动的最长耗时(比如12分钟),避免部署被误判为失败。
  • 防火墙规则:要确保外部请求(Waiter的检查)或者本地请求(启动脚本的curl)能访问到80/443端口,需要配置对应的防火墙规则。
  • HTTPS场景:如果使用HTTPS,若证书未被系统信任,要在curl命令中添加-k参数跳过验证,或者在Waiter配置中设置validateSsl: false(仅建议测试环境使用,生产环境请配置可信证书)。

内容的提问来源于stack exchange,提问作者JayantSeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:05:18