brikis98 / terraform-up-and-running-code

Code samples for the book "Terraform: Up & Running" by Yevgeniy Brikman
http://www.terraformupandrunning.com/
MIT License
2.87k stars 1.92k forks source link

Unable to deploy healthy instances once I start using variables in user_data #28

Closed TravelingLex closed 5 years ago

TravelingLex commented 5 years ago

Following both your book and your updated git, I am unable to deploy healthy instances using the remote_state variables. I'm at a complete loss for what I'm missing.

resource "aws_launch_configuration" "example" {
    image_id = "${var.web_image_id}"
    instance_type = "t2.micro"
    security_groups = ["${aws_security_group.instance.id}"]
    user_data = <<-EOF
        #!/bin/bash
        echo "Hello,World" >> index.html
        echo "${data.terraform_remote_state.db.address}" >> index.html
        echo "${data.terraform_remote_state.db.port}" >> index.html
        nohup busybox httpd -f -p "${var.server_port}" &
        EOF

My remote_state:

data "terraform_remote_state" "db" {
  backend = "s3"

  config{
      bucket = "terraforming-up-and-running-state"
      key = "stage/data-stores/mysql/terraform.tfstate"
      region = "us-east-1"
      profile = "personal"
      shared_credentials_file = "/Users/Alexm/.aws/credentials"
  }
}

I check the .tfstate file for my database deployment and it shows the correct outputs.

Navigating to the IPs of the EC2 instances directly show nothing. My var.tf is as follows:
variable "server_port" {
    description = "The port the server will use for HTTP requests"
    default = 8080
}
variable "web_image_id" {
    description = "Image ID for web servers"
    default = "ami-07b4156579ea1d7ba"
}

I've spent hours looking through your documents and code and can't figure it out.

brikis98 commented 5 years ago

What is the actual error you're getting?

Also, could you use proper syntax highlighting so your code is a bit more readable? That is, wrap your code with three backticks and fix the indentation? It's especially important in this case, as a common source of User Data errors is whitespace.

TravelingLex commented 5 years ago

Sorry about that, I've made the code more readable. I was able to get the webservers to deploy and moved on to creating the user-data.sh file. I'm once again running into the issue. Here is my terraform for the launch config:

resource "aws_launch_configuration" "example" {
    image_id = "${var.web_image_id}"
    instance_type = "t2.micro"
    security_groups = ["${aws_security_group.instance.id}"]
    user_data = "${data.template_file.user_data.rendered}"

    lifecycle {
        create_before_destroy = true
    }
}

And my user-data.sh file:

 #!/bin/bash

cat > index.html <<-EOF
    <h1>Hello, World</h1>
    <p>DB address: ${db_address}</p>
    <p>DB port: ${db_port}</p>
EOF

nohup busybox httpd -f -p ${server_port} &

And my data read file:

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

    vars {
        server_port = "${var.server_port}"
        db_address  = "${data.terraform_remote_state.db.address}"
        db_port     = "${data.terraform_remote_state.db.port}"
    }
}
TravelingLex commented 5 years ago

Looks like this might be related to me running Terraform 0.12. They updated the templatefile function.

brikis98 commented 5 years ago

If you're using 0.12, you'll need the 2nd edition of the book (early release will be out in 1-2 weeks) and the 2nd-edition branch: https://github.com/brikis98/terraform-up-and-running-code/tree/2nd-edition

TravelingLex commented 5 years ago

Sorry on Terraform v0.11.7

brikis98 commented 5 years ago

And what is the actual problem you're seeing?

TravelingLex commented 5 years ago

I was able to resolve the issue. It was related to my user-data.sh file, I ended up putting a "-" at <<-EOF and it worked (Granted it took over 30 minutes before the systems were available).