summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2023-12-18 10:17:50 +0200
committerPaul Buetow <paul@buetow.org>2023-12-18 10:17:50 +0200
commit6d6273af7e38b10b4c9aa79f3a4b31ecd0ed9e0a (patch)
tree191efaec6bac1b51168ef438daf7aa91da08b133
parent75660a7e4504b9ba13c3b0453664f1468a9682c8 (diff)
initial helper
-rw-r--r--org-buetow-helper/id_rsa.pub1
-rw-r--r--org-buetow-helper/main.tf77
-rw-r--r--org-buetow-helper/user_data.tpl21
-rw-r--r--org-buetow-helper/variables.tf5
4 files changed, 104 insertions, 0 deletions
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"
+}