![](/img/trans.png)
[英]Will promoting aws rds read replica to db instance maintain the replication for new DB instance?
[英]Terraform AWS RDS Instance Cross Region Replication - Read Replica in US-west-1
我在 aws 區域 us-east-1 中有一個通過 terraform 代碼運行的數據庫實例。 現在我想在另一個區域創建該數據庫的只讀副本:us-west-1。
這是代碼:
# PostgreSQL RDS App Instance
module "rds" {
source = "git@github.com:****"
name = var.rds_name_app
engine = var.rds_engine_app
engine_version = var.rds_engine_version_app
family = var.rds_family_app
instance_class = var.rds_instance_class_app
# WARNING: 'terraform taint random_string.rds_password' must be run prior to recreating the DB if it is destroyed
password = random_string.rds_password.result
port = var.rds_port_app
security_groups = [aws_security_group.rds_app.id]
subnets = [module.vpc.public_subnets]
auto_minor_version_upgrade = var.rds_auto_minor_version_upgrade_app
backup_retention_period = var.rds_backup_retention_period_app
backup_window = var.rds_backup_window_app
maintenance_window = var.rds_maintenance_window_app
environment = var.environment
kms_key_id = aws_kms_key.rds.arn
multi_az = var.rds_multi_az_app
notification_topic = var.rds_notification_topic_app
publicly_accessible = var.rds_publicly_accessible_app
storage_encrypted = var.rds_storage_encrypted_app
storage_size = var.rds_storage_size_app
storage_type = var.rds_storage_type_app
apply_immediately = true
}
# PostgreSQL RDS Read Replica Instance
module "rds_replica" {
source = "git@github.com:****"
name = var.rds_name_app_replica
engine = var.rds_engine_app_replica
engine_version = var.rds_engine_version_app_replica
family = var.rds_family_app_replica
instance_class = var.rds_instance_class_app_replica
read_replica = "true"
source_db = module.rds.db_instance
# NOTE: Using same password as primary 'rds_app' instance generated above
password = ""
port = var.rds_port_app_replica
security_groups = [aws_security_group.rds_app.id]
subnets = [module.vpc.public_subnets]
auto_minor_version_upgrade = var.rds_auto_minor_version_upgrade_app_replica
backup_retention_period = var.rds_backup_retention_period_app_replica
backup_window = var.rds_backup_window_app_replica
maintenance_window = var.rds_maintenance_window_app_replica
environment = var.environment
kms_key_id = aws_kms_key.rds.arn
multi_az = var.rds_multi_az_app_replica
notification_topic = var.rds_notification_topic_app_replica
publicly_accessible = var.rds_publicly_accessible_app_replica
storage_encrypted = var.rds_storage_encrypted_app_replica
storage_size = var.rds_storage_size_app_replica
storage_type = var.rds_storage_type_app_replica
apply_immediately = true
}
另外,這是我的 main.tf:
# pinned provider versions
provider "random" {
version = "~> 2.3.0"
}
provider "template" {
version = "~> 2.1.2"
}
provider "archive" {
version = "~> 1.1"
}
# default provider
provider "aws" {
version = "~> 2.44"
allowed_account_ids = [var.aws_account_id]
region = "us-east-1"
}
# remote state
terraform {
required_version = "0.12.24"
backend "s3" {
key = "terraform.dev.tfstate"
encrypt = "true"
bucket = "dev-tfstate"
region = "us-east-1"
}
}
read_replica = "true"
source_db = module.rds.db_instance
有人請告訴我!
部分計划:
module.rds_replica.aws_db_instance.db_instance will be created
+ resource "aws_db_instance" "db_instance" {
+ address = (known after apply)
+ allocated_storage = 200
+ allow_major_version_upgrade = false
+ apply_immediately = true
+ arn = (known after apply)
+ auto_minor_version_upgrade = true
+ availability_zone = (known after apply)
+ backup_retention_period = 0
+ backup_window = "***"
+ ca_cert_identifier = (known after apply)
+ character_set_name = (known after apply)
+ copy_tags_to_snapshot = true
+ db_subnet_group_name = (known after apply)
+ delete_automated_backups = true
+ deletion_protection = false
+ endpoint = (known after apply)
+ engine = "postgres"
+ engine_version = "9.5.22"
+ final_snapshot_identifier = "app-replica-final-snapshot"
+ hosted_zone_id = (known after apply)
+ iam_database_authentication_enabled = false
+ id = (known after apply)
+ identifier = (known after apply)
+ identifier_prefix = "app-replica-"
+ instance_class = "db.t2.micro"
+ iops = 0
+ kms_key_id = "arn****"
+ license_model = (known after apply)
+ maintenance_window = "sat:05:09-sat:05:39"
+ max_allocated_storage = 0
+ monitoring_interval = 0
+ monitoring_role_arn = (known after apply)
+ multi_az = false
+ name = (known after apply)
+ option_group_name = (known after apply)
+ parameter_group_name = (known after apply)
+ performance_insights_enabled = false
+ performance_insights_kms_key_id = (known after apply)
+ performance_insights_retention_period = (known after apply)
+ port = 5432
+ publicly_accessible = false
+ replicas = (known after apply)
+ replicate_source_db = "arn****"
+ resource_id = (known after apply)
+ skip_final_snapshot = true
+ status = (known after apply)
+ storage_encrypted = true
+ storage_type = "gp2"
看到它確實說明了地區嗎?
(我自己從來沒有做過,但是......)
看起來AWS Terraform 提供商的文檔已經考慮了這種可能性。
我根本沒有測試過,但是當我閱讀它時:
aws
提供者在不同的別名下,讓另一個提供者使用us-west-1
作為區域:# The default provider you already have
provider "aws" {
region = "us-east-1"
}
# Thew new one
provider "aws" {
region = "us-west-1"
alias = "west"
}
replicate_source_db
具有作家/主實例的ARN。 在這里,你又正在使用的模塊,所以當“通話中”的要應用的技巧需要rds_replica
模塊通過aws.west
作為aws
,讓它為主體的實例作為ARN使用replicate_source_db
。 類似的東西:(再次未經測試)module "rds_replica" {
source = "git@github.com:****"
...
providers = {
aws = aws.west
}
# point to the main instance's ARN
replicate_source_db = module.rds.db_instance.arn
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.