Есть ли способ запустить исходный SQL при создании экземпляра базы данных RDS с помощью CloudFormation? - программирование
Подтвердить что ты не робот

Есть ли способ запустить исходный SQL при создании экземпляра базы данных RDS с помощью CloudFormation?

Я создаю экземпляр RDS с помощью CloudFormation, используя это:

"Resources": {
        "myDB": {
            "Type": "AWS::RDS::DBInstance",
            "Properties": {
                "AllocatedStorage": "5",
                "DBInstanceClass": "db.m1.small",
                "Engine": "MySQL",
                "EngineVersion": "5.5",
                "DBName": "mydb",
                "MasterUsername": {
                    "Ref": "DBUser"
                },
                "MasterUserPassword": {
                    "Ref": "DBPassword"
                },
                "DBParameterGroupName": {
                    "Ref": "myRDSParamGroup"
                }
            }
        }

и все это работает. Но мне нужно запустить исходный SQL на БД при ее создании, чтобы настроить схему моих приложений. Мой текущий подход заключается в самостоятельной миграции приложения, но я бы хотел сделать это в определении CloudFormation. Это возможно?

4b9b3361

Ответ 1

Нет, это невозможно. Однако вы можете подключить экземпляр EC2 к вашему экземпляру RDS. Я бы, вероятно, сохранил файл .sql на S3 и использовал экземпляр cloud-init script в экземпляре EC2 для загрузки файла и его выполнения.

Ответ 2

Также было бы возможно создать пользовательский ресурс CloudFormation. Здесь хорошо обсуждается, как его создать, используя SNS здесь; также возможно построить один, используя Lambda. Пользовательские ресурсы - это, по сути, просто RPC, поэтому не составит труда создать их, например, для инициализации базы данных с помощью схемы.

Ответ 3

CloudFormation по-прежнему не содержит никаких решений для нас, но, надеюсь, они скоро добавят Служба миграции данных.

Тем временем существует отличное решение, если вы используете CodePipeline: создайте этап миграции, который вызывает функцию Lambda для запуска миграции. Я наткнулся на это руководство для вызова Lambda из CodePipeline, которое может быть полезно для незнакомых.

Ответ 4

Другой вариант - использовать свойство DBSnapshotIdentifier для ресурса AWS :: RDS :: DBInstance. Единственный улов заключается в том, что вам нужно загрузить БД в AWS, чтобы создать моментальный снимок. С этого момента вы можете автоматизировать свой стек облачной информации, чтобы использовать его.

DBSnapshotIdentifier: Имя (ARN) снимка БД, который использовался для восстановления экземпляра БД.

Если свойство содержит значение (кроме пустой строки), AWS CloudFormation создает базу данных из указанного снимка.

После восстановления экземпляра БД с помощью свойства DBSnapshotIdentifier необходимо указать то же свойство DBSnapshotIdentifier для любых будущих обновлений экземпляра БД. Когда вы указываете это свойство для обновления, экземпляр БД не восстанавливается из снимка БД снова, и данные в базе данных не изменяются. Однако если вы не укажете свойство DBSnapshotIdentifier, будет создан пустой экземпляр БД, а исходный экземпляр БД будет удален.

Посмотрите в документе от дополнительной информации:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbsnapshotidentifier