From 6d6273af7e38b10b4c9aa79f3a4b31ecd0ed9e0a Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 18 Dec 2023 10:17:50 +0200 Subject: initial helper --- org-buetow-helper/id_rsa.pub | 1 + org-buetow-helper/main.tf | 77 +++++++++++++++++++++++++++++++++++++++++ org-buetow-helper/user_data.tpl | 21 +++++++++++ org-buetow-helper/variables.tf | 5 +++ 4 files changed, 104 insertions(+) create mode 100644 org-buetow-helper/id_rsa.pub create mode 100644 org-buetow-helper/main.tf create mode 100644 org-buetow-helper/user_data.tpl create mode 100644 org-buetow-helper/variables.tf diff --git a/org-buetow-helper/id_rsa.pub b/org-buetow-helper/id_rsa.pub new file mode 100644 index 0000000..0185c3c --- /dev/null +++ b/org-buetow-helper/id_rsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNjjJiqpf7+tb7Ejy2wsTHrOzakG6kJN+zopASjRUrFrGWZXw3xyqMlGR0QhyXEleOEjMlV3SyFEmg4PvDiEnri1MLLVZ/mt24T99C7Hq3UsXXqqwjB1HbUMv6wfNwV3DabiJtdfhlN0F2k2GlYsC/N6Xi3Yt+LF1gW70wCaYB05hGOjiZhlkQbAVX29UqSxIJIa9G9+ZDv7pwB0J9qbKAgwr6kkGoqmiGI01qBixEO0FYs3h+l9R+XWQln4Uw5er/RlvLiqCKcLMzv1Q/pqlKL1wdDTR3ANvf2z7m7Z6GcQmfOuvrHHotEH9uoVOiB+RdeFU86U1mQuzo+hZUBstxC03s44VCYZ075wQe85i7CVDoaSVxyefPaAOOiWZbbyYMk/s+ewP21tIEiMERTm58WTmsouO2zbrwt5rWWWEA0b0hYM8QLEn7l05Lg+2Au052E++NUckqDGyrwPyTY3J7fOVkR+ddIYHZ7WW3djc67HOYbgIAm1cWuTQQttoaOp0= paul@computer diff --git a/org-buetow-helper/main.tf b/org-buetow-helper/main.tf new file mode 100644 index 0000000..99c7d4b --- /dev/null +++ b/org-buetow-helper/main.tf @@ -0,0 +1,77 @@ +terraform { + backend "s3" { + bucket = "org-buetow-tfstate" + key = "org-buetow-helper/terraform.tfstate" + region = "eu-central-1" + encrypt = true + } +} + +provider "aws" { + region = "eu-central-1" # or your preferred AWS region +} + +data "aws_region" "current" {} + +data "terraform_remote_state" "base_remote_state" { + backend = "s3" + config = { + bucket = "org-buetow-tfstate" + key = "org-buetow-base/terraform.tfstate" + region = "eu-central-1" + } +} + +data "template_file" "user_data" { + template = file("${path.module}/user_data.tpl") + + vars = { + region = data.aws_region.current.name + efs_id = data.terraform_remote_state.base_remote_state.outputs.my_self_hosted_services_efs_id + } +} + +# Get latest Amazon Linux 2 AMI +data "aws_ami" "amazon-linux-2" { + most_recent = true + owners = ["amazon"] + filter { + name = "name" + values = ["amzn2-ami-hvm*"] + } +} + +resource "aws_key_pair" "id_rsa_pub" { + key_name = "${var.environment}-id-rsa-pub" + public_key = file("${path.module}/id_rsa.pub") +} + +resource "aws_instance" "my_helper_instance" { + ami = data.aws_ami.amazon-linux-2.id + instance_type = "t2.micro" + key_name = aws_key_pair.id_rsa_pub.key_name + subnet_id = data.terraform_remote_state.base_remote_state.outputs.my_public_subnet_a_id + + vpc_security_group_ids = [ + data.terraform_remote_state.base_remote_state.outputs.allow_ssh_sg_id, + data.terraform_remote_state.base_remote_state.outputs.allow_web_sg_id, + data.terraform_remote_state.base_remote_state.outputs.allow_outbound_sg_id, + ] + user_data = data.template_file.user_data.rendered + + tags = { + Name = "${var.environment}-my-helper-instance" + } +} + +data "aws_route53_zone" "my_zone" { + name = "aws.buetow.org." # Replace with your domain name +} + +resource "aws_route53_record" "my_record" { + zone_id = data.aws_route53_zone.my_zone.zone_id + name = "helper.aws.buetow.org" # Replace with your desired subdomain or leave empty for root + type = "A" + ttl = "300" + records = [aws_instance.my_helper_instance.public_ip] +} diff --git a/org-buetow-helper/user_data.tpl b/org-buetow-helper/user_data.tpl new file mode 100644 index 0000000..b78fef1 --- /dev/null +++ b/org-buetow-helper/user_data.tpl @@ -0,0 +1,21 @@ +#!/bin/bash + +# Docker +sudo yum update -y +sudo amazon-linux-extras install docker -y +sudo service docker enable +sudo service docker start +sudo usermod -a -G docker ec2-user + +# Docker Compose +sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose +sudo chmod +x /usr/local/bin/docker-compose + +# EFS +yum install -y amazon-efs-utils +mkdir /mnt/efs +echo '${efs_id}.efs.${region}.amazonaws.com:/ /mnt/efs nfs4 defaults,vers=4.1 0 0' >> /etc/fstab +while ! mount -a; do + echo 'Retrying to mount file systems after 10s...' + sleep 10 +done diff --git a/org-buetow-helper/variables.tf b/org-buetow-helper/variables.tf new file mode 100644 index 0000000..6819c29 --- /dev/null +++ b/org-buetow-helper/variables.tf @@ -0,0 +1,5 @@ +variable "environment" { + description = "The production helper environment" + type = string + default = "production-helper" +} -- cgit v1.2.3