AWS GovCloud中Terraform部署RDS自动备份复制遇预签名URL错误求助
解决AWS GovCloud中Terraform RDS跨区域备份复制的预签名URL问题
在AWS商用区域可用的RDS跨区域备份复制配置,到GovCloud区域会因加密实例强制要求预签名URL而失败。以下是具体解决思路和实现步骤:
核心原因
GovCloud区域对加密RDS实例的跨区域备份复制有特殊要求:必须提供一个基于Signature Version 4签名的预签名URL,这个URL对应源区域的StartDBInstanceAutomatedBackupsReplication API请求。商用区域则无需此参数。
解决步骤
1. 生成预签名URL
预签名URL必须在RDS实例所在的源区域生成,可通过AWS CLI完成:
aws rds start-db-instance-automated-backups-replication \ --source-db-instance-arn "arn:aws:rds:源区域:账号ID:db:实例名" \ --region 源区域 \ --presign-url \ --expires-in 3600
--presign-url:CLI专属参数,用于生成该API的预签名请求URL--expires-in:设置URL有效期,建议30-60分钟,确保Terraform有足够时间完成部署- 注意:需使用支持该参数的AWS CLI版本(v2.10.0及以上),可通过
aws --version检查并升级
2. 在Terraform中集成预签名URL
如果需要自动化生成并使用URL,可借助external数据源调用CLI,修改后的Terraform配置如下:
# 配置源区域的AWS Provider provider "aws" { alias = "source" region = "源区域ID" } # 获取源区域信息 data "aws_region" "source" { provider = aws.source } # 自动生成预签名URL data "external" "presigned_url" { program = [ "bash", "-c", <<-EOF aws rds start-db-instance-automated-backups-replication \ --source-db-instance-arn "${aws_db_instance.db.arn}" \ --region "${data.aws_region.source.name}" \ --presign-url \ --expires-in 3600 EOF ] depends_on = [aws_db_instance.db] } # 配置跨区域备份复制资源 resource "aws_db_instance_automated_backups_replication" "db_backup_replication" { provider = aws.recovery_region source_db_instance_arn = aws_db_instance.db.arn kms_key_id = data.aws_kms_key.rds_recovery_kms_key.arn retention_period = local.retention_days pre_signed_url = data.external.presigned_url.result }
3. 权限验证
确保执行操作的AWS凭证具备以下权限:
- 源区域:
rds:StartDBInstanceAutomatedBackupsReplication - 目标GovCloud区域:
rds:StartDBInstanceAutomatedBackupsReplication、kms:CreateGrant(用于目标KMS密钥加密备份)
内容的提问来源于stack exchange,提问作者MikeO
相关产品推荐
相关产品推荐

