Skip to content

docs: use marketplace for AWS quickstart #6233

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
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
Binary file added docs/images/quickstart/aws/aws-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/images/quickstart/aws/aws1.png
Binary file not shown.
Binary file removed docs/images/quickstart/aws/aws10.png
Binary file not shown.
Binary file removed docs/images/quickstart/aws/aws11.png
Binary file not shown.
Binary file removed docs/images/quickstart/aws/aws2.png
Binary file not shown.
Binary file removed docs/images/quickstart/aws/aws3.png
Binary file not shown.
Binary file removed docs/images/quickstart/aws/aws4.png
Binary file not shown.
Binary file removed docs/images/quickstart/aws/aws5.png
Binary file not shown.
Binary file removed docs/images/quickstart/aws/aws6.png
Binary file not shown.
Binary file removed docs/images/quickstart/aws/aws8.png
Binary file not shown.
Binary file removed docs/images/quickstart/aws/aws9.png
Binary file not shown.
Binary file added docs/images/quickstart/aws/instance-address.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/quickstart/aws/launch.mp4
Binary file not shown.
Binary file added docs/images/quickstart/aws/marketplace.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/quickstart/aws/modify-iam.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/quickstart/aws/security-groups.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/quickstart/aws/workspace.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
151 changes: 32 additions & 119 deletions docs/quickstart/aws.md
Original file line number Diff line number Diff line change
@@ -1,148 +1,61 @@
# Amazon Web Services

