deployfish-mysql is a plugin for deployfish that
allows you to manage databases in remote MySQL servers in AWS.
deploy mysql create {name}: Create database a database and user, with appropriateGRANTs.deploy mysql update {name}: Update the user's password andGRANTsdeploy mysql validate {name}: Validate that the username/password combination is validdeploy mysql dump {name}: Dump MySQL databases as SQL files to local file systems.deploy mysql load {name} {filename}: Load a local SQL file into remote MySQL databasesdeploy mysql show-grants {name}: Show GRANTs for your user
{name} above refers to the name of a MySQL connection from the mysql: section of your deployfish.yml file. See below for how the mysql: connection works.
pip install deployfish deployfish-mysql
First follow the instructions for installing and configuring deployfish, then
add this stanza to your ~/.deployfish.yml file:
plugin.mysql:
enabled: trueNOTE: ~/.deployfish.yml is the config file for deployfish itself. This is different from the deployfish.yml file that defines your services and tasks.
deployfish-mysql looks in your deployfish.yml file (the one with your services and task definitions, not the ~/.deployfish.yml config file for deployfish iteslf) for a section named mysql, which has definitions of mysql databases:
mysql:
- name: test
service: service-test
host: my-remote-rds-host.amazonaws.com
db: mydb
user: myuser
pass: password
- name: config-test
service: service-test
host: config.DB_HOST
db: config.DB_NAME
user: config.DB_USER
pass: config.DB_PASSWORD
services:
- name: dftest-test
cluster: my-cluster
environment: test
config:
- DEBUG=False
- DB_HOST=${terraform.rds_address}
- DB_NAME=dftest
- DB_USER=dftest_u
- DB_PASSWORD:secure:kms_key_arn=${env.DB_PASSWORD}Entries in the mysql: section must minimally define these keys:
name: the name of the connection. This will be used in all thedeploy mysqlcommands as the connection name.service: the name of a service in theservices:section. This will be used to determine which host we use to use for SSH when doing our mysql commandshost: the hostname of the remote MySQL serverdb: the name of the database to work with inhostuser: the username of the user to use to authenticate tohostpass: the password of the user to use to authenticate tohost
These are optional keys that you can add to your connection definition:
port: the port to connect to on the remote MySQL server. Default: 3306character_set: set the character set of your database to this (used fordeploy mysql createanddeploy mysql update). Default:utf8.collation: set the collation set of your database to this (used fordeploy mysql createanddeploy mysql update). Default:utf8_unicode_ci.
As you can see in the examples above, you can either hard code host, db, user and password in or you can reference config parameters from the config: section of the definition of our service. For the latter, deployfish-mysql will retrieve those parameters directly from AWS SSM Parameter Store, so ensure you write the service config to AWS before trying to establish a MySQL connection.