2017-07-18 7 views
2

Terraformプロビジョニングに関する問題があります。初めてterraformを実行すると、AWSコンソールで生成されたSSHキーを使用しています。このキーはubuntuユーザー(Ubuntu 16.04 AMI)に追加されています。私は、私は後でAnsibleを使用することができますインストールされているのpythonが必要Terraformの条件付きプロビジョニング

provisioner "remote-exec" { 
    inline = [ 
    "sudo apt -y update && sudo apt install -y python" 
    ] 
    connection { 
    user = "ubuntu" 
    private_key = "${file("${var.aws_default_key_name}.pem")}" 
    } 
} 

:それから私はremote-execプロビジョニングを実行します。私の秘密鍵で自分のユーザを作成するので、これは私がこの鍵を必要とする唯一の場所です。しかし、後でterraformを実行しようとすると、ファイルfile("${var.aws_default_key_name}.pem"が検索されます。 これ以降の実行でこのプロビジョニングをスキップする方法について質問がありますか?

私はリポジトリにSSH鍵を保存したくありません。

私は空のファイルを作成してテラフォームを「トリックする」ことができますが、私はこの解決策が嫌いです。

もっと良いアイデアを教えてください。

答えて

2

aws_instanceブロックでプロビジョニングを実行する代わりに、適切なトリガーを使用してnull_resourceブロックに移動してください。

resource "aws_instance" "cluster" { 
    count = 3 

    # ... 
} 

resource "null_resource" "cluster" { 
    # Changes to any instance of the cluster requires re-provisioning 
    triggers { 
    cluster_instance_ids = "${join(",", aws_instance.cluster.*.id)}" 
    } 

    connection { 
    host = "${element(aws_instance.cluster.*.public_ip, 0)}" 
    } 

    provisioner "remote-exec" { 
    inline = [something] 
    } 
} 

トリガーが変更されない場合、null_resourceのプロビジョニングは後続の実行ではトリガーされません。

+0

私はテストしてお知らせしますが、有望そうです! – Mat

0

Sparrowformは、Terraformベースのインフラストラクチャのための軽量プロビジョナーです。他のプロビジョニングツールに対する利点、ブートストラップインフラを提供段階から切り離されていterraform applyのその段階はあるので、あなたはこれを行うことがあります。

明らか
$ terraform apply # does infra bootstrap 

$ nano sparrowfile # Sparrowdo equivalent for remote-exec chunk 

#!/usr/bin/env perl6 

bash 'apt -y update'; 
package-install 'python'; 

$ sparrowform --ssh_user=my-user --ssh_private_key=/path/to/key # do provision stage 

あなたがフリーで以降のsparrowformを実行しませんを実行します。それは仕事です(関係する依存関係をインストールする、それはそれです)。次に、あなたの最初のssh_private_keyを落として、新しい秘密鍵を持って行きます(私はそう思いますか?)

PS。開示 - 私はツールの作者です