😎

VSCodeの開発環境をCoderでサクッと作る Azure版

2023/10/17に公開

はじめに

先日以下の記事を拝見しました。
https://qiita.com/allJokin/items/e0d97d010d441c611ea5

記事中ではAWS上に環境を構築されていますが、Azureでも使えるようなので試してみます。

セットアップ

Azureの導入マニュアルは以下にあります。
https://coder.com/docs/v2/latest/platforms/azure

AWSの場合は、MarketPlaceでAMIが提供されていますが、Azureには無いようなので(泣)、
仕方なくインストールスクリプトからセットアップします。

ということで、適当に1台VMをセットアップします。
マニュアルはUbuntuになっていますが、RHELで導入してみます。
なお、Azure CLIが必要になるため、VMセットアップ後、インストールし、az loginでログインしておきます。

Coderのインストールスクリプトを実行します。
rpmパッケージをダウンロードしてきて、インストールするだけなのですぐ終わります。

インストール
$ curl -fsSL https://coder.com/install.sh | sh
Red Hat Enterprise Linux 8.6 (Ootpa)
Installing v2.3.0 of the amd64 rpm package from GitHub.

+ mkdir -p ~/.cache/coder
+ curl -#fL -o ~/.cache/coder/coder_2.3.0_linux_amd64.rpm.incomplete -C - https://github.com/coder/coder/releases/download/v2.3.0/coder_2.3.0_linux_amd64.rpm
######################################################################## 100.0%
+ mv ~/.cache/coder/coder_2.3.0_linux_amd64.rpm.incomplete ~/.cache/coder/coder_2.3.0_linux_amd64.rpm
+ sudo rpm -U ~/.cache/coder/coder_2.3.0_linux_amd64.rpm

rpm package has been installed.

To run a Coder server:

  # Start Coder now and on reboot
  $ sudo systemctl enable --now coder
  $ journalctl -u coder.service -b

  # Or just run the server directly
  $ coder server

  Configuring Coder: https://coder.com/docs/v2/latest/admin/configure

To connect to a Coder deployment:

  $ coder login <deployment url>

$ 

続いて起動します。
起動ログにWebUIのURLが記載されているので、そのURLにアクセスします。
(以降、URL等一部伏せ字にしてます)

起動
$ sudo systemctl enable --now coder
$
$ journalctl -u coder.service --no-pager
-- Logs begin at Tue 2023-10-03 15:36:50 JST, end at Mon 2023-10-16 20:01:23 JST. --
Oct 16 19:57:07 rhel8 systemd[1]: Starting "Coder - Self-hosted developer workspaces on your infra"...
Oct 16 19:57:07 rhel8 coder[28440]: Started HTTP listener at http://127.0.0.1:3000
Oct 16 19:57:07 rhel8 coder[28440]: Using built-in PostgreSQL (/home/coder/.config/coderv2/postgres)
Oct 16 19:57:13 rhel8 coder[28440]: Opening tunnel so workspaces can connect to your deployment. For production scenarios, specify an external access URL
Oct 16 19:57:17 rhel8 coder[28440]: Using tunnel in US East Pittsburgh with latency 225.725681ms.
Oct 16 19:57:18 rhel8 coder[28440]: View the Web UI: https://xxxxxxxxxxxxxx.pit-1.try.coder.app
Oct 16 19:57:24 rhel8 coder[28440]: ==> Logs will stream in below (press ctrl+c to gracefully exit):
Oct 16 19:57:24 rhel8 coder[28440]: 2023-10-16 10:57:24.544 [info]  coderd.inmem-provisionerd-vibrant_leakey3: starting in-memory provisioner daemon
Oct 16 19:57:24 rhel8 coder[28440]: 2023-10-16 10:57:24.544 [info]  provisionerd: successfully connected to coderd
Oct 16 19:57:24 rhel8 coder[28440]: 2023-10-16 10:57:24.545 [info]  coderd.inmem-provisionerd-cool_ritchie8: starting in-memory provisioner daemon
Oct 16 19:57:24 rhel8 coder[28440]: 2023-10-16 10:57:24.545 [info]  provisionerd: successfully connected to coderd
Oct 16 19:57:24 rhel8 coder[28440]: 2023-10-16 10:57:24.545 [info]  coderd.inmem-provisionerd-recursing_meitner7: starting in-memory provisioner daemon
Oct 16 19:57:24 rhel8 coder[28440]: 2023-10-16 10:57:24.545 [info]  provisionerd: successfully connected to coderd
Oct 16 19:57:24 rhel8 systemd[1]: Started "Coder - Self-hosted developer workspaces on your infra".

アクセスすると、以下のような画面が表示されます。
アカウントの作成が必要なため、ユーザー名、メールアドレス、パスワードを入力します。
Enterpriseプランは一旦不要なので、トライアルのチェックボックスはオフにしました。

