Comment éliminer l'erreur « DBInstance xxxxxx failed to stabilize » (L'instance de base de données xxxxxx n'a pas pu être stabilisée) lorsque je crée une instance de base de données RDS à l'aide d'AWS CloudFormation ?

Lecture de 4 minute(s)
0

Lorsque j'essaie de créer une ressource AWS::RDS::DBInstance avec AWS CloudFormation, je reçois le message d'erreur « DBInstance xxxxxx failed to stabilize » (L'instance de base de données xxxxxx n'a pas pu être stabilisée).

Brève description

Si vous créez une base de données Amazon Relational Database Service (Amazon RDS) (AWS::RDS::DBInstance) à partir d'un instantané de base de données RDS existant à l'aide d'AWS CloudFormation, vous pouvez recevoir une erreur pour les raisons suivantes :

  • Le type de stockage dans l'instantané de base de données ne correspond pas au type de stockage dans l'instance de base de données.
  • Vos instantanés de base de données contiennent des objets non valides.

Remarque : il existe d'autres causes possibles liée aux problèmes de stabilisation d'instance DB RDS. Les étapes de la solution suivante s'appliquent uniquement aux problèmes dans lesquels l'instance DB RDS est créée à partir d'instantanés dans AWS CloudFormation.

Solution

Faites correspondre les types de stockage entre votre instantané de base de données et votre instance de base de données

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande (CLI) AWS, assurez-vous d'utiliser la version la plus récente de cette dernière.

1.    Vérifiez le type de stockage de l'instantané de base de données à l'aide de la console Amazon RDS ou de la commande describe-db-snapshots dans l'interface de ligne de commande (CLI) AWS. Par exemple :

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",
            .......
        }
    ]
}

Remarque : la valeur StorageType gp2 de la commande CLI AWS est associée à la valeur General Purpose (SSD) (Usage général (SSD)) dans la console Amazon RDS.

2.    Dans la définition de ressource AWS::RDS::DBInstance de votre modèle AWS CloudFormation JSON ou YAML, affectez à StorageType la valeur correspondant au type de stockage de l'instantané. Dans ce cas, le type de stockage est 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
    ......

Remarque : si le type de stockage n'est pas défini, AWS CloudFormation affecte à StorageType la valeur standard par défaut, ce qui peut ne pas correspondre au type de stockage de l'instantané référencé. Si les types de stockages ne correspondent pas, RDS peut prendre plus de temps pour créer la base de données en raison du processus de conversion de stockage supplémentaire. En outre, cette discordance peut entraîner des erreurs de délai d'expiration pour les bases de données plus volumineuses. Il est recommandé de définir explicitement le type de stockage dans la ressource AWS::RDS::DBInstance. Pensez également à définir le type de stockage pour qu'il corresponde au type de stockage de l'instantané.

3.    Lancez votre pile AWS CloudFormation pour créer l'instance de base de données.

Vérifiez que vos instantanés de bases de données ne possèdent pas d’objets non valides.

Si l'instantané de base de données utilisé pour créer votre instance de base de données possède des objets non valides, procédez comme suit :

1.    Identifiez et corrigez les objets non valides dans vos bases de données existantes.

Par exemple, la requête de base de données Oracle suivante retourne une liste d’objets non valides :

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

2.    Recréez des instantanés de vos bases de données existantes.

Important : ne recréez les instantanés de bases de données qu’après avoir réparé ou supprimé tous les objets non valides de vos bases de données.

3.    Lancez votre pile AWS CloudFormation pour créer l'instance de base de données en utilisant l'instantané de base de données existant.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans