sacloud / terraform-provider-sakuracloud

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

エンハンスドロードバランサーの生成でzoneが求められる #1101

Open MasaGon opened 1 year ago

MasaGon commented 1 year ago

CDK for Terraformから利用しています。

[cdktf.json]

{
  "language": "typescript",
  "app": "npx ts-node main.ts",
  "projectId": "fcd22e5f-21c6-4069-b918-6ef7b3af5560",
  "sendCrashReports": "true",
  "terraformProviders": [
    "sacloud/sakuracloud@~> 2.24"
  ],
  "terraformModules": [],
  "context": {}
}

[cdk.tf.json]

    "sakuracloud_proxylb": {
      "hoge-lb": {
        "//": {
          "metadata": {
            "path": "front/hoge-lb",
            "uniqueId": "hoge-lb"
          }
        },
        "bind_port": [
          {
            "port": 80,
            "proxy_mode": "http"
          }
        ],
        "gzip": true,
        "health_check": {
          "path": "/",
          "protocol": "http"
        },
        "name": "hoge-lb",
        "plan": 100,
        "proxy_protocol": true,
        "region": "tk1",
        "server": [
          {
            "ip_address": "${sakuracloud_server.hoge-web-1.ip_address}",
            "port": 80
          },
          {
            "ip_address": "${sakuracloud_server.hoge-web-2.ip_address}",
            "port": 80
          }
        ],
        "sticky_session": true,
        "vip_failover": true
      }
    },

下記のエラーが出ました。

[error]

front  ╷
       │ Error: expected zone to be one of [tk1a tk1b], got is1b
       │ 
       │   with sakuracloud_proxylb.hoge-lb (hoge-lb),
       │   on cdk.tf.json line 132, in resource.sakuracloud_proxylb.hoge-lb (hoge-lb):
       │  132:       }
       │

仕様では、zoneの代わりにregionが求められているようです。 https://docs.usacloud.jp/terraform/r/proxylb/

こちら、さくらクラウドのAPI側の問題でしょうか?

MasaGon commented 1 year ago

Providerのdefault_zoneを設定することで回避できました。

// Deploy Zones
const zones = ['tk1a', 'tk1b'] // 東京第1, 東京第2
const archiveImages = ['113501244064', '113501244081'] // Ubuntu Server 22.04.2 LTS 64bit (cloudimg)
const defaultZoneIndex = 1 // 東京第2

// Provider
new SakuracloudProvider(this, 'sakura-cloud', {
  token: process.env.TOKEN,
  secret: process.env.SECRET,
  zones,
  zone: zones[defaultZoneIndex], // Default
  defaultZone: zones[defaultZoneIndex], // Default for Global Resources
})
yamamoto-febc commented 1 year ago

ご報告ありがとうございます。

プロバイダーのzonesは利用可能なゾーンを絞るためのものです。 また、プロバイダーのzoneは各リソース側でゾーンが指定されなかった場合に利用するゾーンで、デフォルトはis1bになっています。

zonesを指定する際はzoneの値が含まれていないとエラーになります。 参考: 以下でバリデーションされる https://github.com/sacloud/terraform-provider-sakuracloud/blob/82a97e60af1b318b8626a6a114d3b038bb0fcd5f/sakuracloud/structure.go#L145

このため上で挙げていただいたようにプロバイダーを設定することで回避可能と思います。