Невозможно создать шаблон CoudFormation RDS, который подготавливает новый экземпляр из моментальных снимков на определенный момент времени - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь написать CloudFormation для подготовки нового экземпляра RDS из моментального снимка существующей базы данных RDS.

Однако я узнал, что вы не можете указать db-name, когда предоставляете снимок в шаблоне CloudFormation, и поэтому он всегда будет восстанавливать его в исходную БД.

У меня есть эта статья для того же в aws блогах, хотя я ищу, есть ли какое-либо готовое решение для того же самого.

Редактировать 1

RDS фрагмент из моего Cloud Formation

Resources:
  MyDB:
    Type: AWS::RDS::DBInstance
    Properties:
      DBName: Fn::If ["UseDbSnapshot", !Ref AWS:NoValue, !Ref MyDBName]
      DBSecurityGroups:
      - !Ref MyDbSecurityByEC2SecurityGroup
      - !Ref MyDbSecurityByCIDRIPGroup
      AllocatedStorage: 20
      DBInstanceClass: db.m1.small
      Engine: MySQL
      MasterUsername: root
      MasterUserPassword: password
      DBSnapshotIdentifier: Fn::If ["UseDbSnapshot", !Ref DBSnapshotIdentifier, !Ref AWS::NoValue]
    DeletionPolicy: Snapshot

Что я могу попытаться исправить?

1 Ответ

0 голосов
/ 08 мая 2020

Вы должны иметь в виду, что несколько свойств RDS (например, MasterUsername) не настраиваются, когда вы хотите восстановить из моментального снимка. В документации AWS говорится:

Если вы указываете свойство SourceDBInstanceIdentifier или DBSnapshotIdentifier, не указывайте это свойство. Значение наследуется от исходного экземпляра БД или снимка.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html

Так что просто опустите эти параметры, например:

Parameters:
  DBSnapshotIdentifier:
    Description: 'Optional identifier for the DB cluster snapshot from which you want to restore'
    Type: String
    Default: ''

Conditions:
  HasDBSnapshotIdentifier: !Not [!Equals [!Ref DBSnapshotIdentifier, '']]


Resources:
  DBInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      ...
      DBSnapshotIdentifier: !If [HasDBSnapshotIdentifier, !Ref DBSnapshotIdentifier, !Ref 'AWS::NoValue']
      KmsKeyId: !If [HasDBSnapshotIdentifier, !Ref 'AWS::NoValue', !If [HasEncryption, !Ref KmsKey, !Ref 'AWS::NoValue']]
      MasterUsername: !If [HasDBSnapshotIdentifier, !Ref 'AWS::NoValue', !Ref MasterUsername]
      MasterUserPassword: !If [HasDBSnapshotIdentifier, !Ref 'AWS::NoValue', !Ref MasterPassword]
      StorageEncrypted: !If [HasDBSnapshotIdentifier, !Ref 'AWS::NoValue', !If 
      ...
...