簡體   English   中英

使用 Terraform 從快照創建 RDS 實例

[英]Creating RDS Instances from Snapshot Using Terraform

在 Terraform 項目中,我通過抓取和使用最新的生產數據庫快照來創建 RDS 集群:

# Get latest snapshot from production DB
data "aws_db_snapshot" "db_snapshot" {
    most_recent = true
    db_instance_identifier = "${var.db_instance_to_clone}"
}

#Create RDS instance from snapshot
resource "aws_db_instance" "primary" {
    identifier = "${var.app_name}-primary"
    snapshot_identifier = "${data.aws_db_snapshot.db_snapshot.id}"
    instance_class = "${var.instance_class}"
    vpc_security_group_ids = ["${var.security_group_id}"]
    skip_final_snapshot = true
    final_snapshot_identifier = "snapshot"
    parameter_group_name = "${var.parameter_group_name}"
    publicly_accessible = true
    timeouts {
      create = "2h"
    }
}

這種方法的問題在於,在運行 terraform 代碼之后(拍攝另一個快照后)想要使用數據庫的最新快照重新創建主 RDS 實例(以及隨后的只讀副本)。 我正在考慮指定第一次運行的布爾計數參數,但是在快照資源上設置count = 0會導致 db 資源的 snapshot_id 參數出現問題。 同樣,在 db 資源上設置count = 0表示它會破壞 db。

用例是能夠對此 terraform 計划管理的生產基礎架構的其他方面進行更改,而無需重新創建整個 RDS 集群,這是銷毀/創建非常耗時的資源。

嘗試在您的aws_db_instance定義中放置一個ignore_changes生命周期塊:

lifecycle {
    ignore_changes = [
      "snapshot_identifier",
    ]
}

這將導致 Terraform 在初始創建時只查找對數據庫的snapshot_identifier更改。

如果數據庫已經存在,Terraform 將忽略對現有數據庫的snapshot_identifier字段的任何更改——即使從那時起已經創建了新的快照。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM