File size: 2,027 Bytes
287a0bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
terraform {
  required_providers {
    render = {
      source  = "jackall3n/render"
      version = "~> 1.3.0"
    }
  }
}

variable "render_api_token" {
  sensitive = true
}

variable "render_user_email" {
  sensitive = true
}

provider "render" {
  api_key = var.render_api_token
}

data "render_owner" "render_owner" {
  email = var.render_user_email
}

resource "render_service" "chroma" {
  name        = "chroma"
  owner       = data.render_owner.render_owner.id
  type        = "web_service"
  auto_deploy = true

  env_vars = concat([{
    key   = "IS_PERSISTENT"
    value = "1"
    },
    {
      key   = "PERSIST_DIRECTORY"
      value = var.chroma_data_volume_mount_path
    },
    ],
    var.enable_auth ? [{
      key   = "CHROMA_SERVER_AUTH_CREDENTIALS_PROVIDER"
      value = "chromadb.auth.token.TokenConfigServerAuthCredentialsProvider"
      },
      {
        key   = "CHROMA_SERVER_AUTH_CREDENTIALS"
        value = "${local.token_auth_credentials.token}"
      },
      {
        key   = "CHROMA_SERVER_AUTH_PROVIDER"
        value = var.auth_type
    }] : []
  )

  image = {
    owner_id   = data.render_owner.render_owner.id
    image_path = "${var.chroma_image_reg_url}:${var.chroma_release}"
  }

  web_service_details = {
    env               = "image"
    plan              = var.render_plan
    region            = var.region
    health_check_path = "/api/v1/heartbeat"
    disk = {
      name       = var.chroma_data_volume_device_name
      mount_path = var.chroma_data_volume_mount_path
      size_gb    = var.chroma_data_volume_size
    }
    docker = {
      command = "uvicorn chromadb.app:app --reload --workers 1 --host 0.0.0.0 --port 80 --log-config chromadb/log_config.yml --timeout-keep-alive 30"
      path    = "./Dockerfile"
    }
  }
}

output "service_id" {
  value = render_service.chroma.id
}

output "instance_url" {
  value = render_service.chroma.web_service_details.url
}

output "chroma_auth_token" {
  value     = random_password.chroma_token.result
  sensitive = true
}