我正在使用 Terraform v1.0.0 并使用 AWS S3 和 AWS DynamoDB 创建远程后端,如Yevgeniy Brikman 的Terraform Up & Running中所述:
\nterraform apply
terraform { backend "S3" {} }
到我的代码中backend.hcl
包含所有相关参数的文件terraform init -backend-config=backend.hcl
现在我想将远程状态转换回本地状态,以便我可以安全地删除远程后端。Brikman 解释说,要做到这一点,必须删除backend
配置并调用terraform init
. 当我尝试这个时,我看到这个:
$ terraform init\nInitializing modules...\n\nInitializing the backend...\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Backend configuration changed\n\xe2\x94\x82 \n\xe2\x94\x82 A change in the backend configuration has been detected, which may require migrating …
Run Code Online (Sandbox Code Playgroud) # Using a single workspace:
terraform {
backend "remote" {
hostname = "app.terraform.io"
organization = "company"
workspaces {
name = "my-app-prod"
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于 Terraform 远程后端,是否有一种方法可以使用变量来指定组织/工作区名称而不是那里的硬编码值?
Terraform 文档似乎 也没有提及任何相关内容。
我最近将 Terraform 从 11.11 升级到 12.24,运行 0.12upgrade 后,访问远程 terraform_state 输出不再有效。
我得到的错误是:该对象没有名为“subnet_id”的属性
这是我的配置:
Repo 1(创建网络、子网等)
network
| main.tf
| output.tf
Run Code Online (Sandbox Code Playgroud)
output.tf 的内容(来自上面):
output "subnet_ids" {
value = openstack_networking_subnet_v2.openstack-subnet.*.id
}
output "network_ids" {
value = openstack_networking_network_v2.openstack-networks.*.id
}
Run Code Online (Sandbox Code Playgroud)
在上面的存储库中运行 Terraform 输出,给出以下输出(修改后的 id):
network_ids = [
"08adfe73-dfg5-404d-958e-e8db73121531",
"c0b561e5-320c-46b3-b328-98723f54ef82",
"200eb570-b734-4b18-9250-6ckae90ea0e1",
"84c43fc5-771c-4c79-8670-3d858788661e",
]
subnet_ids = [
"f5df394f-d542-492a-a224-eefb998536ac",
"f0f5d2fe-e83c-4041-971a-bba34870d5de",
"89e966b1-826e-483d-b312-bb7aa9893a02",
"76d6dfda-8161-4961-89a6-39aeeb82db3c",
]
Run Code Online (Sandbox Code Playgroud)
Repo 2(创建计算平台)
infrastructure
| main.tf
| modules
| compute
| main.tf
Run Code Online (Sandbox Code Playgroud)
计算的 main.tf 的内容:
...
data "terraform_remote_state" "base_networking_a" {
backend = "s3" …
Run Code Online (Sandbox Code Playgroud) 我在 Terraform 中有以下资源:
provider "docker" {
host = "tcp://${digitalocean_droplet.docker_server.ipv4_address}:2376/"
}
Run Code Online (Sandbox Code Playgroud)
这依赖于在ipv4_address
连接到 docker 机器之前要知道的值。在供应另一个资源之前,该值是未知的:
provider "docker" {
host = "tcp://${digitalocean_droplet.docker_server.ipv4_address}:2376/"
}
Run Code Online (Sandbox Code Playgroud)
当我运行时terraform plan
,出现以下错误:
错误:初始化 Docker 客户端时出错:无法解析 docker 主机``
在 docker.tf 第 1 行,在提供者“docker”中:1:提供者“docker”{
它似乎ipv4_address
是空的,因为 docker 插件在配置之前尝试连接到 docker 机器。我如何告诉它在尝试连接之前等待机器配置?
provider "docker" {
host = "tcp://${digitalocean_droplet.docker_server.ipv4_address}:2376/"
depends_on = [
digitalocean_droplet.docker_server.ipv4_address,
]
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到此错误:
错误:提供程序块中的保留参数名称
在 docker.tf 第 4 行,在提供者“docker”中:4:depends_on = [
提供程序参数名称“depends_on”保留供 Terraform 在未来版本中使用。
但是阅读更多内容depends_on
,我认为无论如何这都不是解决方案。
Terraform v0.12.24 + provider.aws v2.61.0
在高山容器中运行。
我有一个基本的 terraform 脚本运行正常,但现在我正在扩展它并尝试配置远程(S3)状态。
地形.tf:
terraform {
backend "s3" {
bucket = "labs"
key = "com/company/labs"
region = "eu-west-2"
dynamodb_table = "labs-tf-locks"
encrypt = true
}
}
Run Code Online (Sandbox Code Playgroud)
桶存在,表也存在。我已经用 terraform 创建了它们,并通过控制台进行了确认。
当我运行时,terraform init
我得到:
Error refreshing state: InvalidParameter: 2 validation error(s) found.
- minimum field size of 1, GetObjectInput.Bucket.
- minimum field size of 1, GetObjectInput.Key.
Run Code Online (Sandbox Code Playgroud)
terraform fmt
没有错误报告并愉快地重新格式化我的terraform.tf
文件。我也尝试将节移动到我的中main.tf
,以防万一该terraform.tf
文件因某种原因被忽略。我得到了完全相同的结果。
我也尝试在没有 alpine 容器的情况下从 aws 中的 ubuntu …
在 AWS 中使用 Terraform (TF),在尝试使用 terraform_remote_state 调用 vpc_id 时遇到错误。我们分割了网络的不同部分,以减轻状态滑移。然而,它还需要与基础设施每个单独部分的状态文件(即 vpc、sgs、角色等的状态文件)进行交互。当我尝试从 S3 存储桶中保存的状态文件中获取 vpc_id 时,出现以下错误:
on main.tf line 78, in module "vpc_sg":
78: vpc_id = data.terraform_remote_state.vpc.vpc_id
This object has no argument, nested block, or exported attribute named
"vpc_id".
Run Code Online (Sandbox Code Playgroud)
这是我在 main.tf 文件中的 terraform_remote_state 调用:
backend = "s3"
workspace = var.workspace
config = {
bucket = "terraform-east"
key = "terraform-vpc.tfstate"
region ="us-east-1"
}
}
Run Code Online (Sandbox Code Playgroud)
这是同一个 main.tf 中的调用
// output "sg_id"
source = "git::https://url_to_sg.git/reference?
vpc_cidr = data.terraform_remote_state.vpc.vpc_cidr -- This line also doesn't work.. but …
Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services terraform terraform-remote-state