Como posso resolver o erro “DBInstance xxxxxx falhou ao estabilizar” ao criar uma instância de banco de dados do RDS a partir de snapshots usando o AWS CloudFormation?

4 minuto de leitura
0

Quando tento criar um recurso AWS::RDS::DBInstance com o AWS CloudFormation, recebo este erro: “DBInstance xxxxxx falhou ao estabilizar”.

Breve descrição

Se você criar uma instância de banco de dados do Amazon Relational Database Service (Amazon RDS) (AWS::RDS::DBInstance) a partir de um snapshot do banco de dados do RDS existente usando o AWS CloudFormation, poderá receber um erro por causa dos seguintes motivos:

  • O tipo de armazenamento no snapshot do banco de dados não corresponde ao tipo de armazenamento na instância de banco de dados.
  • Seus snapshots de banco de dados contêm objetos inválidos.

Observação: há outras causas possíveis de problemas de estabilização da instância de banco de dados do RDS. As etapas da resolução a seguir se aplicam somente aos problemas em que a instância de banco de dados do RDS é criada a partir de snapshots no AWS CloudFormation.

Solução

Compatibilize os tipos de armazenamento entre seu snapshot de banco de dados e sua instância de banco de dados

Observação: se receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se você está usando sua versão mais recente.

1.    Verifique o tipo de armazenamento do snapshot de banco de dados usando o console do Amazon RDS ou os comandos da AWS CLI describe-db-snapshots. Por exemplo:

aws rds describe-db-snapshots --db-snapshot-identifier MyRDSSnapShot --region us-east-1
{
    "DBSnapshots": [
        {
            .......
            "AllocatedStorage": 20,
            "Status": "available",
            "PercentProgress": 100,
            "DBSnapshotArn": "arn:aws:rds:us-east-1:1234567890:snapshot:MyRDSSnapShot",
            "EngineVersion": "12.1.0.2.v7",
            "ProcessorFeatures": [],
            "OptionGroupName": "default:oracle-ee-12-1",
            "SnapshotCreateTime": "2019-03-16T17:43:41Z",
            "AvailabilityZone": "us-east-1f",
            "StorageType": "gp2",
            .......
        }
    ]
}

Observação: o valor gp2 de StorageType do comando da AWS CLI é mapeado para o valor Uso geral (SSD) no console do Amazon RDS.

2.    Na definição do recurso AWS::RDS::DBInstance do seu modelo JSON ou YAML do AWS CloudFormation, defina o valor de StorageType para que corresponda ao tipo de armazenamento do snapshot. Nesse caso, o tipo de armazenamento é definido como gp2.

JSON:

{
    "MySampleDB": {
        "Type": "AWS::RDS::DBInstance",
        "Properties": {
            "DBInstanceClass": "db.t2.small",
            "StorageType": "gp2",
            "Engine": "postgres",
            "EngineVersion": "9.5.12",
            ........
        }
    }
}

YAML:

MySampleDB:
  Type: 'AWS::RDS::DBInstance'
  Properties:
    DBInstanceClass: db.t2.small
    StorageType: gp2
    Engine: postgres
    EngineVersion: 9.5.12
    ......

Observação: se o tipo de armazenamento não está definido, por padrão, o AWS CloudFormation define StorageType como padrão, o que pode não corresponder ao tipo de armazenamento do snapshot referenciado. Se os tipos de armazenamento não corresponderem, o RDS poderá levar mais tempo para criar o banco de dados devido ao processo extra de conversão do armazenamento. Além disso, essa incompatibilidade pode levar a erros de tempo limite, no caso de bancos de dados maiores. É uma prática recomendada definir explicitamente o tipo de armazenamento no recurso AWS::RDS::DBInstance. Além disso, considere definir o tipo de armazenamento para corresponder ao tipo de armazenamento do snapshot.

3.    Inicie sua pilha do AWS CloudFormation para criar a instância do banco de dados.

Verifique se os snapshots de banco de dados não têm objetos inválidos

Se o snapshot de banco de dados usado para criar sua instância de banco de dados tiver objetos inválidos, execute as seguintes etapas:

1.    Identifique e corrija os objetos inválidos em seus bancos de dados existentes.

Por exemplo, a consulta ao banco de dados Oracle a seguir retorna uma lista de objetos inválidos:

select owner,object_name,object_type,status from dba_objects where status='INVALID'

2.    Refaça os snapshots de seus bancos de dados existentes.

Importante: refaça os snapshots do banco de dados somente depois de corrigir ou remover todos os objetos inválidos de seus bancos de dados.

3.    Inicie a pilha do AWS CloudFormation para criar a instância de banco de dados usando o snapshot de banco de dados existente.


AWS OFICIAL
AWS OFICIALAtualizada há 3 anos