You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.4 KiB
116 lines
2.4 KiB
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
|
|
}
|