VM

続いて、VM側でログインコマンドを実行します。
トークンの入力が必要になるので、指定されたURLにアクセスしトークンをコピーした後、
VM側でトークンを入力します。

corderログイン
$ coder login xxxxxxxxxxxxxx.pit-1.try.coder.app
Open the following in your browser:

        https://xxxxxxxxxxxxxx.pit-1.try.coder.app/cli-auth

> Paste your token here: mXQ17YbN0G-xxxxxxxxxxxxxxxxxxxxxx
> Welcome to Coder, muka18! You're authenticated.

VM

続いて、テンプレートを作成します。
まずは初期化。

$ coder template init
A template defines infrastructure as code to be provisioned for individual
developer workspaces. Select an example to be copied to the active directory:

Extracting  azure-linux  to ./azure-linux...
Create your template by running:
 cd ./azure-linux && coder templates create 

Examples provide a starting point and are expected to be edited! 🎨

Azureで作成するので、「Develop in Linux on Azure」を選択します。
VM

次に、coderユーザが作成されているため、Azure CLIの認証情報をcoderユーザのホームディレクトリにコピーします。
マニュアルにも書かれていますが、これを行わないとcoder templates createが失敗します。
ログに次のコマンドをアナウンスするのであれば、この情報も入れておいてほしいですね…。

$ sudo cp -r ~/.azure /home/coder/.azure
$ sudo chown -R coder:coder /home/coder/.azure/

さて、準備ができたらテンプレートの作成です。

テンプレートの作成
$ cd ./azure-linux && coder templates create
WARN: No .terraform.lock.hcl file found
  | When provisioning, Coder will be unable to cache providers without a lockfile and must download them from the internet each time.
  | Create one by running  terraform init  in your template directory.
