web-dev-qa-db-ja.com

user_dataのコマンドがterraformで実行されない

こんにちはEC2インスタンスが作成されますが、userdata.shの一部としてのコマンドが実行されません。 PuTTY経由でEC2に手動で接続すると、nginxがEC2インスタンスにインストールされていないことがわかりました。スクリプトが実行されているかどうかを確認するには、エコーメッセージを追加しましたが、terraform applyを実行すると、コマンドプロンプトに出力が表示されません。ユーザーデータが実行されているかどうかを確認するにはどうすればよいですか?

TerraformをCドライブにインストールしました。以下のスクリプトは同じフォルダーC:/Terraform/userdata.sh、C:/Terraform/main.tfにあります。パスを$ {file( "./ userdata.sh")として指定しました} "しかし、それでも機能しません。

私はただテラフォームを学んでいるので助言してください。ありがとう。

#!/bin/bash -v
echo "userdata-start"
Sudo apt-get update -y
Sudo apt-get install -y nginx > /tmp/nginx.log
Sudo service nginx start
echo "userdata-end"

これは、以下のように私のterraformプログラム[main.tf]で呼び出されます。

# resource "template_file" "user_data" {
#    template = "userdata.sh"
# }

data "template_file" "user_data" {
template = "${file("userdata.sh")}"
}

resource "aws_instance" "web" {
instance_type = "t2.micro"

AMI = "AMI-5e8bb23b"

key_name = "sptest"

vpc_security_group_ids = ["${aws_security_group.default.id}"]
subnet_id              = "${aws_subnet.tf_test_subnet.id}"

user_data               = "${data.template_file.user_data.template}"
#user_data              = "${template_file.user_data.rendered}"
#user_data              = "${file("userdata.sh")}"
#user_data              = "${file("./userdata.sh")}"


tags {
Name = "tf-example-ec2"
}
} 
5
Smi

あなたが投稿したコードに問題があることがわかりました、user_data変数は次のようになります

user_data = "${data.template_file.user_data.rendered}"

さらに、提案として、スクリプトでログファイルを作成して、実行されたすべてのステップを確認することをお勧めします。また、スクリプトがまったく実行されたかどうかを知ることにも役立ちます。

私たちのコードからの1つのサンプル、あなたはあなたの標準に基づいてそれを修正することができます

logdir=/var/log
logfile=${logdir}/mongo_setup.log
exec >> $logfile 2>&1

お役に立てれば。

5