如何通过 id 获取最新的共享 AWS RDS 快照?

Posted

技术标签:

【中文标题】如何通过 id 获取最新的共享 AWS RDS 快照?【英文标题】:How to get the most recent shared AWS RDS snapshot by id? 【发布时间】:2020-05-21 22:00:48 【问题描述】:

我在 AWS RDS 上有 2 个数据库,一个用于 stage,一个用于 production,跨 2 个账户。我正在尝试每 x 天将 production 中的数据复制到 stage。我的计划是在production 中创建最新的自动备份快照的副本,并在使用production 中的共享快照在stage 中创建数据库之前将其共享到stage 帐户。一切都很顺利,直到我遇到了我认为是错误的错误,但很可能是我犯了错误。

当我尝试使用 data "aws_db_snapshot" 在 Terraform 中获取 ID 为 abcd 的最新共享快照时,我没有得到任何结果。

data "aws_db_snapshot" "latest_prod_snapshot" 
  db_instance_identifier = "abcd"
  snapshot_type          = "shared"
  include_shared         = "true"
  most_recent            = "true"

然后我决定试用 AWS CLI。当我运行这个...

aws rds describe-db-snapshots --snapshot-type shared --include-shared

...我明白了...


    "DBSnapshots": [
        
            "MasterUsername": "root", 
            "LicenseModel": "general-public-license", 
            "InstanceCreateTime": "2018-01-13T00:00:00.000Z", 
            "Engine": "mysql", 
            "VpcId": "vpc-0000000000000000", 
            "SourceRegion": "us-east-1", 
            "AllocatedStorage": 20, 
            "Status": "available", 
            "PercentProgress": 100, 
            "SourceDBSnapshotIdentifier": "arn:aws:rds:us-east-1:000000000000:snapshot:rds:abcd-2020-01-13-00-00", 
            "DBSnapshotIdentifier": "arn:aws:rds:us-east-1:000000000000:snapshot:rds:abcd-2020-01-13-00-00", 
            "DBSnapshotArn": "arn:aws:rds:us-east-1:000000000000:snapshot:rds:abcd-2020-01-13-00-00", 
            "EngineVersion": "5.6.41", 
            "ProcessorFeatures": [], 
            "OptionGroupName": "default:mysql-5-6", 
            "SnapshotCreateTime": "2020-01-13T00:00:00.000Z", 
            "AvailabilityZone": "us-east-1b", 
            "StorageType": "gp2", 
            "Encrypted": false, 
            "IAMDatabaseAuthenticationEnabled": false, 
            "DbiResourceId": "db-AAAAAAAAAAAAAAAAAAAAAAAAA", 
            "SnapshotType": "shared", 
            "Port": 3306, 
            "DBInstanceIdentifier": "abcd"
        
    ]

...这是我所期望的。查看响应,我希望数据库实例 id 为 abcd 但是当我运行它时......

aws rds describe-db-snapshots --snapshot-type shared --include-shared --db-instance-identifier abcd

...或者这个...

aws rds describe-db-snapshots --snapshot-type shared --include-shared --filters Name=db-instance-id,Values=abcd

...我明白了...


    "DBSnapshots": []

...这不是我所期望的。这是一个错误还是我做错了什么?我查看了他们的文档,但我可能遗漏了一些东西。

【问题讨论】:

我同意。我设法重现了你的结果。基本上,当为共享快照指定数据库实例 ID 时,结果集为空。相同的命令在“相同”(非共享)帐户中工作正常。 AWS CLI 和 boto3 都会发生这种情况。如果您有 AWS 支持计划,则应使用此信息创建支持票证。 很遗憾,我没有可以获得技术支持的支持计划。 你并不孤单***.com/questions/60233735/… 【参考方案1】:

在我们等待 AWS 解决此问题的同时。以下是您可以做的一些解决方法:

    stage 帐户中复制共享快照并使用副本而不是共享。 在 Terraform 中,回滚到较旧的提供程序版本。

2.27 为我工作

provider "aws" 
  version                 = "2.27.0"

【讨论】:

【参考方案2】:

根据 AWS Support,DBInstanceIdentifier 仅用于显示调用客户拥有的快照的结果,因此不返回共享快照的结果。为了使用 DBInstanceIdentifier 仅过滤和显示共享快照,可以使用 --query 按 DBInstanceIdentifier 值进行过滤:

aws rds describe-db-snapshots --snapshot-type shared --include-shared --query "DBSnapshots[?DBInstanceIdentifier=='abcd']" 

【讨论】:

以上是关于如何通过 id 获取最新的共享 AWS RDS 快照?的主要内容,如果未能解决你的问题,请参考以下文章

如何在AWS中获取RDS实例的IP地址

通过 lambda python 函数获取 AWS RDS 的当前 CPU 利用率

如何从本地使用 SSL 加密连接到 AWS RDS?

AWS RDS MySQL 主从同步延迟总结

获取 aws rds 快照的本地副本

如何获取 RDS 标签?