Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add aws-linux and aws-windows examples
  • Loading branch information
bpmct committed Mar 30, 2022
commit 65c9860979cea833fa0f3dd22a992fedf084d71c
14 changes: 14 additions & 0 deletions examples/aws-linux/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
name: Develop in Linux on AWS
description: Get started with Linux development on AWS (EC2).
tags: [cloud, aws]
---

## Supported features

- Persistent storage
- Start/stop

## User preferences

- Region
151 changes: 151 additions & 0 deletions examples/aws-linux/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
terraform {
required_providers {
coder = {
source = "coder/coder"
}
}
}

variable "access_key" {
description = <<EOT
Create an AWS access key to provision resources with Coder:
- https://console.aws.amazon.com/iam/home#/users

AWS Access Key
EOT
sensitive = true
}

variable "secret_key" {
description = <<EOT
AWS Secret Key
EOT
sensitive = true
}

variable "region" {
description = "What region should your workspace live in?"
default = "us-east-1"
validation {
condition = contains(["us-east-1", "us-east-2", "us-west-1", "us-west-2"], var.region)
error_message = "Invalid region!"
}
}

variable "disk_size" {
description = "Specify your disk size (GiBs)"
default = "20"
type = number
validation {
condition = (
var.disk_size >= 8 &&
var.disk_size <= 256
)
error_message = "Disk size must be between 8 and 256."
}
}

provider "aws" {
region = var.region
access_key = var.access_key
secret_key = var.secret_key
}

data "coder_workspace" "me" {
}

data "coder_agent_script" "dev" {
arch = "amd64"
auth = "aws-instance-identity"
os = "linux"
}

# assign a random name for the workspace
resource "random_string" "random" {
length = 8
special = false
}

data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"] # Canonical
}

resource "coder_agent" "dev" {
count = data.coder_workspace.me.transition == "start" ? 1 : 0
instance_id = aws_instance.dev[0].id
}

locals {
user_data_start = <<EOT
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
sudo -E -u ubuntu sh -c '${data.coder_agent_script.dev.value}'
--//--
EOT

user_data_end = <<EOT
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
sudo shutdown -h now
--//--
EOT
}

resource "aws_instance" "dev" {
# count = data.coder_workspace.me.transition == "start" ? 1 : 0
ami = data.aws_ami.ubuntu.id
availability_zone = "${var.region}a"
instance_type = "t3.micro"
count = 1

user_data = data.coder_workspace.me.transition == "start" ? local.user_data_start : local.user_data_end
tags = {
Name = "coder-${lower(random_string.random.result)}"
}

}
14 changes: 14 additions & 0 deletions examples/aws-windows/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
name: Develop in Windows on AWS
description: Get started with Windows development on AWS (EC2).
tags: [cloud, aws]
---

## Supported features

- Persistent storage
- Start/stop

## User preferences

- Region
100 changes: 100 additions & 0 deletions examples/aws-windows/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
terraform {
required_providers {
coder = {
source = "coder/coder"
}
}
}

variable "access_key" {
description = <<EOT
Create an AWS access key to provision resources with Coder:
- https://console.aws.amazon.com/iam/home#/users

AWS Access Key
EOT
sensitive = true
}

variable "secret_key" {
description = <<EOT
AWS Secret Key
EOT
sensitive = true
}

variable "region" {
description = "What region should your workspace live in?"
default = "us-east-1"
validation {
condition = contains(["us-east-1", "us-east-2", "us-west-1", "us-west-2"], var.region)
error_message = "Invalid region!"
}
}

provider "aws" {
region = var.region
access_key = var.access_key
secret_key = var.secret_key
}

data "coder_workspace" "me" {
}

data "coder_agent_script" "dev" {
arch = "amd64"
auth = "aws-instance-identity"
os = "windows"
}

# assign a random name for the workspace
resource "random_string" "random" {
length = 8
special = false
}

data "aws_ami" "windows" {
most_recent = true
owners = ["amazon"]

filter {
name = "name"
values = ["Windows_Server-2019-English-Full-Base-*"]
}
}

resource "coder_agent" "dev" {
count = data.coder_workspace.me.transition == "start" ? 1 : 0
instance_id = aws_instance.dev[0].id
}

locals {
user_data_start = <<EOT
<powershell>
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
${data.coder_agent_script.dev.value}
</powershell>
<persist>true</persist>
EOT

user_data_end = <<EOT
<powershell>
shutdown /s
</powershell>
<persist>true</persist>
EOT
}

resource "aws_instance" "dev" {
# count = data.coder_workspace.me.transition == "start" ? 1 : 0
ami = data.aws_ami.windows.id
availability_zone = "${var.region}a"
instance_type = "t3.micro"
count = 1

user_data = data.coder_workspace.me.transition == "start" ? local.user_data_start : local.user_data_end
tags = {
Name = "coder-${lower(random_string.random.result)}"
}

}