1

packer.io を使用して、単一の VM を Azure にデプロイしています。私のプロジェクトの次のステップは、VM のクラスターを Azure にデプロイすることです。私の意見では、クラスターの展開を調整するには、Packer だけでは不十分です (間違っていたら訂正してください)。そのため、展開を調整するには別のものが必要です。これはクラスターであるため、その中の各マシンは他のすべてのマシンの IP アドレスを認識する必要があります (私のアプリケーションは分散データベースです)。terraform.io を見ていましたが、そのドキュメントには Azure に関する例がありません。 . 開始するためのリソースはありますか? Terraform は私が必要とするものですか? 他におすすめのツールはありますか?もう 1 つの問題は、顧客のためにデモ VM の展開を自動化しようとしていることです。私の現在のワークフローは、packer を使用し、VM を作成し、データベースをインストールし、必要なユーザー アカウントを作成し、特定のステージング ディレクトリを VM にアップロードします。次に、スナップショットを作成してイメージを取得します。後で、このイメージはクライアントによって (Azure アカウントに) VMDepot からデプロイされます。繰り返しますが、今のところ、これは単一マシン クラスターのみです。後で、これは少なくとも 4 台のマシンのセットである必要があります。これを達成するためのより良いワークフローはありますか?

お時間をいただきありがとうございます。

4

1 に答える 1

0

Terraform には Azure プロバイダーがありますが、最初の質問をした時点ではまだ開発されていなかったと思います。

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)}",
        ]
    }
}

null リソースの 3 つのコピーはすべて、3 つのリソースすべてに依存しているazure_instanceため、すべてのインスタンスの準備が整うまで作成およびプロビジョニングされません。インスタンスの準備がすべて整ったら、各 null リソースは対応するインスタンスに (インデックスによって) 接続するように構成されconfigure-cluster、そのインスタンスで架空のコマンドを実行して、クラスター IP アドレスの完全なセットを引数として渡します。

プロビジョナーは、リソースの最初の作成時にのみ実行されることに注意してください。リソースを更新しても、プロビジョナーは再実行されません。null リソースは実際には実際のインフラストラクチャ リソースを表していないため、Terraform が次のリソースを再作成できるように、プロビジョニング手順を簡単に「汚染」して再実行できますapply

terraform taint null_resource.provision
于 2015-07-19T08:29:21.617 に答える