From d13771d8c92fbce94847cf5d8586460df30a7700 Mon Sep 17 00:00:00 2001 From: Matheus Jacques Date: Thu, 24 Aug 2023 18:48:44 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20chore(terraform):=20update=20sec?= =?UTF-8?q?urity=20group=20rules=20to=20allow=20ingress=20and=20egress=20t?= =?UTF-8?q?raffic=20on=20port=208080=20=F0=9F=94=A7=20chore(terraform):=20?= =?UTF-8?q?modify=20user=20data=20script=20for=20manager=20instance=20to?= =?UTF-8?q?=20fetch=20instance=20metadata=20with=20token=20and=20start=20a?= =?UTF-8?q?=20netcat=20server=20on=20port=208080=20to=20provide=20join=20t?= =?UTF-8?q?oken=20=F0=9F=94=A7=20chore(terraform):=20modify=20user=20data?= =?UTF-8?q?=20script=20for=20worker=20instance=20to=20fetch=20manager=20IP?= =?UTF-8?q?=20and=20join=20the=20swarm=20using=20the=20join=20token=20obta?= =?UTF-8?q?ined=20from=20the=20manager=20on=20port=208080?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/scripts/terraform/main.tf | 14 +++++++++ .../terraform/modules/docker-swarm/main.tf | 31 +++++++++++++------ 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/deploy/scripts/terraform/main.tf b/deploy/scripts/terraform/main.tf index 3bbd08fc1..ea56a6448 100644 --- a/deploy/scripts/terraform/main.tf +++ b/deploy/scripts/terraform/main.tf @@ -89,4 +89,18 @@ resource "aws_security_group" "swarm-sg" { protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } + + ingress { + from_port = 8080 + to_port = 8080 + protocol = "tcp" + cidr_blocks = [aws_subnet.swarm-public-subnet.cidr_block] + } + + egress { + from_port = 8080 + to_port = 8080 + protocol = "tcp" + cidr_blocks = [aws_subnet.swarm-public-subnet.cidr_block] + } } diff --git a/deploy/scripts/terraform/modules/docker-swarm/main.tf b/deploy/scripts/terraform/modules/docker-swarm/main.tf index 851200691..ba1f873c3 100644 --- a/deploy/scripts/terraform/modules/docker-swarm/main.tf +++ b/deploy/scripts/terraform/modules/docker-swarm/main.tf @@ -20,10 +20,22 @@ resource "aws_instance" "manager" { #!/bin/bash sudo yum update -y sudo yum install -y docker + sudo yum install -y nc sudo service docker start sudo usermod -a -G docker ec2-user sudo chkconfig docker on - docker swarm init --advertise-addr $(curl -s http://169.254.169.254/latest/meta-data/local-ipv4) + + # Fetch instance metadata with token + TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` + IP_ADDR=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/local-ipv4) + + docker swarm init --advertise-addr $IP_ADDR + + # Create a script to get the join token + echo 'docker swarm join-token worker -q' > get_token.sh + chmod +x get_token.sh + while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; ./get_token.sh; } | nc -l 8080; done & + EOT tags = { @@ -41,14 +53,15 @@ resource "aws_instance" "worker" { associate_public_ip_address = true user_data = <<-EOT - #!/bin/bash - sudo yum update -y - sudo yum install -y docker - sudo service docker start - sudo usermod -a -G docker ec2-user - sudo chkconfig docker on - docker swarm join --token $(curl -s http://${aws_instance.manager.0.public_ip}:8080/token) ${aws_instance.manager.0.private_ip}:2377 - EOT + #!/bin/bash + MANAGER_IP="${aws_instance.manager.0.private_ip}" + sudo yum update -y + sudo yum install -y docker + sudo service docker start + sudo usermod -a -G docker ec2-user + sudo chkconfig docker on + docker swarm join --token $(curl -s http://$MANAGER_IP:8080/token) $MANAGER_IP:2377 + EOT tags = { Name = "worker-${count.index}"