This quickstart shows you how to set up the Coder server on AWS which will
provision AWS-hosted, Linux workspaces.
This quickstart is designed to get you up and running with a Coder proof-of-concept VM on AWS EC2 using a [Coder-provided AMI](https://github.com/coder/packages). If you are familiar with EC2 however, you can use our [install script](../install/install.sh.md) to run Coder on any popular Linux distribution.

## Requirements

This quickstart assumes you are assigned the `AdministratorAccess` policy on AWS.
This quickstart assumes your AWS account has `AmazonEC2FullAccess` permissions.

## Setting Up Security Groups for EC2
## Launch a Coder instance from the from AWS Marketplace

To set up a security group for an EC2 instance, navigate to the AWS EC2 Dashboard. In the side panel click `Security Groups`.
We publish an Ubuntu 22.04 AMI with Coder and Docker pre-installed. Search for `Coder` in the EC2 "Launch an Instance" screen or [launch directly from the marketplace](https://aws.amazon.com/marketplace/pp/prodview-5gxjyur2vc7rg).

In the upper right hand corner, click `Create Security Group`. In the creator screen, name the security group something relevant to the EC2 instance you will create.
![Coder on AWS Marketplace](../images/quickstart/aws/marketplace.png)

<img src="../images/quickstart/aws/aws1.png">
Be sure to keep the default firewall (SecurityGroup) options checked so you can connect over HTTP, HTTPS, and SSH.

For ease of use, we are going to set this up using the simplest rules.
![AWS Security Groups](../images/quickstart/aws/security-groups.png)

<img src="../images/quickstart/aws/aws2.png">
We recommend at least 4 cores and 16 GB memory if you plan on provisioning Docker containers as workspaces on this EC2 instance. Keep in mind this quickstart is intended for proof-of-concept deployments and you should adjust your infrastructure when preparing for production use.

Create a new `Inbound Rule` that allows for SSH from your computer’s IP address.
Be sure to add a keypair so that you can connect over SSH to further [configure Coder](../admin/configure.md).

You’ve now created a security group that will be used by your EC2 instance.
After launching the instance, wait 30 seconds and navigate to the public IPv4 address. You should be redirected to a public tunnel URL.

## Setting Up Your EC2 instance
<video playsinline loop>
<source src="https://github.com/coder/coder/blob/main/docs/images/quickstart/aws/launch.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>

On the EC2 dashboard, click `Instances`. This will take you to all the EC2 instances you have created. Click `Launch New Instance`. Name the EC2 instance following the naming convention of your choice.
That's all! Use the UI to create your first user, template, and workspace. We recommend starting with a Docker template since the instance has Docker pre-installed.

<img src="../images/quickstart/aws/aws3.png">
![Coder Workspace and IDE in AWS EC2](../images/quickstart/aws/workspace.png)

For this tutorial, we are going to launch this as the base Ubuntu server.
## Configuring Coder server

For the `Create key pair`, we are using ED25519 and `.pem` as we will SSH into the instance later in the tutorial.
<img src="../images/quickstart/aws/aws4.png">
Coder is primarily configured by server-side flags and environment variables. Given you created or added key-pairs when launching the instance, you can [configure your Coder deployment](../admin/configure.md) by logging in via SSH or using the console:

Next, under `Network Settings`, change your Firewall security group to Select existing security group and from the resulting dropdown, select the security group you created in the previous section.

You don’t need to change anything else - click `Launch Instance`.

<img src="../images/quickstart/aws/aws5.png">

It’ll take a few minutes for it to show up in your existing instances, so take a break as it starts up.

## SSHing into the EC2 instance

If you’ve launched a new EC2 instance following the previous steps of this tutorial, find the username for the EC2 instance [here](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html). The version launched in the previous steps was a version of the Amazon Linux so the username is `ubuntu`.

You will also need the IP address of the server. Click on the server in the `Instances` dashboard, and copy the IPv4 address

<img src="../images/quickstart/aws/aws6.png">

Now that we’ve gathered all the information you will need to SSH into your EC2 instance, on a terminal on your local system, navigate to the `.pem` file downloaded when you created the EC2 instance. Run the following command:

```console
chmod 400 [mykey].pem
```

This adds the required permissions for SSH-ing into an EC2 instance.

Run the following command in terminal, where `mykey` is the security key file, `username` is the username found above for the relevant EC2 operating system image, and the `ip-address` is the IPv4 address for the server:

```console
ssh -i [mykey].pem username@ip-address
```

Congrats you’ve SSH’d into the server.

## Install Coder

For this instance, we will run Coder as a system service, however you can run Coder a multitude of different ways. You can learn more about those [here](https://coder.com/docs/coder-oss/latest/install).

In the EC2 instance, run the following command to install Coder

```console
curl -fsSL https://coder.com/install.sh | sh
```

## Run Coder

Run the following command to start Coder as a system level service:

```console
sudo systemctl enable --now coder
```

The following command will get you information about the Coder launch service

```console
journalctl -u coder.service -b
```sh
ssh ubuntu@<ec2-public-IPv4>
```

This will return a series of Coder logs, however, embedded in the launch is the URL for accessing Coder.

<img src="../images/quickstart/aws/aws8.png">

In this instance, Coder can be accessed at the url `https://fccad1b6c901511b30cf2cf4fbd0973e.pit-1.try.coder.app`.

Copy the URL and run the following command to create the first user, either on your local machine or in the AWS EC2 instance terminal.

```console
coder login <url***.try.coder.app>
```

Fill out the prompts. Be sure to save use email and password as these are your admin username and password.

You can now access Coder on your local machine with the relevant `***.try.coder.app` URL and logging in with the username and password.
## Give developers EC2 workspaces (optional)

## Creating and Uploading Your First Template
Instead of running containers on the Coder instance, you can offer developers full EC2 instances with the [aws-linux](https://github.com/coder/coder/tree/main/examples/templates/aws-linux) template.

Run `coder template init` to create your first template. You’ll be given a list of possible templates. This tutorial will show you how to set up your Coder instance to create Linux based machines on AWS.
Before you add the AWS template from the dashboard or CLI, you'll need to modify the instance IAM role.

<img src="../images/quickstart/aws/aws9.png">
![Modify IAM role](../images/quickstart/aws/modify-iam.png)

Press `enter` to select `Develop in Linux` on AWS template. This will return the following:
You must create or select a role that has `EC2FullAccess` permissions or a limited [Coder-specific permissions policy](https://github.com/coder/coder/tree/main/examples/templates/aws-linux#required-permissions--policy).

<img src="../images/quickstart/aws/aws10.png">

Now, we must install the AWS CLI and authorize the template. Follow [these instructions to install the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) and [add your credentials](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html).

Coder runs as a system service under a system user `coder`. The `coder` user will require access to the AWS credentials to initialize the template and provision workspaces.

Run the following command to create a folder for the AWS credentials to live in:

```console
sudo mkdir /home/coder/.aws
```

Run the following commands to copy the AWS credentials and give the `coder` user access to them:

```console
sudo cp ~/.aws/credentials /home/coder/.aws/credentials
sudo chown coder:coder /home/coder/.aws/credentials
```

Navigate to the `./aws-linux` folder where you created your template and run the following command to put the template on your Coder instance.

```console
coder templates create
```
From there, you can import the AWS starter template in the dashboard and begin creating VM-based workspaces.

Congrats! You can now navigate to your Coder dashboard and use this Linux on AWS template to create a new workspace!
![Modify IAM role](../images/quickstart/aws/aws-linux.png)

## Next Steps
## Next steps

- [Port-forward](../networking/port-forwarding.md)
- [Learn more about template configuration](../templates.md)
- [Configure more IDEs](../ides/web-ides.md)
- [IDEs with Coder](../ides.md)
- [Writing custom templates for Coder](../templates.md)
- [Configure the Coder server](../admin/configure.md)
- [Use your own domain + TLS](../admin/configure.md#tls--reverse-proxy)