Skip to content
Snippets Groups Projects
main.tf 2.22 KiB
Newer Older
Nathan Rodet's avatar
Nathan Rodet committed
############
# Public IP
############

resource "scaleway_instance_ip" "public_ip" {
  count      = var.INSTANCES_COUNT
  project_id = var.SCW_PROJECT_ID
}

################
# DOMAIN RECORD
################

resource "scaleway_domain_record" "subdomain_record" {
  count    = var.INSTANCES_COUNT
  dns_zone = "daag.alpha.grandlyon.com"
Nathan Rodet's avatar
Nathan Rodet committed
  name     = "${var.ENVIRONMENT}-${count.index}"
Nathan Rodet's avatar
Nathan Rodet committed
  type     = "A"
  data     = scaleway_instance_ip.public_ip[count.index].address
  ttl      = 3600
}

resource "scaleway_domain_record" "host_subdomain_record" {
  count    = var.INSTANCES_COUNT
  dns_zone = "daag.alpha.grandlyon.com"
Nathan Rodet's avatar
Nathan Rodet committed
  name     = "*.${var.ENVIRONMENT}-${count.index}"
Nathan Rodet's avatar
Nathan Rodet committed
  type     = "A"
  data     = scaleway_instance_ip.public_ip[count.index].address
  ttl      = 3600
}

##################################
## Security group - Allowed ports
##################################

resource "scaleway_instance_security_group" "www" {
  project_id              = var.SCW_PROJECT_ID
Nathan Rodet's avatar
Nathan Rodet committed
  name                    = "security-group-${var.ENVIRONMENT}"
Nathan Rodet's avatar
Nathan Rodet committed
  inbound_default_policy  = "drop"
  outbound_default_policy = "accept"

  inbound_rule {
    action = "accept"
    port   = "443"
  }
Nathan Rodet's avatar
Nathan Rodet committed
  inbound_rule {
    action = "accept"
    port   = "22"
  }

Nathan Rodet's avatar
Nathan Rodet committed
}

##############################
## VM Instance - User Machine
##############################

resource "scaleway_instance_server" "user_instance_server" {
  count             = var.INSTANCES_COUNT
  project_id        = var.SCW_PROJECT_ID
Nathan Rodet's avatar
Nathan Rodet committed
  name              = "instance${count.index}-${var.ENVIRONMENT}"
Nathan Rodet's avatar
Nathan Rodet committed
  type              = "DEV1-L"
  image             = "ubuntu_jammy"
  ip_id             = scaleway_instance_ip.public_ip[count.index].id
  security_group_id = scaleway_instance_security_group.www.id

Nathan Rodet's avatar
Nathan Rodet committed
  user_data = {
    project_domain = var.PROJECT_DOMAIN
Nathan Rodet's avatar
Nathan Rodet committed
    atrium_count_index = count.index
Nathan Rodet's avatar
Nathan Rodet committed
    atrium_hostname = scaleway_domain_record.subdomain_record[count.index].name
Nathan Rodet's avatar
Nathan Rodet committed
    atrium_letsencrypt_email = var.LETSENCRYPT_EMAIL
    user_password = var.USER_PASSWORD
Nathan Rodet's avatar
Nathan Rodet committed
    cloud-init = file("../instance-scripts/cloud-init.yml")
Nathan Rodet's avatar
Nathan Rodet committed
  }
Nathan Rodet's avatar
Nathan Rodet committed
  depends_on = [
Nathan Rodet's avatar
Nathan Rodet committed
    scaleway_instance_ip.public_ip,
    scaleway_instance_security_group.www,
    scaleway_domain_record.host_subdomain_record,
    scaleway_domain_record.subdomain_record
Nathan Rodet's avatar
Nathan Rodet committed
  ]