对任何 beta 参数定义的任何 Google Cloud Platform (GCP) 资源进行地形改造都需要 google-beta
提供程序。是否应该使用 google-beta
提供商而不是或与 google
提供商一起使用?
换句话说,假设某个 Google Kubernetes Engine (GKE) 集群 $GKE_CLUSTER_NAME
存在于 GCP 项目 $GCP_PROJECT_NAME
中:
gcloud container clusters list \
--format="value(name)" \
--project=$GCP_PROJECT_NAME
#=>
. . .
$GKE_CLUSTER_NAME
. . .
启用配置连接器:
gcloud container clusters describe $GKE_CLUSTER_NAME \
--format=“value(addonsConfig.configConnectorConfig.enabled)” \
--zone=$GKE_CLUSTER_ZONE
#=>
True
Terraforming $GKE_CLUSTER_NAME
需要 container_cluster.tf
中的 google_container_cluster
资源定义,其中包含 config_connector_config
参数 (在 addons_config
block 内;more here )和 provider
参数(官方引用文档中缺少):
resource "google_container_cluster" "test" {
addons_config {
config_connector_config {
enabled = true
}
. . .
}
. . .
provider = google-beta
. . .
}
但不需要需要 providers.tf
中的 google-beta
provider
定义:
provider "google" {
project = ". . ."
}
terraform {
required_providers {
google = {
version = "~> 3.83.0"
}
}
}
此问题以及其他资源定义中缺少 provider
参数(例如 container_node_pool.tf
中的 google_container_node_pool
)会导致以下是 providers
命令的输出:
terraform providers
Providers required by configuration:
.
├── provider[registry.terraform.io/hashicorp/google] ~> 3.83.0
└── provider[registry.terraform.io/hashicorp/google-beta]
Providers required by state:
provider[registry.terraform.io/hashicorp/google]
provider[registry.terraform.io/hashicorp/google-beta]
在apply
命令刷新terraform.tfstate
状态文件后。
使用 beta 参数对 GCP 资源进行地形改造的方法是否更正确、更不易出错?或者,我应该运行 replace-provider
子命令:
terraform state replace-provider \
-auto-approve \
"hashicorp/google" \
"hashicorp/google-beta"
#=>
Terraform will perform the following actions:
~ Updating provider:
- registry.terraform.io/hashicorp/google
+ registry.terraform.io/hashicorp/google-beta
Changing 2 resources:
google_container_node_pool.$GKE_NODE_POOL_NAME
Successfully replaced provider for 1 resources.
并修改providers.tf
:
provider "google-beta" {
project = ". . ."
}
terraform {
required_providers {
google-beta = {
version = "~> 3.83.0"
}
}
}
这样providers
命令的输出是:
terraform providers
#=>
Providers required by configuration:
.
└── provider[registry.terraform.io/hashicorp/google-beta] ~> 3.83.0
Providers required by state:
provider[registry.terraform.io/hashicorp/google-beta]
在apply
命令刷新terraform.state
中的状态后?
最佳答案
您应该使用两者google
和google-beta
提供商。
在同一 providers.tf
中使用 google
和 google-beta
提供商是安全的>。 Terraform 将对需要 google-beta
提供程序的任何资源的请求发送到 Beta 端点:https://。 。 .googleapis.com/v1beta1/。 。 .
;即,使用 google-beta
提供程序与使用 beta
gcloud
组类似。
您应该:
在
providers.tf
中包含google
和google-beta
提供程序:provider "google" { project = ". . ." } provider "google-beta" { project = ". . ." } terraform { required_providers { google = { version = "~> 3.83.0" } google-beta = { version = "~> 3.83.0" } } }
对每个 GCP 资源使用
provider
参数:google-beta
对于任何具有 至少一项启用的 Beta 功能:resource "google_container_cluster" "beta_cluster" { . . . provider = google-beta . . . }
和
google
对于所有其他资源:resource "google_container_node_pool" "general_availability_node_pool" { . . . provider = google . . . }
在进行上述建议的两项更改并然后运行刷新
后,输出为
providers
命令现在应类似于以下内容:
terraform providers
#=>
Providers required by configuration:
.
├── provider[registry.terraform.io/hashicorp/google] ~> 3.83.0
└── provider[registry.terraform.io/hashicorp/google-beta] ~> 3.83.0
Providers required by state:
provider[registry.terraform.io/hashicorp/google]
provider[registry.terraform.io/hashicorp/google-beta]
您应该阅读官方文档。对于提供商版本 here .
关于google-cloud-platform - 对于带有 Beta 参数的 Google Cloud Platform 资源,正确的 Terraform 提供程序配置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69138644/