Edited at

CloudFormationのResourcesの依存関係を図に出力するスクリプトを書いた

More than 3 years have passed since last update.


背景

CloudFormationは他のResourcesをRefで参照することができます。このとき、依存関係を整理しながらテンプレートを書いたほうがあとで確認しやすくなると思い、依存関係の確認のためテンプレートから依存関係を図に出力するスクリプトを作成しました。


できること

アプリケーションフレームワーク - AWS CloudFormationのサンプルにあるスケーラブルで耐久性の高い Ruby on Railsのテンプレートから以下のような図が出力出来たりします。

deps.png


使い方

図に変換するためにgraphvizが必要なので、そのインストールと、あとはgistに上げた変換スクリプトを用意します。

$ brew install graphviz

$ wget https://gist.githubusercontent.com/keqh/3ab1177b0bf68c41a60e34acb06f059e/raw/95a6b28d0ad9bcffdf9c5997352ee0e4f122d1df/generate_dependencies_graph.rb
$ chmod 755 generate_dependencies_graph.rb

あとは適当なテンプレートを用意し、それを引数にスクリプトを実行すると同じディレクトリにdeps.pngができます。あとはこれを開くと上のような図が表示されます。

$ wget https://s3-ap-northeast-1.amazonaws.com/cloudformation-templates-ap-northeast-1/Rails_Multi_AZ.template

$ ./generate_dependencies_graph.rb Rails_Multi_AZ.template
$ open deps.png


やっていること


  1. テンプレートからRefを見つける


  2. Refのうち、参照先がResourcesに無いものを省く


    • Parametersの参照にもRefが使われているため



  3. 集めたRefからgraphvizで図を作るためのdotを作る


  4. dotコマンドでpngをつくる


正直

AWS CloudFormation Designer で十分だよね、という気もしている