Есть ли способ запустить исходный 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. Возможно ли это?
3 ответов
нет, это невозможно. Однако для этого можно подключить экземпляр EC2 к экземпляру RDS. Я бы, наверное, сохранил .sql-файл в S3 и используйте сценарий cloud-init на экземпляре EC2 для загрузки файла и его выполнения.
также можно было бы создать пользовательский ресурс CloudFormation. Существует хорошая дискуссия о том, как построить его с помощью SNS здесь; также возможно построить одно используя Lambda. Пользовательские ресурсы-это, по сути, просто RPCs, поэтому было бы не сложно создать его для инициализации базы данных со схемой, например.
CloudFormation по-прежнему не содержит никаких решений для нас, но, надеюсь, они добавят Служба Миграции Баз Данных только поддержка.
тем временем, есть отличное решение, если вы используете CodePipeline: создайте этап миграции, который вызывает лямбда-функцию для запуска миграции. Я наткнулся данное руководство для вызова лямбда из CodePipeline, которые могут быть полезны для незнакомых.