NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

AWSリソースの差分比較ツールを自作したのでご覧あれ

本記事は マイグレーションウィーク 6日目の記事です。
💻🖥 5日目 ▶▶ 本記事 🖥💻

初めに

こんにちは、上田です。

2024年5月にネットコムに入社したばかりで社内ネタを持ち合わせていないので、作ってみたシリーズに乗っかってみました。

また、今回のテーマはクラウドマイグレーションということなので、オンプレミスからクラウドへITリソースを移行するに伴って人間の考え方がどのように移り変わっていくのか、という観点も交えながら論じていこうと思います。

 

ITの変遷と思想の変遷

まず、オンプレミスからクラウドへなぜ移行するのかを考えてみます。

クラウドのメリットをいくつか挙げてみると、

  • コストが安価
  • 導入が容易
  • 運用負担が少ない
  • スケールしやすい

他にもまだあると思いますが、一旦こんなところでしょうか。

なんかファストフードと似ていますね。(安い・早い・旨い・チェーン展開)

 

クラウドには上記のような特徴があるので、オンプレミスと比べて、ITリソースの増減が恐ろしい程に早く、かつ容易に実現可能です。

チーズバーガーをダブルチーズバーガーに変更するぐらいの気軽さでサーバーを増やせます。コース料理ではそうはいきませんね。

 

これだけ容易にITリソースを増減できる環境が提供されているのですから、自ずと色々試してみたくなる、というのが人間の性ではないでしょうか。(高価なゲームの無料体験版があればまず体験版を試しますよね?)

 

新たな問題

そういう人間心理が働くため、大抵リソース数は増えます。

リソース数が増えるということはつまり、システム環境が増えるということを意味します。

環境が増えるとよく顔を出すのが、環境差分問題です。

 

環境差分をチェックすると、この差分は意図的なのかそうでないのかどっちなんだ!?、というケースがありませんか?(私はありました)

 

意図的に発生させている差分ならドキュメント等に記載して共有しておけばよいのですが、操作ミス等で潜在的もしくは後発的に発生してしまった差分は時限爆弾になりかねません。

 

Terraform等のIaCツール導入で、設定を多環境に一斉展開できるようになってはいますが、最終的にリソース設定を確認するのは人間の目ですよね。(結局見る)

一度限りの目視確認であればまだ頑張れるのですが、定期的にとなると、最初の何回かは全部を見たものの、それ以降は見ていないにも関わらず「全部見ました」と嘯きたくもなってきます。

朝9時開始のリモート面接で上半身だけスーツ下半身はパジャマのまま、というのも同じ思考だと言えるかもしれません。

 

作ってみた

さて、そろそろタイトル回収を始めます。

リソース差分比較の自動化ツールを探しましたが見つからなかったので、自作してみました。

(探し方が悪かった?、いや、なかったということで)

 

なお、これから自作ツールについて色々語りますが、本ブログでは説明しないことをまずこちらに記載しておきます。

  • コードの詳細

コードサンプルは後述するリポジトリにて公開しておりますので、そちらをご覧ください。

コードは自由に改変して頂いて問題ありません。

  • ツール動作の前提条件

あくまで自作ツールのため、動作環境は厳密に定義しておりません。

社内プロキシやAWSのMFA設定等、手元で動作するよう良しなに設定して頂ければと思います。

 

DARS

何と呼ぶ???

ダース、と呼びます。

1ダース、2ダース、3ダースと数えます。

Diff Aws Resource Script の頭文字から取りました。

 

コードはこちら

コードはこちらで公開しております。

※本記事および当執筆者のその他の記事で掲載されているソースコードは自主研究活動の一環として作成したものであり、動作を保証するものではありません。使用する場合は自己責任でお願い致します。また、予告なく修正することもありますのでご了承ください。

本ブログではDARSにどのような機能があるのかを紹介した上で、

実際の実行結果を載せてイメージを掴んで頂く、という目的に全集中します。

 

機能紹介の前に

今回は、クラウド提供サービスとしてAWSを題材にします。

また、比較対象の題材リソースとしてはCloudFrontを使用します。

