############################################################ # AWS # Setup the cloud provider "Amazon Web Services" (AWS) ############################################################ provider "aws" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" region = "${var.region}" } ############################################################ # Instances # Defining resources to create by terraform ############################################################ resource "aws_instance" "docker_swarm_manager" { ami = "ami-f90a4880" instance_type= "t2.large" #Define securit_group to allow incoming or outcoming traffic from an EC2 instance security_groups = ["${aws_security_group.swarm_security_group.name}"] #key name is necessary to establish ssh connection to the EC2 instance key_name = "${aws_key_pair.keyPair.key_name}" #Define how to connect to instances EC2 (resources just created by terraform in AWS) via ssh protocol connection { # Connection type type = "ssh" # The default username for our AMI user = "ec2-user" # The path to our keyfile private_key = "${file("AccessKeys/EC2Access/privateKey.pem")}" password = "${var.password}" } #Provisioner block is used to execute scripts on a local or remote machine provisioner "remote-exec" { inline = [ "sudo apt-get update", "sudo apt-get install -y docker", "sudo service docker start", "sudo usermod -aG docker ec2-user", "docker swarm init", "sudo docker swarm join-token --q worker > /home/ec2-user/token", ] } tags { #Instance name Name = "swarm-master" } } resource "aws_instance" "docker_swarm_worker" { count = 4 ami = "ami-f90a4880" instance_type = "t2.large" user_data = "${file("${var.docker_install}")}" #Define securit_group to allow incoming or outcoming traffic from an EC2 instance security_groups = ["${aws_security_group.swarm_security_group.name}"] #key name is necessary to establish ssh connection to the EC2 instance key_name = "${aws_key_pair.keyPair.key_name}" connection { # Connection type type = "ssh" # The default username for our AMI user = "ec2-user" # The path to our keyfile private_key = "${file("AccessKeys/EC2Access/privateKey.pem")}" password = "${var.password}" } #Provisioner block is used to execute scripts on a local or remote machine provisioner "remote-exec" { inline = [ "sudo apt-get update", "sudo apt-get install -y docker", "sudo service docker start", "sudo usermod -aG docker ec2-user", "sudo docker swarm join --token $(cat /home/ec2-user/token) ${aws_instance.docker_swarm_manager.private_ip}:2377", ] } tags { #Instance name Name = "swarm-worker-${count.index}" } }