In search of a good book on Chef itself, I picked up this new title on O’Reilly. It’s one of their new format books, small in size, only 75 pages.
There was some very good material in this book. Mr. Nelson-Smith’s writing style is good, readable, and informative. The discussion of risks of infrastructure as code was instructive. With the advent of APIs to build out virtual data centers, the idea of automating every aspect of systems administration, and building infrastructure itself as code is a new one. So an honest discussion of the risks of such an approach is bold and much needed. I also liked the introduction to Chef itself, and the discussion of installation.
Chef isn’t really the main focus of this book, unfortunately. The book spends a lot of time introducing us to Agile Development, and specifically test driven development. While these are lofty goals, and the first time I’ve seen treatment of the topic in relation to provisioning cloud infrastructure, I did feel too much time was spent on that. Continue reading “Review – Test Driven Infrastructure with Chef – Stephen Nelson-Smith”
Software development is composed of individual components. As developers are building these units, they build tests to verify them for correctness. These tests can verify the environment, they can verify data, they can verify edge cases and include test harnesses. In essence they verify that the code meets the design specification.
There are a few key advantages to the unit testing approach:
- Self-Documenting – The tests themselves provide a type of documentation for the system as a whole.
- Advances Refactoring – At a later date you may need to repair, rewrite or refactor portions of code. Previously built unit tests provide a tremendous help to make sure your changes still meet the previous design specification.
- Simplifies Functional Testing – With unit testing as an ongoing concern, the final components will likely perform more reliably, and if not the tests & self-documentation may point to how or why they fail to meet some specification.
Sean Hull Quora Discussion – What is software unit testing?
During the software development process, whether you’re cutting edge Agile developers, or traditional waterfall method folks, your code changes are periodically accompanied by database changes. For instance tables have particular rows and columns. When developers add new columns (ie fields on an index card), or create new tables, relationships, indexes or other database objects, all of these are lumped together as database changes.
Version control systems have brought great manageability gains to software projects, even ones involving only a single developer. That’s because they allow you to rewind to any savepoints, just like you can undo and redo changes in a word document. With database changes, however the picture because more muddied.
Database Change Management Best Practices
- Require developers to include a roll forward and a roll back script with each set of schema changes.
- Check in those scripts into the version control system just like other software code.
- Be sure developers test the roll forward and roll backward operation on dev.
- Ensure that changes are documented, as well as possible side affects.
During deployment, operations folks and/or a DBA must still have their fingers on the trigger. Some frameworks such as Ruby on Rails include Migration scripts. Do not for example allow rollback scripts to run automatically. This is a recipe for disaster.
- Be sure to take a backup of the database before running any schema change scripts.
- Consider application downtime if ALTERs or other operations may lock large tables.
- Perform another backup following the schema changes
- If database is particularly large you may isolate your backup to the schema or tables being altered.
Above all use common sense, and always second and/or third guess yourself. Better to be safe than sorry when juggling your crown jewels.
Quora discussion by Sean Hull – What is database change management and why is it important?