mirror of
https://github.com/coder/coder.git
synced 2025-07-13 21:36:50 +00:00
add: ECS example template (#3915)
* add: ECS example template * fix: empty main.tf * cleanup * rm: cluster & compute * set CPU & memory vars Co-authored-by: Ben Potter <ben@coder.com> Co-authored-by: Ben Potter <ben@coder.com>
This commit is contained in:
23
examples/templates/ecs-container/README.md
Normal file
23
examples/templates/ecs-container/README.md
Normal file
@ -0,0 +1,23 @@
|
||||
---
|
||||
name: Develop in an ECS-hosted container
|
||||
description: Get started with Linux development on AWS ECS.
|
||||
tags: [cloud, aws]
|
||||
---
|
||||
|
||||
# aws-ecs
|
||||
|
||||
This is a sample template for running a Coder workspace on ECS. It assumes there
|
||||
is a pre-existing ECS cluster with EC2-based compute to host the workspace.
|
||||
|
||||
## Architecture
|
||||
|
||||
This workspace is built using the following AWS resources:
|
||||
|
||||
- Task definition - the container definition, includes the image, command, volume(s)
|
||||
- ECS service - manages the task definition
|
||||
|
||||
## code-server
|
||||
|
||||
`code-server` is installed via the `startup_script` argument in the `coder_agent`
|
||||
resource block. The `coder_app` resource is defined to access `code-server` through
|
||||
the dashboard UI over `localhost:13337`.
|
113
examples/templates/ecs-container/main.tf
Normal file
113
examples/templates/ecs-container/main.tf
Normal file
@ -0,0 +1,113 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = "~> 4.28"
|
||||
}
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = "~> 0.4.9"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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"
|
||||
startup_script = <<EOT
|
||||
#!/bin/bash
|
||||
# install and start code-server
|
||||
curl -fsSL https://code-server.dev/install.sh | sh | tee code-server-install.log
|
||||
code-server --auth none --port 13337 | tee code-server-install.log &
|
||||
EOT
|
||||
}
|
||||
|
||||
resource "coder_app" "code-server" {
|
||||
agent_id = coder_agent.coder.id
|
||||
name = "code-server"
|
||||
icon = "/icon/code.svg"
|
||||
url = "http://localhost:13337?folder=/home/coder"
|
||||
relative_path = true
|
||||
}
|
Reference in New Issue
Block a user