よくあるケース
EC2を中心としたAWS環境を運用管理していると、以下のような質問をされることがあります。
「このサーバーって、何GBのディスクが何個ついているの?合計何GBなの?」
「他のサーバーはどう?全サーバーとも教えてほしいんだけど、Excelでちょうだい。」
「この500GBのディスクって、HDD?SSD?」
オンプレでよくあった質問ですが、クラウドでもよくあったりします。
AWSマネージメントコンソール(マネコン)で、EC2とそれにアタッチされたEBSの情報を取得しようとすると、EC2インスタンスごとには確認できますが、サーバー数が多いと急に困ってしまいます。
また、EC2に複数のEBSがアタッチされている場合、マネコンではその合計容量が表示されることもありません。
さらに、マネコンではExcelでダウンロードできる機能もありません。
デモページ
この問題を解決するために、EC2とEBSをセットで一覧表示するWebページを作成してみました。
以下がそのデモページです。
このデモでは、各EC2と、それにアタッチされたEBSのサイズやタイプを一覧で表示することができます。
また、一覧データをExcel形式でダウンロードする機能もあります。
デモページの動作
以下の流れで動作します。
- 静的Webサイト(HTMLとJavascript)がWebブラウザに読み込まれます
- Javasciprtにより右記の2つのAPIが呼び出されます。
EC2:DescribeInstances
,EC2:DescribeVolumes
- APIの先では、AWS Lambda関数を実行する処理があり、AWS APIの結果がJson形式でWebブラウザに返ります
- Webブラウザ上(クライアントサイドのプログラム)で、EC2とEBSを結合させたデータを作成します
- 結果を一覧表示します
- Execlダウンロードのボタンを押すと、一覧表示された内容がExcelファイルでダウンロードされます
デモページで表示される列
EBSタイプをグループ化しています。
- 汎用 SSD (gp2, gp3)
- Provisioned IOPS SSD (io1, io2)
- HDD (st1, sc1)
に分けて表示します。
EBSタイプの Volumeの列では、VolumeID (EBSのNameタグ)
あるいはNameタグが無い場合は VolumeID (デバイス名)
を表示します。
デモページでの制限事項
デモのためというのもあり、以下は考慮されていません。
実装次第で対応可能です。
- io2 Block Expressの表示
- インスタンスストアの表示
- マルチアタッチされたボリュームの考慮
- マルチリージョン(デモは単一リージョン)
- マルチアカウント(デモは単一アカウント)
構築方法
「describe-api」の利用
このデモは、別のの記事で紹介したAWS Lambda関数「describe-api」を活用しています。
「describe-api」は、URLパラメータを組み合わせることでAWSのAPIを呼び出し、その結果をWebブラウザに返すLambda関数です。
これにより、マネコンにログインせずとも、Webブラウザ上でAWSの情報を取得することが可能となります。
- Lambda関数に必要なIAMロールを作成します。
- Lambda関数
describe-api
をデプロイします。
S3によるWebサービス
Webページ自体は、AWSのS3バケットを利用してホスティングします。
- S3バケットを作成します。
- S3に対する必要な外部アクセスを設定します。(パブリックアクセスの許可や、必要に応じてCDNの設定)
- S3バケットにWebページのHTML, Javascriptや関連するリソースをアップロードします。
これらの手順により、Webサービスを構築することができます。
他のWebサービス
このWebサービスは 別記事 Qiita - describe-api AWS Lambda関数によるAWS APIの実行 の具体的な実装例として、
記事を分けてここで紹介しました。
他にも、こういう質問もよくあったりします。
「全サーバーの一週間の稼働状況(停止・起動の時刻)が知りたい。」
これは describe-api
だけでは難しくて、他のLambda関数を利用することで実装可能です。
それはまた別の記事で紹介します。