1ビヘイビア毎に結構な設定項目がありますし、ビヘイビアも増えてきますし、おすし。目視確認が大変だったので。

 

事前準備として、設定が同じCloudFrontディストリビューションを2つ作成しておきます。

ディストリビューション毎に一意となるべき設定値(ディストリビューションIDやドメイン名等)については、ツール内のプログラムにより予め比較対象外としています。

それでは機能紹介に移ります。

 

3つの機能

3つの機能を作ってみました。

  • diff
  • conf
  • html

 

diff

2つのリソースの設定を比較して、差分があれば表示するモードです。

LinuxコマンドラインツールであるdiffコマンドのAWSリソース版のようなものですかね。

ディストリビューションIDを並べてdiffモードで実行します。

現時点では同じ設定です。

"Diff nothing."(画像末尾)という結果が返ってきました。

設定差分がなかったことが分かります。

 

続いてディストリビューションの設定を変更してみましょう。

ビヘイビアのパスパターンを変更します。

 

それでは再度実行します。

今度は先程変更した部分が色付きで出力されていますね。

変更箇所の前後も3行出力するようにしています。

 

conf

設定の一覧を出力するモードです。ただそれだけです。

現設定を手軽に確認するために作りました。

下に見切れていますが、ディストリビューションの設定が出力されています。

 

html

diffモードの出力結果をhtmlファイルへと出力します。

それ以外はdiffモードと何ら変わりはないです。

実行するとhtmlファイルが作成されます。(画像末尾)

 

ブラウザで開いてみましょう。

diffモードと同じ出力結果となっていますね。

ただ、ほとんどの文字に色が付いた分、差分が分かりづらいかも。(本ブログを書いている時に気付いた)

ファイルとして出力される分、証跡を残す目的として使いやすい、ということで良しとしましょう。

 

以上、3機能を紹介しました。

 

バッチ編

ただこれまで紹介した機能は、1対1でリソースを比較する、という前提でした。

これでは比較したいリソースが増えてきた時に、以下のデメリットがありそうです。

  • 毎回コマンド内容を変えて都度実行しないといけないので面倒
  • 1対多の比較(マスタと他のリソース群の差分検出)も面倒

事前に比較したいリソースを全てファイルに記載しておいて、後はそれを読み込んで実行するだけ。

そんな機能が望まれます。

 

ご安心ください、用意しております。

 

まず任意のファイル名で比較したいリソース群を定義しておきます。

上記画像では、同じリソースに対してそれぞれのモードを1回ずつ実行するだけの無意味さ満点の定義となっていますがお許しを。

書き方の詳細は、リポジトリ内の"resource-list-guide.txt"をご覧ください。

 

そして定義したファイルを"batch-dars.sh"で読み込みます。

またまた下に見切れていますが、それぞれのモードが1回ずつ自動実行されました。

 

これにより事前定義したリソース群に対して、一度の実行で差分をまとめて洗い出すことが事実上可能となりました。

めでたしめでたし。

(DARSの対応サービス拡張と事前定義ファイルの作成、頑張ってください) <- 他人事 

 

これにてDARSの機能説明は全て終わりです。

 

課題

クロスアカウントでの比較は現時点でできないため、課題として挙げています。

開発環境と本番環境との比較ができれば便利かなとふと思ったので。

 

ユースケース

  • 定期的なリソースチェックが必要なシステムでのチェック自動化
  • 設定が同一であることの証跡取り

こんなところでしょうか。

 

最後に

得られた副産物

開発の段階でaws-cliコマンドとjqコマンドのドキュメントは読み漁ったので、詳しくなれたかなと思います。

aws-cliコマンドのドキュメントには各コマンドのクオータ等がさらっと記載されていたりするので、コマンド毎に全文目を通しておくといいかもしれません。

 

人間は間違える

後付けですが、DARSにはゼロトラストの思想が含まれていました。

自分で作っておきながら、本ブログを書き終える段階で気付きました。

 

以上、ありがとうございました。

github.com

執筆者 : 上田成秀

エンジニア教育担当

一応インフラエンジニア