'How to properly configure my terraform folders for AWS deployment?

This is how my folder structure looks like

total 248
drwxrwxr-x 6 miki miki  4096 Mar  7 16:01 ./
drwxrwxr-x 5 miki miki  4096 Mar  3 14:53 ../
-rw-rw-r-- 1 miki miki   460 Mar  4 11:59 application_01.tf
drwxrwxr-x 3 miki miki  4096 Mar  8 10:54 application-server/
-rw-rw-r-- 1 miki miki   862 Mar  4 09:06 ecr.tf
-rw-rw-r-- 1 miki miki  3169 Mar  4 11:36 iam.tf
-rw-rw-r-- 1 miki miki  1023 Mar  4 14:11 jenkins_01.tf
drwxrwxr-x 2 miki miki  4096 Mar  7 15:33 jenkins-config/
-rw------- 1 miki miki  3401 Mar  3 09:41 jenkins.key
-r-------- 1 miki miki   753 Mar  3 09:41 jenkins.pem
drwxrwxr-x 3 miki miki  4096 Mar  8 10:53 jenkins-server/

I run yesterday both terraform init and terraform apply I found out that my application-server folder content is not implemented. I have script file(update ,install docker,login to ECR, and pull image)

    sudo yum update -y
    sudo amazon-linux-extras install docker
    sudo systemctl start docker
    sudo systemctl enable docker
/bin/sh -e -c 'echo $(aws ecr get-login-password --region us-east-1) | docker login -u AWS --password-stdin ${repository_url}'
sudo docker pull ${repository_url}:release
sudo docker run -p 80:8000 ${repository_url}:release

Anyway I checked the instance from the console enter image description here

I run

terraform plan

and this it says No changes. Your infrastructure matches the configuration.

Your configuration already matches the changes detected above. If you'd like to update the Terraform state to match, create and apply a refresh-only plan: terraform apply -refresh-only

My application.tf file

module "application-server" {
  source = "./application-server"

  ami-id = "ami-0742b4e673072066f" # AMI for an Amazon Linux instance for region: us-east-1

  iam-instance-profile = aws_iam_instance_profile.simple-web-app.id
  key-pair = aws_key_pair.simple-web-app-key.key_name
  name = "Simple Web App"
  device-index = 0
  network-interface-id = aws_network_interface.simple-web-app.id
  repository-url = aws_ecr_repository.simple-web-app.repository_url
}

And APPLICATION_SERVER folder

-rw-rw-r-- 1 miki miki  417 Mar  2 11:18 application-server_main.tf
-rw-rw-r-- 1 miki miki  164 Mar  2 11:21 application-server_output.tf
-rw-rw-r-- 1 miki miki  398 Mar  2 11:17 application-server_variables.tf
drwxr-xr-x 3 miki miki 4096 Mar  8 10:54 .terraform/
-rw-r--r-- 1 miki miki 1076 Mar  8 10:54 .terraform.lock.hcl
-rw-rw-r-- 1 miki miki  866 Mar  4 14:39 user_data.sh

And application-server_main.tf

resource "aws_instance" "default" {
  ami = var.ami-id
  iam_instance_profile = var.iam-instance-profile
  instance_type = var.instance-type
  key_name = var.key-pair
  network_interface {
    device_index = var.device-index
    network_interface_id = var.network-interface-id
  }

  user_data = templatefile("${path.module}/user_data.sh", {repository_url = var.repository-url})

  tags = {
    Name = var.name
  }
}

My scirpt is not executed. Why? How to structure properly Terraform across many folders?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source