> Upload "."? (yes/no)yes
==> ⧗ Queued
=== ✔ Queued [0ms]
==> ⧗ Running
=== ✔ Running [8ms]
==> ⧗ Setting up
=== ✔ Setting up [0ms]
==> ⧗ Parsing template parameters
=== ✔ Parsing template parameters [11ms]
==> ⧗ Detecting persistent resources
2023-10-17 19:41:13.483+09:00 Terraform 1.4.6
2023-10-17 19:41:16.711+09:00 data.coder_parameter.home_size: Refreshing...
2023-10-17 19:41:16.711+09:00 data.coder_parameter.location: Refreshing...
2023-10-17 19:41:16.711+09:00 data.coder_workspace.me: Refreshing...
2023-10-17 19:41:16.711+09:00 data.coder_parameter.instance_type: Refreshing...
2023-10-17 19:41:16.762+09:00 data.coder_workspace.me: Refresh complete after 0s [id=4cac9a89-7f73-417b-92b9-62412be43641]
2023-10-17 19:41:16.762+09:00 data.coder_parameter.instance_type: Refresh complete after 0s [id=faf66180-4aae-4815-8fa1-76884bf685a4]
2023-10-17 19:41:16.762+09:00 data.coder_parameter.home_size: Refresh complete after 0s [id=0f9de699-2082-416c-82a5-68d38a3dd9c7]
2023-10-17 19:41:16.762+09:00 data.coder_parameter.location: Refresh complete after 0s [id=c1ee92f6-a6c8-4f23-86df-582833793fe0]
2023-10-17 19:42:44.102+09:00 tls_private_key.dummy: Plan to create
2023-10-17 19:42:44.102+09:00 coder_agent.main: Plan to create
2023-10-17 19:42:44.102+09:00 azurerm_resource_group.main: Plan to create
2023-10-17 19:42:44.102+09:00 azurerm_managed_disk.home: Plan to create
2023-10-17 19:42:44.102+09:00 azurerm_virtual_network.main: Plan to create
2023-10-17 19:42:44.102+09:00 azurerm_subnet.internal: Plan to create
2023-10-17 19:42:44.103+09:00 coder_metadata.home_info: Plan to create
2023-10-17 19:42:44.103+09:00 azurerm_network_interface.main: Plan to create
2023-10-17 19:42:44.103+09:00 azurerm_linux_virtual_machine.main[0]: Plan to create
2023-10-17 19:42:44.103+09:00 azurerm_virtual_machine_data_disk_attachment.home[0]: Plan to create
2023-10-17 19:42:44.103+09:00 coder_metadata.workspace_info[0]: Plan to create
2023-10-17 19:42:44.103+09:00 Plan: 11 to add, 0 to change, 0 to destroy.
=== ✔ Detecting persistent resources [99548ms]
==> ⧗ Detecting ephemeral resources
2023-10-17 19:42:49.140+09:00 Terraform 1.4.6
2023-10-17 19:42:51.501+09:00 data.coder_workspace.me: Refreshing...
2023-10-17 19:42:51.501+09:00 data.coder_parameter.home_size: Refreshing...
2023-10-17 19:42:51.501+09:00 data.coder_parameter.instance_type: Refreshing...
2023-10-17 19:42:51.501+09:00 data.coder_parameter.location: Refreshing...
2023-10-17 19:42:51.516+09:00 data.coder_parameter.instance_type: Refresh complete after 0s [id=320e3d51-8878-49e1-9c6a-4d76b21d8b2c]
2023-10-17 19:42:51.516+09:00 data.coder_parameter.location: Refresh complete after 0s [id=a8ab1933-d11b-4d97-9de3-25336130e42e]
2023-10-17 19:42:51.516+09:00 data.coder_workspace.me: Refresh complete after 1s [id=7efede9a-5f57-4c1c-94a1-100f08bc4982]
2023-10-17 19:42:51.516+09:00 data.coder_parameter.home_size: Refresh complete after 0s [id=ad5dd324-384c-48ed-94c0-7e139c9a959c]
2023-10-17 19:43:04.739+09:00 coder_agent.main: Plan to create
2023-10-17 19:43:04.739+09:00 tls_private_key.dummy: Plan to create
2023-10-17 19:43:04.739+09:00 azurerm_resource_group.main: Plan to create
2023-10-17 19:43:04.739+09:00 azurerm_managed_disk.home: Plan to create
2023-10-17 19:43:04.739+09:00 azurerm_virtual_network.main: Plan to create
2023-10-17 19:43:04.739+09:00 coder_metadata.home_info: Plan to create
2023-10-17 19:43:04.739+09:00 azurerm_subnet.internal: Plan to create
2023-10-17 19:43:04.739+09:00 azurerm_network_interface.main: Plan to create
2023-10-17 19:43:04.739+09:00 Plan: 8 to add, 0 to change, 0 to destroy.
=== ✔ Detecting ephemeral resources [20623ms]
==> ⧗ Cleaning Up
=== ✔ Cleaning Up [91ms]
┌─────────────────────────────────────────────────────────┐
│ Template Preview                                        │
├─────────────────────────────────────────────────────────┤
│ RESOURCE                                                │
├─────────────────────────────────────────────────────────┤
│ azurerm_linux_virtual_machine.main                      │
│ └─ main (linux, amd64)                                  │
├─────────────────────────────────────────────────────────┤
│ azurerm_managed_disk.home                               │
├─────────────────────────────────────────────────────────┤
│ azurerm_network_interface.main                          │
├─────────────────────────────────────────────────────────┤
│ azurerm_resource_group.main                             │
├─────────────────────────────────────────────────────────┤
│ azurerm_subnet.internal                                 │
├─────────────────────────────────────────────────────────┤
│ azurerm_virtual_machine_data_disk_attachment.home       │
├─────────────────────────────────────────────────────────┤
│ azurerm_virtual_network.main                            │
├─────────────────────────────────────────────────────────┤
│ tls_private_key.dummy                                   │
└─────────────────────────────────────────────────────────┘
> Confirm create? (yes/no)yes

The azure-linux template has been created at Oct 17
19:45:28! Developers can provision a workspace with this template using:

   coder create --template="azure-linux" [workspace name] 

テンプレートができました。

開発環境の作成

引き続きコマンドで実施してもよいのですが、素敵なGUIがあるので、そちらを使います。

GUIにアクセスし、Templatesタブをクリック。
作成した「azure-linux」のテンプレートが表示されているので、「→ Create Workspace」をクリックします。

VM

ワークスペース名を入力した後、パラメータ(ディスクサイズ、インスタンスサイズ、リージョン)を選択して「Create Workspace」をクリック。

VM

画面が切り替わって、セットアップのログが流れます。
しばらく待ちます。2分ほどで出来上がりました。

VM

Workspaceタブから開発環境にアクセスできます。
参考にさせていただいた記事を見ると、AWSのテンプレートだとcoder-serverのボタンがありますが、azure-linuxのテンプレートだと、VScode Desktopしかないので、テンプレートごとに使える機能が異なるようです。

VM

「VS Code Desktop」をクリックすると、VSCodeが起動して、開発環境にリモート接続できます。
※VSCodeにCoder Remoteの拡張機能が入っていない場合、インストールする必要があります。

VM

まとめ

マニュアルをななめ読みして実行してしまい、テンプレート作成のところでハマりましたが、
それ以外はサクッとできました。

テンプレートの作成まで終わっていれば、開発環境の作成(複製)は本当にサクッとできそうです。

おまけ

Azureポータルでどんなリソースが出来ているか見ておきます。

Vnetと仮想マシンだけですね。

VM

Discussion