CloudFormaionのテンプレートを作るときのパラメータ周りのイライラを軽減したかった

公開日:2018-12-13
最終更新:2018-12-13

はじめに

この記事は、2つのアドベントカレンダーに同時投稿です。
QiitaのAWS初心者 Advent Calendar 2018と友人のたろえどん捏造アドベントカレンダー。
Qiitaの方、壮大に遅刻してごめんなさい。
友人の方、間に合わせた。

モチベ

私は馬鹿です。
プログラムを書くときに、書いた行数よりも多いバグがあることなんて毎日です。
そんな私がCloudFormaionのテンプレートみたいな、めっちゃ長いやつを書かなくちゃいけないのです。それが仕事なんだから。さらに言うと、パラメータをテンプレートから括りだしたパラメータファイル作らなきゃいけない……。

当然、動かない。うまくstack作ってくれない。どうしようもない。半泣きになる。
特にイライラするのは、パラメータが未定義の場合。jenkinsとか使ってデプロイする場合、たった1つのバグを修正してデプロイし直すのに、数分かかってしまう。そして全泣きになる。

誰でもいいから隣にずっといて、「そこ未定義だよ?」「パラメータファイルにちゃんと書いた?」「もうちょっと頑張ろうよ」「大丈夫?おっぱい揉む?」って言ってくれる巨乳で黒髪ロングな純情痴女系幼なじみ美少女がいてほしかった。

そんなの画面の中にしかいないので、自分で簡単な静的解析器を書くことにしました。
言語はPythonです。時間がなかったので、1番パパッと書ける言語にしました。

使い方

コードはここにあります。依存しているライブラリはpyyamlのみです。

pip install pyyaml  

として、依存ライブラリをインストールしてください。
そして、pythonファイルの引数にCloudFormationのテンプレートとパラメータファイルのパスを与えてあげて、いい感じに動かしてください。

python {path_to_cfn_parameter_validater.py} {path_to_cfn_file.(json|yaml)} {path_to_params_file(.json|yaml)}  

結果として、こんな感じで出ます。
ref: {name} is no defined at cfn fileは、CloudFormaionテンプレートファイルで未定義なパラメータ{name}に対し参照を行っている場合に出力されます。
param: {name} is not defined at param fileは、CloudFormaionテンプレートファイルで定義済みにもかかわらず、パラメータファイルに記載されていない場合に出力されます。

ref: WriteCapacityUnit is not defined at cfn file  
param: HashKeyElementName is not defined at param file  
param: HashKeyElementType is not defined at param file  
param: ReadCapacityUnits is not defined at param file  
param: WriteCapacityUnits is not defined at param file  

できないこと

このプログラム、全然完璧じゃないです。
パッと思いつくだけで、不完全な点が2つあります。

  • YAMLの短縮記法に未対応
  • パラメータの条件を全くみていない

yamlの短縮記法に未対応

こちらのDeveloppersIOの記事に詳しいのですが、CloudFormaionのテンプレートは、拡張されたYAMLに対応しています。しかし、コード中で使っているpyyamlは当然この拡張に対応していません。そのため、拡張されたYAMLで記述したCloudFormaitonのテンプレートファイルを読み込ませようとすると、パースエラーが発生します。近いうちに、この部分をなんとかします。

パラメータの条件を全くみていない

CloudFormationのパラメータは、その型や最大値やパターンを設定することができます。
そして、その条件から外れた値をパラメータファイルに記述したままstackを作成しようとすると、当然失敗します。この条件の部分を現在のコードはみていません。こちらも近いうちに対応する予定です。

さいごに

仕事では短縮記法バリバリに使っているので、まだ自分は救われていない……もう少し頑張ろう……。
あと、僕のやろうとしていることを、もっと賢い方法で解決したものがあるのなら、是非教えてください。

記事が少しでもいいなと思ったらクラップを送ってみよう!
36
+1
@hisatoshiの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする