mirror of https://github.com/coder/coder.git
126 lines
3.0 KiB
HCL
126 lines
3.0 KiB
HCL
terraform {
|
|
required_providers {
|
|
aws = {
|
|
source = "hashicorp/aws"
|
|
version = "~> 4.28"
|
|
}
|
|
coder = {
|
|
source = "coder/coder"
|
|
version = "0.6.10"
|
|
}
|
|
}
|
|
}
|
|
|
|
variable "ecs-cluster" {
|
|
description = "Input the ECS cluster ARN to host the workspace"
|
|
default = ""
|
|
}
|
|
variable "cpu" {
|
|
default = "1024"
|
|
}
|
|
|
|
variable "memory" {
|
|
default = "2048"
|
|
}
|
|
|
|
# configure AWS provider with creds present on Coder server host
|
|
provider "aws" {
|
|
shared_config_files = ["$HOME/.aws/config"]
|
|
shared_credentials_files = ["$HOME/.aws/credentials"]
|
|
}
|
|
|
|
# coder workspace, created as an ECS task definition
|
|
resource "aws_ecs_task_definition" "workspace" {
|
|
family = "coder"
|
|
|
|
requires_compatibilities = ["EC2"]
|
|
cpu = var.cpu
|
|
memory = var.memory
|
|
container_definitions = jsonencode([
|
|
{
|
|
name = "coder-workspace-${data.coder_workspace.me.id}"
|
|
image = "codercom/enterprise-base:ubuntu"
|
|
cpu = 1024
|
|
memory = 2048
|
|
essential = true
|
|
user = "coder"
|
|
command = ["sh", "-c", coder_agent.coder.init_script]
|
|
environment = [
|
|
{
|
|
"name" = "CODER_AGENT_TOKEN"
|
|
"value" = coder_agent.coder.token
|
|
}
|
|
]
|
|
mountPoints = [
|
|
{
|
|
# the name of the volume to mount
|
|
sourceVolume = "home-dir-${data.coder_workspace.me.id}"
|
|
# path on the container to mount the volume at
|
|
containerPath = "/home/coder"
|
|
}
|
|
]
|
|
portMappings = [
|
|
{
|
|
containerPort = 80
|
|
hostPort = 80
|
|
}
|
|
]
|
|
}
|
|
])
|
|
|
|
# workspace persistent volume definition
|
|
volume {
|
|
name = "home-dir-${data.coder_workspace.me.id}"
|
|
|
|
docker_volume_configuration {
|
|
# "shared" ensures that the disk is persisted upon workspace restart
|
|
scope = "shared"
|
|
autoprovision = true
|
|
driver = "local"
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "aws_ecs_service" "workspace" {
|
|
name = "workspace-${data.coder_workspace.me.id}"
|
|
cluster = var.ecs-cluster
|
|
task_definition = aws_ecs_task_definition.workspace.arn
|
|
# scale the service to zero when the workspace is stopped
|
|
desired_count = data.coder_workspace.me.start_count
|
|
}
|
|
|
|
data "coder_workspace" "me" {}
|
|
|
|
resource "coder_agent" "coder" {
|
|
arch = "amd64"
|
|
auth = "token"
|
|
os = "linux"
|
|
dir = "/home/coder"
|
|
|
|
login_before_ready = false
|
|
startup_script_timeout = 180
|
|
startup_script = <<-EOT
|
|
set -e
|
|
|
|
# install and start code-server
|
|
curl -fsSL https://code-server.dev/install.sh | sh -s -- --version 4.8.3
|
|
code-server --auth none --port 13337 >/tmp/code-server.log 2>&1 &
|
|
EOT
|
|
}
|
|
|
|
resource "coder_app" "code-server" {
|
|
agent_id = coder_agent.coder.id
|
|
slug = "code-server"
|
|
display_name = "code-server"
|
|
icon = "/icon/code.svg"
|
|
url = "http://localhost:13337?folder=/home/coder"
|
|
subdomain = false
|
|
share = "owner"
|
|
|
|
healthcheck {
|
|
url = "http://localhost:13337/healthz"
|
|
interval = 3
|
|
threshold = 10
|
|
}
|
|
}
|