VSCodeの開発環境をCoderでサクッと作る Azure版
はじめに
先日以下の記事を拝見しました。
記事中ではAWS上に環境を構築されていますが、Azureでも使えるようなので試してみます。
セットアップ
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側でログインコマンドを実行します。
トークンの入力が必要になるので、指定された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.
続いて、テンプレートを作成します。
まずは初期化。
$ 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」を選択します。
次に、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」をクリックします。
ワークスペース名を入力した後、パラメータ(ディスクサイズ、インスタンスサイズ、リージョン)を選択して「Create Workspace」をクリック。
画面が切り替わって、セットアップのログが流れます。
しばらく待ちます。2分ほどで出来上がりました。
Workspaceタブから開発環境にアクセスできます。
参考にさせていただいた記事を見ると、AWSのテンプレートだとcoder-serverのボタンがありますが、azure-linuxのテンプレートだと、VScode Desktopしかないので、テンプレートごとに使える機能が異なるようです。
「VS Code Desktop」をクリックすると、VSCodeが起動して、開発環境にリモート接続できます。
※VSCodeにCoder Remoteの拡張機能が入っていない場合、インストールする必要があります。
まとめ
マニュアルをななめ読みして実行してしまい、テンプレート作成のところでハマりましたが、
それ以外はサクッとできました。
テンプレートの作成まで終わっていれば、開発環境の作成(複製)は本当にサクッとできそうです。
おまけ
Azureポータルでどんなリソースが出来ているか見ておきます。
Vnetと仮想マシンだけですね。
Discussion