0

我在准备一个小型bash脚本,该脚本读取给定实例的最新快照名称并从该快照创建一个新实例。我正在使用的命令是亚马逊RDS(CLI) - 从快照恢复实例 - 错误的安全组(无入站许可)

rds-restore-db-instance-from-db-snapshot snapshot-instance --db-snapshot-identifier rds:snapshot-name --region eu-west-1 --availability-zone eu-west-1a --db-instance-class db.t2.micro --multi-az false 

这工作正常,实例被创建。但是实例的安全组分配不正确,无法从外部访问它(这是标准的“倾倒”sql数据所需的)。

原来的安全组snapshott'ed实例(VPC)是

default (sg-2bc44xxx) (active) 

但通过CLI创建从快照中的新实例时,得到了如下分配:

default:vpc-95c10xxx (active) 
rds-default-vpc-95c10-xxxx (sg-9e45bxxx) (active) 

您会看到旧安全组的安全组(sg)与新安全组的不同之处。

但我不能改变通过CLI这种连接:

rds-modify-db-instance snapshot-instance --region eu-west-1 -sg sg-2bc44xxx 

结果在

"Malformed input-MalformedInput". 

其他尝试:

rds-modify-db-instance snapshot-instance --region eu-west-1 -a sg-2bc44xxx 

这给

Could not find the resource you requested: DBSecurityGroup not found: sg-2bc44xxx 

当我通过Web-Console将组更改为默认组时,入站连接可用,我可以毫无问题地使用mysqldump。

目前尚不清楚使用什么选项,无论是-a还是-sg。另外,还不清楚安全组的正确标识符是(id,group-name,...)。

任何帮助或信息将不胜感激。

问候,

埃里克

+1

想了解更多关于您的安全组的信息,您可以运行'rds-describe-db-security-groups' - 它看起来像'-a'用于您的数据库安全组,'-sg'用于VPC。你尝试了' - vpc-security-group-ids sg-2bc44xxx' –

+0

我不明白的一件事是为什么新创建的实例分别绑定到DB和VPC的安全组,而原始实例只有VPC连接。 我尝试的输出是: rds-modify-db-instance snapper-1 --region eu-west-1 --vpc-security-group-ids sg-2bc44xxx =>无法识别的选项(虽然有文档记载) rds-modify-db-instance snapper-1 --region eu-west-1 -sg sg-2bc44xxx =>格式错误的输入 - 格式错误输入 ---------- rds-modify-db-实例snapper-1 --region eu-west-1 --db-security-groups default =>“SC不属于VPC vpc-95c10xxx” – TheNightCoder

+0

将--db-subnet-group-name 添加到你的命令行。 –

回答

0

我正面临着类似的问题,因此使用快照恢复数据库后,我看到分配安全组是默认情况下,它没有任何入站规则。 如果您转到RDS控制台的主页,则可以看到支持的平台的配置为(EC2,VPC)或仅显示(VPC)here

不幸的是,restore-db-instance-from- db-snapshot没有采用任何vpc-security组选项。所以恢复数据库后,我不得不修改它使用

aws rds modify-db-instance --db-instance-identifier your-db-identifier --vpc-security-group-ids sg-4xxxxxxx 

这对我工作。

0

我回到这里是为了告诉我用不同的解决方案。我使用适用于PHP的AWS开发工具包,并能够通过API轻松获取最新快照的名称。然后我使用它来创建一个临时实例(它绑定到相同的安全组,参数组等等)。像原始实例一样),轮询这个实例直到它处于“就绪”状态,然后执行一个实际的mysqldump,然后上传到S3。之后,我销毁了临时实例。这一切都是通过PHP shell脚本完成的,并且使用官方适用于PHP的AWS开发工具包。

脚本每天都能正常工作,近2年没有任何错误(转储大小约15GB)。无论如何,感谢您的答案,他们可能会有助于其他人遇到此问题。使用SDK来完成这些事情非常简单。