我正在使用packer.io将单个VM部署到Azure。我的项目的下一步是将一组VM部署到Azure。在我看来,单独打包器是不够的(如果我错了,请纠正我)来协调集群的部署。所以,我需要其他东西来协调部署。由于它是一个集群,其中的每台机器都需要知道每台其他机器的IP地址(我的应用程序是一个分布式数据库。)我在看terraform.io,但是它的文档在Azure方面没有任何示例。有没有资源可以入手?我需要的是Terraform吗?你会推荐其他任何工具吗? 另一个复杂因素是我正在尝试为我的客户自动部署演示VM。我目前的工作流程是,使用打包程序,创建VM,安装我的数据库,创建必要的用户帐户,将某些登台目录上传到VM。然后我拍了一张快照来拍摄我的照片。稍后,我的客户端(到他们的Azure帐户)从VMDepot部署此映像。再次,目前,这只是一个单机群集。稍后,这将需要一组至少四台机器。是否有更好的工作流程来实现这一目标?
感谢您的时间。
答案 0 :(得分:0)
Terraform有an Azure provider,但我认为在您提出原始问题时尚未开发出来。
Terraform允许创建同一资源的多个“副本”,这对于创建群集很有用。但是,将所有主机的IP地址一起传入这些实例可能会很棘手,因为配置步骤必须等到所有实例都完成。此类排序的常见解决方法是使用未记录的null_resource
在主机上运行独立的配置步骤。例如:
resource "azure_instance" "web" {
name = "terraform-test"
hosted_service_name = "${azure_hosted_service.example.name}"
image = "Ubuntu Server 14.04 LTS"
size = "Basic_A1"
storage_service_name = "yourstorage"
location = "West US"
username = "terraform"
password = "Pass!admin123"
# Tell Terraform to create 3 identical instances.
count = 3
endpoint {
name = "SSH"
protocol = "tcp"
public_port = 22
private_port = 22
}
}
resource "null_resource" "provision" {
count = 3
connection {
host = "${lookup(azura_instance.web.*.ip_address, count.index)}"
user = "terraform"
password = "Pass!admin123"
}
provisioner "remote-exec" {
inline = [
"/usr/local/bin/configure-cluster ${join(" ", azura_instance.web.*.ip_address)}",
]
}
}
空资源的三个副本全部依赖于所有三个azure_instance
资源,因此在所有实例都准备就绪之前不会创建和配置它。实例准备就绪后,每个空资源都配置为连接到其对应的实例(通过索引),然后在其实例上运行虚拟configure-cluster
命令,并将完整的集群IP地址集作为参数传递。 / p>
请注意,配置程序仅在初始创建资源时运行。对资源的更新不会重新运行配置程序。由于null资源实际上并不代表真正的基础架构资源,因此可以通过“污染”来轻松重新设置配置步骤,以便Terraform将在下一个apply
重新创建它:
terraform taint null_resource.provision