sacloud / terraform-provider-sakuracloud

Terraform provider for SakuraCloud
https://docs.usacloud.jp/terraform
Apache License 2.0
71 stars 23 forks source link

AppRun対応 #1200

Open hekki opened 20 hours ago

hekki commented 20 hours ago

背景

先日、さくらのクラウドの AppRun がリリースされました。 ref. https://manual.sakura.ad.jp/cloud/manual-sakura-apprun.html ref. https://manual.sakura.ad.jp/sakura-apprun-api/spec.html

このAppRunをTerraformからコントロールできるようにresource, data sourceを追加します。

設計

sakuracloud_apprun_application resource

sakuracloud_apprun_application resource ひとつでApplicationとTrafficの両方をコントロールします。 ApplicationのコントロールはAPIのリクエストボディをそのまま踏襲しています。

TrafficのコントロールはAPIのリクエストボディの version_name, is_latest_versionversion_index で隠蔽しています。 Application VersionがAPIのデフォルト(created_atの降順)で並んでいる前提で、indexを指定するようになっています。

    traffics {
      version_index = 0
      percent       = 100
    }
    traffics {
      version_index = 0
      percent       = 1
    }
    traffics {
      version_index = 2
      percent       = 99
    }

example

resource "sakuracloud_apprun_application" "foobar" {
  # アプリケーション本体の制御
  name            = "foobar"
  timeout_seconds = 60
  port            = 80
  min_scale       = 0
  max_scale       = 1
  components {
    name       = "compo1"
    max_cpu    = "0.1"
    max_memory = "256Mi"
    deploy_source {
      container_registry {
        image = "apprun-test.sakuracr.jp/test1:latest"
        server   = "apprun-test.sakuracr.jp"
        username = "user"
        password = "password"
      }
    }
    env {
      key   = "key"
      value = "value"
    }
    env {
      key   = "key2"
      value = "value2"
    }
    probe {
      http_get {
        path = "/"
        port = 80
        headers {
          name  = "name"
          value = "value"
        }
        headers {
          name  = "name2"
          value = "value2"
        }
      }
    }
  }

  # トラフィックの制御
    traffics {
      version_index = 0
      percent       = 100
    }
}

sakuracloud_apprun_application data source

Application名を指定してデータが参照できます。

example

data "sakuracloud_apprun_application" "foobar" {
  name = "foobar"
}

output "foobar" {
  value = data.sakuracloud_apprun_application.foobar
}

動作確認