Home > Mobile >  Provisioning Windows VM including File Provisioner for AWS using Terraform results in Timeout
Provisioning Windows VM including File Provisioner for AWS using Terraform results in Timeout

Time:02-10

I'm aware that there already exists several posts similar to this one - I've went through them and adapted my Terraform configuration file, but it makes no difference.

Therefore, I'd like to publish my configuration file and my use case: I'd like to provision a (Windows) Virtual Machine on AWS, using Terraform. It works without the File Provisioning part - including them, the provisioning results in a timeout. enter image description here

This includes adaptations from previous posts:

I also get a timeout when using "winrm" instead of "ssh".

I'd be happy if you could provide any hint for following config file:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

# Configure the AWS Provider
provider "aws" {
  access_key = "<my access key>"
  secret_key = "<my secret key>"
  region = "eu-central-1"
}

resource "aws_instance" "webserver" {
    ami = "ami-07dfec7a6d529b77a"
    instance_type = "t2.micro"
    security_groups = [aws_security_group.sgwebserver.name]
    key_name = aws_key_pair.pubkey.key_name

    tags = {
        "Name" = "WebServer-Win"
    }
}

resource "null_resource" "deployBundle" {
    
    connection {
      type        = "ssh"
      user        = "Administrator"
      private_key = "${file("C:/Users/<my user name>/aws_keypair/aws_instance.pem")}"
      host        = aws_instance.webserver.public_ip
    }

    provisioner "file" {    
      source = "files/test.txt"    
      destination = "C:/test.txt"  
    }

    depends_on = [ aws_instance.webserver ]
} 

resource "aws_security_group" "sgwebserver" {
  name        = "sgwebserver"
  description = "Allow ssh inbound traffic"

  ingress {
    from_port        = 0
    to_port          = 6556
    protocol         = "tcp"
    cidr_blocks      = ["0.0.0.0/0"]
  }

  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
  }

  tags = {
      Name = "sgwebserver"
  }

}

resource "aws_key_pair" "pubkey" {
    key_name = "aws-cloud"
    public_key = file("key/aws_instance.pub")
}

resource "aws_eip" "elasticip" {
    instance = aws_instance.webserver.id
}

output "eip" {
    value = aws_eip.elasticip.public_ip
}

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "my-vpc"
  cidr = "10.0.0.0/16"

  azs             = ["eu-central-1a", "eu-central-1b", "eu-central-1c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway = true
  enable_vpn_gateway = true

  tags = {
    Terraform = "true"
    Environment = "dev"
  }
}

Thanks a lot in advance!

CodePudding user response:

Windows EC2 instances don't support SSH, they support RDP. You would have to install SSH server software on the instance before you could SSH into it.

I suggest doing something like placing the file in S3, and using a user data script to trigger the Windows EC2 instance to download the file on startup.

  • Related