initial AWS terraform (#180)

* initial AWS terraform
This commit is contained in:
3u13r 2022-09-27 14:02:56 +02:00 committed by GitHub
parent a6d201b761
commit 130c61ffcf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 612 additions and 0 deletions

View file

@ -0,0 +1,58 @@
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
locals {
name = "${var.name}-${lower(var.role)}"
}
resource "aws_launch_configuration" "control_plane_launch_config" {
name_prefix = local.name
image_id = var.image_id
instance_type = var.instance_type
iam_instance_profile = var.iam_instance_profile
metadata_options {
http_tokens = "required"
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_autoscaling_group" "control_plane_autoscaling_group" {
name = local.name
launch_configuration = aws_launch_configuration.control_plane_launch_config.name
min_size = 1
max_size = 10
desired_capacity = var.instance_count
vpc_zone_identifier = [var.subnetwork]
target_group_arns = var.target_group_arns
lifecycle {
create_before_destroy = true
}
tag {
key = "Name"
value = local.name
propagate_at_launch = true
}
tag {
key = "constellation-role"
value = var.role
propagate_at_launch = true
}
tag {
key = "constellation-uid"
value = var.uid
propagate_at_launch = true
}
}

View file

@ -0,0 +1,49 @@
variable "name" {
type = string
description = "Base name of the instance group."
}
variable "role" {
type = string
description = "The role of the instance group. Has to be 'ControlPlane' or 'Worker'."
}
variable "uid" {
type = string
description = "UID of the cluster. This is used for tags."
}
variable "instance_type" {
type = string
description = "Instance type for the nodes."
}
variable "instance_count" {
type = number
description = "Number of instances in the instance group."
}
variable "image_id" {
type = string
description = "Image ID for the nodes."
}
variable "disk_size" {
type = number
description = "Disk size for the nodes, in GB."
}
variable "target_group_arns" {
type = list(string)
description = "ARN of the target group."
}
variable "subnetwork" {
type = string
description = "Name of the subnetwork to use."
}
variable "iam_instance_profile" {
type = string
description = "IAM instance profile for the nodes."
}

View file

@ -0,0 +1,48 @@
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
resource "aws_lb" "front_end" {
name = var.name
internal = false
load_balancer_type = "network"
subnets = [var.subnet]
tags = {
Name = "loadbalancer"
}
enable_cross_zone_load_balancing = true
}
resource "aws_lb_target_group" "front_end" {
name = var.name
port = var.port
protocol = "TCP"
vpc_id = var.vpc
health_check {
port = var.port
protocol = "TCP"
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_lb_listener" "front_end" {
load_balancer_arn = aws_lb.front_end.arn
port = var.port
protocol = "TCP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.front_end.arn
}
}

View file

@ -0,0 +1,3 @@
output "target_group_arn" {
value = aws_lb_target_group.front_end.arn
}

View file

@ -0,0 +1,19 @@
variable "name" {
type = string
description = "Name of the load balancer."
}
variable "port" {
type = string
description = "Port of the load balancer."
}
variable "vpc" {
type = string
description = "ID of the VPC."
}
variable "subnet" {
type = string
description = "ID of the subnets."
}