Есть ли способ запустить исходный 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, которые могут быть полезны для незнакомых.