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