Spaces:
Runtime error
Runtime error
File size: 2,421 Bytes
4962437 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
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
}
|