Làm cách nào để thêm phân đoạn vào cụm Redis được quản lý bởi Terraform mà không mất tất cả trạng thái?


7

Tôi đã thiết lập một cụm Redis với Terraform. Các thiết lập trông như thế này:

resource "aws_elasticache_replication_group" "instance" {
  replication_group_id = "test"

  node_type                     = "cache.t2.micro"
  port                          = 6379
  parameter_group_name          = "default.redis3.2.cluster.on"
  subnet_group_name             = "${aws_elasticache_subnet_group.instance.name}"
  security_group_ids            = ["${aws_security_group.instance.id}"]

  cluster_mode {
    replicas_per_node_group = 0
    num_node_groups         = "${var.cluster_size}"
  }

  automatic_failover_enabled = true
  apply_immediately = true
}

Khi tôi thay đổi var.cluster_sizetừ 2 thành 3, tôi đã dự đoán rằng Terraform sẽ thực hiện cập nhật tại chỗ. Tuy nhiên, đó không phải là trường hợp:

-/+ module.groupsign_redis.aws_elasticache_replication_group.instance (new resource required)
  id:                                              "test" => <computed> (forces new resource)
  apply_immediately:                               "true" => "true"
  at_rest_encryption_enabled:                      "false" => "false"
  auto_minor_version_upgrade:                      "true" => "true"
  automatic_failover_enabled:                      "true" => "true"
  cluster_mode.#:                                  "1" => "1"
  cluster_mode.3760271746.num_node_groups:         "" => "3" (forces new resource)
  cluster_mode.3760271746.replicas_per_node_group: "" => "0" (forces new resource)
  cluster_mode.3784625311.num_node_groups:         "2" => "0" (forces new resource)
  cluster_mode.3784625311.replicas_per_node_group: "0" => "0"

Điều này cũng được xác nhận trong tài liệu :

num_node_groups - (Bắt buộc) Chỉ định số lượng nhóm nút (phân đoạn) cho nhóm sao chép Redis này. Thay đổi số này sẽ buộc một nguồn tài nguyên mới.

Hiện tại, tôi chỉ thấy tùy chọn sử dụng Terraform cho việc triển khai ban đầu và sau đó thêm hoặc xóa các phân đoạn bằng Giao diện người dùng AWS, sẽ thực hiện cập nhật tại chỗ.

Bạn có biết cách để thực hiện cập nhật tại chỗ với Terraform không? Hoặc là việc thêm các phân đoạn mà không mất trạng thái của cơ sở dữ liệu đơn giản là không thể với Terraform vào lúc này?

Có thể có thể thêm / xóa phân đoạn bằng tay (thông qua Giao diện người dùng AWS) và sau đó nhập trạng thái mới trở lại vào Terraform. Tôi đã cố chạy terraform refresh, nhưng nó thành công trong việc đồng bộ hóa hoàn toàn trạng thái. terraform applyvẫn tin rằng tài nguyên phải được thay đổi.

Cập nhật: Những gì không hoạt động mặc dù chỉ đơn giản là bỏ qua thay đổi. Cập nhật các tài nguyên khác của Terraform vẫn hoạt động. Tuy nhiên, có một chút khó hiểu vì kích thước cụm được chỉ định trong tệp Terraform không khớp với kích thước thực tế được triển khai. Sau đó, bạn mất khả năng xem thiết lập Terraform và xem chính xác những gì hiện đang được triển khai.

Hiện tại, đó là lựa chọn tốt nhất mà tôi đang kho.

Câu trả lời:


1

Bạn có thể tạo aws_elasticache_replication_grouptài nguyên và sử dụng nguồn dữ liệu aws_elasticache_cluster để lấy số lượng nút thực tế. Bằng cách này bạn không nên viết ignore_changes.


1

May mắn thay, tình hình đã được cải thiện và vấn đề không còn tồn tại.

Hiện tại, Terraform hỗ trợ cập nhật tại chỗ số lượng phân đoạn. Để trích dẫn từ các tài liệu cập nhật :

num_node_groupsChỉ định số lượng nhóm nút (phân đoạn) cho nhóm sao chép Redis này. Thay đổi số này sẽ kích hoạt thao tác thay đổi kích thước trực tuyến trước khi sửa đổi cài đặt khác.

(Trước đây, nó đã kết thúc bằng Thay đổi số này sẽ tạo ra một tài nguyên mới. )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.