2017-03-19 21 views
5

tôi tải terraform 0.9 và cố gắng làm theo các migration guide để di chuyển remote-state-backendChuyển từ xa-nhà nước để phụ trợ trong Terraform 0,9

Nhưng nó dường như không làm việc. Tôi thay thế:

data "terraform_remote_state" "state" { 
    backend = "s3" 
    config { 
    bucket = "terraform-state-${var.environment}" 
    key = "network/terraform.tfstate" 
    region = "${var.aws_region}" 
    } 
} 

với

terraform { 
    backend "s3" { 
    bucket = "terraform-backend" 
    key = "network/terraform.tfstate" 
    region = "us-west-2" 
    } 
} 

nhưng khi tôi chạy terraform init trong một trong các thư mục môi trường của tôi, tôi nhận được:

cảnh báo không chấp nhận: Môi trường này được cấu hình để sử dụng di sản trạng thái từ xa. Trạng thái từ xa đã thay đổi đáng kể trong Terraform 0.9. Vui lòng cập nhật cấu hình trạng thái từ xa của bạn để sử dụng cài đặt 'backend' mới. Hiện tại, Terraform sẽ tiếp tục sử dụng các cài đặt hiện tại của bạn. Hỗ trợ trạng thái từ xa cũ sẽ bị xóa trong Terraform 0,11.

Bạn có thể tìm thấy một hướng dẫn để nâng cấp ở đây:

https://www.terraform.io/docs/backends/legacy-0-8.html

Tôi cũng đã phải thả suy biến vì đây là không được phép nữa. Điều đó có nghĩa là một S3 Bucket được sử dụng cho nhiều môi trường? Tôi đã bỏ lỡ điều gì ở đây?

Trả lời

6

Hướng dẫn nâng cấp (https://www.terraform.io/docs/backends/legacy-0-8.html) sau terraform init bạn cũng phải chạy terraform plan để hoàn tất quá trình di chuyển, sẽ cập nhật tệp trạng thái từ xa ở s3.

Để định cấu hình cho nhiều môi trường, chúng tôi đã kết thúc bằng cách sử dụng tập lệnh trình bao bọc bằng cách chuyển tham số cho ${application_name}/${env}/${project} và sử dụng cấu hình một phần.

Đối với một cấu trúc dự án như thế này:

├── projects 
│   └── application-name 
│    ├── dev 
│    │   ├── bastion 
│    │   ├── db 
│    │   ├── vpc 
│    │   └── web-cluster 
│    ├── prod 
│    │   ├── bastion 
│    │   ├── db 
│    │   ├── vpc 
│    │   └── web-cluster 
│    └── backend.config 
└── run-tf.sh 

cho mỗi application_name/env thành phần = thư mục/(tức là dev/vpc) chúng tôi đã thêm một tập tin giữ chỗ backend cấu hình như thế này: backend.tf:

terraform { 
    backend "s3" { 
    } 
} 

Nội dung thư mục cho mỗi thành phần sẽ trông như thế này:

│    ├── prod 
│    │   ├── vpc 
│    │   │   ├── backend.tf 
│    │   │   ├── main.tf 
│    │   │   ├── outputs.tf 
│    │   │   └── variables.tf 

Tại "application_name /" hoặc "application_name/env" mức chúng tôi đã thêm một tập tin backend.config, như thế này:

bucket  = "BUCKET_NAME" 
region  = "region_name" 
lock  = true 
lock_table = "lock_table_name" 
encrypt = true 

vỏ kịch bản wrapper chúng tôi hy vọng các thông số application-name, environment, component, và terraform thực tế cmd chạy.

Nội dung của kịch bản run-tf.sh (giản thể):

#!/bin/bash 

application=$1 
envir=$2 
component=$3 
cmd=$4 

tf_backend_config="root_path/$application/$envir/$component/backend.config" 

terraform init -backend=true -backend-config="$tf_backend_config" -backend-config="key=tfstate/${application}/${envir}/${component}.json" 

terraform get 

terraform $cmd 

Sau đây là cách một điển hình run-tf.sh invocation trông giống như:

$ run-tf.sh application_name dev vpc plan 

$ run-tf.sh application_name prod bastion apply 
0

Bạn đã nhầm lẫn với lệnh từ xa terraform với trạng thái từ xa. Bạn không phải thay đổi bất kỳ điều gì ở trạng thái từ xa mà bạn có trong các tệp tf của mình.

Thay vì định cấu hình trạng thái từ xa bằng lệnh từ xa và sử dụng tệp cấu hình phụ trợ được đề cập trong liên kết di chuyển.

Xem nhận xét github thứ hai trong liên kết này. Nó có quy trình từng bước tốt đẹp về những gì anh ta đã làm để di chuyển. https://github.com/hashicorp/terraform/issues/12792

Các vấn đề liên quan