none
使用Terraform部署Azure Windows Srv运行初始化脚本问题 RRS feed

  • 问题

  • 大家好,我们的客户使用Terraform部署Azure上的虚拟机,操作系统类型有LINUX和Windows。客户需要在VM创建以后自动运行一次初始化脚本(仅仅是创建完成第一次启动后运行一次,此后在虚拟机整个生命周期内无需再次运行)。

    对于LINUX系统,我们选择了CI类型的Linux镜像,通过terraform创建后,可以达到用户的目的。

    对于Windows系统,我们没有找到CI类型的Windows镜像,所以采用同样的方法,VM创建后没有自动运行脚本。

    我们也建立case到世纪互联,答复是目前Azure的Windows镜像没有CI类型的,Windows不支持这种运行脚本的方式。提供了一种Extensions在Azure portal上的解决方案,需要在VM创建以后,手动在portal上将脚本传入到VM中运行。
    这种在Azure portal上做辅助操作的方式,与客户的管理原则是相违背的,如果批量创建大量VM,也会给客户带来大的工作量。

    我们也设想过将脚本封装到镜像里,但是在客户的实际应用场景中,由于客户的自动化脚本在运行之前需要传对应环境的参数进去,以满足不同环境的注册条件。常规上我们是通过Terraform判断服务器所在环境,然后通过Terraform将对应参数传递到脚本中,通过Cloud init在系统首次启动时运行脚本。

    如果我们将脚本封装在镜像中,我们会遇到两个问题:
    1. 脚本中所有的针对环境的参数都要被固化,这样下来同样版本的Windows镜像,我们要针对每一个环境中分别做一个镜像。
    2. 如果被注册的组件有做调整,原本需要加/减脚本参数就可以完成的工作,就需要我们为每一个环境分别重做镜像来解决。

    以上两点相对于我们Azure上的服务器来说,增加了很大的工作量。并且在镜像管理上,也会出现冗余。

    基于上述背景,想请教各位是否有什么好的思路满足上述诉求,再次感谢!


    2020年3月9日 10:57