Spaces:
Runtime error
Runtime error
provider "aws" { | |
region = "us-west-2" | |
} | |
data "aws_ami" "ubuntu" { | |
most_recent = true | |
filter { | |
name = "name" | |
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"] | |
} | |
filter { | |
name = "virtualization-type" | |
values = ["hvm"] | |
} | |
owners = ["099720109477"] | |
} | |
resource "aws_key_pair" "deployer" { | |
key_name = "deployer-key" | |
public_key = file("~/.ssh/id_rsa.pub") | |
} | |
resource "aws_security_group" "swarm-sg" { | |
name = "swarm-sg" | |
description = "Security group for Swarm app" | |
ingress { | |
from_port = 22 | |
to_port = 22 | |
protocol = "tcp" | |
cidr_blocks = ["0.0.0.0/0"] | |
} | |
ingress { | |
from_port = 8000 | |
to_port = 8000 | |
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"] | |
} | |
} | |
resource "aws_launch_configuration" "swarm" { | |
name = "swarm-configuration" | |
image_id = data.aws_ami.ubuntu.id | |
instance_type = "g4dn.xlarge" | |
key_name = aws_key_pair.deployer.key_name | |
security_groups = [aws_security_group.swarm-sg.id] | |
user_data = <<-EOF | |
#!/bin/bash | |
sudo apt-get update | |
sudo apt-get install -y docker.io | |
sudo docker pull your_docker_image_name | |
sudo docker run -d -p 8000:8000 your_docker_image_name | |
EOF | |
root_block_device { | |
volume_type = "gp2" | |
volume_size = 30 # size in GBs | |
} | |
lifecycle { | |
create_before_destroy = true | |
} | |
} | |
resource "aws_autoscaling_group" "swarm" { | |
name_prefix = "swarm-asg" | |
max_size = 5 | |
min_size = 1 | |
desired_capacity = 1 | |
launch_configuration = aws_launch_configuration.swarm.id | |
lifecycle { | |
create_before_destroy = true | |
} | |
} | |
resource "aws_elb" "swarm" { | |
name = "swarm-elb" | |
subnets = ["subnet-id1", "subnet-id2"] | |
listener { | |
instance_port = 8000 | |
instance_protocol = "http" | |
lb_port = 80 | |
lb_protocol = "http" | |
} | |
health_check { | |
healthy_threshold = 2 | |
unhealthy_threshold = 2 | |
timeout = 3 | |
target = "HTTP:8000/" | |
interval = 30 | |
} | |
instances = [aws_instance.swarm.id] | |
cross_zone_load_balancing = true | |
idle_timeout = 400 | |
connection_draining = true | |
connection_draining_timeout = 400 | |
} | |