# Coder のテンプレートを Tarraform で管理する


published: 2025-08-03

Coder はクラウド開発環境をセットアップするツールです。
ドキュメントを見ていたところ、テンプレートを Terraform で登録できると知りました。


![architecture.png](https://lab.enuesaa.dev/prototype/coder-server-templates-managed-by-terraform/architecture.png)

## 公式ドキュメント

- [coder.com: Chane Management](https://coder.com/docs/admin/templates/managing-templates/change-management)

さっそく試してみます。


## トークンを発行

Terraform から Coder へアクセスするにはトークンが必要です。
アカウント設定より発行できます。


![accountsetting.png](https://lab.enuesaa.dev/prototype/coder-server-templates-managed-by-terraform/accountsetting.png)

![tokenadd.png](https://lab.enuesaa.dev/prototype/coder-server-templates-managed-by-terraform/tokenadd.png)

![tokencreated.png](https://lab.enuesaa.dev/prototype/coder-server-templates-managed-by-terraform/tokencreated.png)

## Terraform を書く

コードを書きましょう。
1. で発行したトークンを terraform.tfvars にセットします。


## サンプルコード

### `templates/minimum/main.tf`

```tf
terraform {
  required_providers {
    coder = {
      source = "coder/coder"
    }
    docker = {
      source = "kreuzwerker/docker"
    }
  }
}

provider "docker" {}

data "coder_provisioner" "me" {}
data "coder_workspace" "me" {}
data "coder_workspace_owner" "me" {}

resource "coder_agent" "main" {
  arch = data.coder_provisioner.me.arch
  os   = "linux"
}

module "code-server" {
  source   = "registry.coder.com/coder/code-server/coder"
  version  = "~> 1.0"
  agent_id = coder_agent.main.id
  order    = 1
}

resource "docker_container" "workspace" {
  name       = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}"
  image      = "codercom/enterprise-base:ubuntu"
  entrypoint = ["sh", "-c", replace(coder_agent.main.init_script, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")]
  env        = ["CODER_AGENT_TOKEN=${coder_agent.main.token}"]

  host {
    host = "host.docker.internal"
    ip   = "host-gateway"
  }
}

```

### `templates/minimum/README.md`

```md
# minimum

ミニマムテンプレート

```

### `terraform.tfvars`

```tfvars
token = "" // TODO: トークンをセット

```

### `main.tf`

```tf
terraform {
  required_providers {
    coderd = {
      source = "coder/coderd"
    }
  }
}

variable "token" {
  description = "Coder token"
  type        = string
  sensitive   = true
}

provider "coderd" {
  url   = "http://127.0.0.1:3000"
  token = var.token
}

resource "coderd_template" "minimum" {
  name = "minimum"

  description = "minimum template"

  versions = [
    {
      name      = "v1"
      directory = "templates/minimum"
      active    = true
    },
  ]
}

```

### memos

Coder の Provider です

mark: `main.tf:4`

- [Terraform Registry: coderd Provider](https://registry.terraform.io/providers/coder/coderd/latest/docs)
Coder へアクセスするためのトークンです


mark: `main.tf:9`

coderd_template というリソースでテンプレートを管理できます。


mark: `main.tf:20`

- [Terraform Registry: coderd_template (Resource)](https://registry.terraform.io/providers/coder/coderd/latest/docs/resources/template)
ここで指定したディレクトリがテンプレートとして登録されます

mark: `main.tf:28`

## 登録する

Coder へ登録します。terraform apply を実行しましょう。


```bash
$ terraform apply

coderd_template.minimum: Creating...
coderd_template.minimum: Creation complete after 8s [id=9a0a42b9-1af9-a498-c031-a9a04d17ca9a]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

```


登録されました。


![registered.png](https://lab.enuesaa.dev/prototype/coder-server-templates-managed-by-terraform/registered.png)

## おわり

テンプレートを Terraform で管理できるのは良きですね。
画面でぽちぽち作るのと比べて、格段に楽でした。


## Links

- [coder.com: Chane Management](https://coder.com/docs/admin/templates/managing-templates/change-management)
- [Terraform Registry: coderd_template (Resource)](https://registry.terraform.io/providers/coder/coderd/latest/docs/resources/template)
