🦔

terraform×Snowflake0.15→2.8対応で詰まったとこメモ

に公開

account廃止されましたねー。で、
公式ドキュメントのサンプル
を参考に単純にaccount→account_nameにすればいいんだなと思いますよね。で、terraform実行したら

  ╷
  │ Error: 260000: account is empty
  │
  │   with provider["registry.terraform.io/snowflakedb/snowflake"],
  │   on provider.tf line 2, in provider "snowflake":
  │    2: provider "snowflake" {
  │

ですよ。accountは死んだはずでは???
.terragrunt-cacheの中に生成されたprovider.tfを確認してもaccount_nameの中身はちゃんとあるし...

と思ってたらこれorganization_nameがなくても発生するんですねー。

ということでsnowflakeで

SELECT CURRENT_ORGANIZATION_NAME();

実行・取得して環境変数に設定、してヨシ!と思ったら今度は404でエラー...

  ╷
  │ Error: open snowflake connection: 261004 (08004): failed to auth for unknown reason. HTTP: 404, URL: https://{ORGANIZATION_NAME}-{ACCOUNT_NAME}.XXXX
  │
  │   with provider["registry.terraform.io/snowflakedb/snowflake"],
  │   on provider.tf line 2, in provider "snowflake":
  │    2: provider "snowflake" {
  │
  ╵

account→account_nameと名前変えるだけではダメなんですねー...

SELECT CURRENT_ACCOUNT_NAME()

で取得してやつを設定したところちゃんと動きました。こちらのが自然な感じしますね。

環境変数から取得している場合root.hclはこんな感じになります。これを子がincludeすればオッケーです。

generate "provider" {
  path      = "provider.tf"
  if_exists = "overwrite"
  contents  = <<EOF
provider "snowflake" {
  account_name  = "${get_env("SNOWFLAKE_ACCOUNT", "")}"
  organization_name  = "${get_env("SNOWFLAKE_ORGANIZATION_NAME", "")}"
  user = "${get_env("SNOWFLAKE_USER", "")}"
  password = "${get_env("SNOWFLAKE_PASSWORD", "")}"
  role     = "${get_env("SNOWFLAKE_ROLE", "")}"
 }
EOF
}

Discussion