CM re:Growth 2014 TokyoでAWS SDK for .NETを用いたExcel魔改造の話をしてきた #cmdevio
こんにちは、福田です。2014年12月16日(火)に昨年に続きCM re:Growth 2014 TokyoでExcel魔改造の話をして来ました。
わたしのExcelのリボン
わたしのExcelのリボンは下記のようにAWSタブが追加されています。このAWSタブの各ボタンの動作でもが今回の発表になります。
re:Growth 2013のおさらい
最初にセピア色のスライドスクリーンショットを用い、昨年のおさらい。AWS案件完了時に作成するケースの多い「AWS環境定義書/AWS仕様書」に関して、自動生成するツールをExcelアドオンとして作成し、その自動生成デモを行った事をおさらいしました。
3つのExcel/Word魔改造デモ
今年は下記デモ3つを実施して終了な感じでした。
- AWS仕様書自動作成
- AWS監査資料作成
- お客様向けPDF資料自動作成
あまり各デモの解説やコードの紹介はやれなかったので、以後それぞれのデモの簡単な解説をしていきたいと思います。
AWS仕様書自動作成
今年はAWS仕様書自動作成Excelアドオンに下記のような機能を追加してみました:
- 各サービスへの出力精度を向上
- それぞれ最新のDescribe結果を表示するように修正
- Security Group、Route 53など頻出AWSサービスへの追加対応
- Credentials管理機能強化
- 最も安全な「SDK Store」の採用
具体的には下記AWSサービスの仕様書作成を行いました:
- EC2仕様書作成
- Security Group仕様書作成
- ELB仕様書作成
- RDS仕様書作成
(Route 53仕様書は当日までよさ気な出力の環境を用意出来なかったで割愛しました)
AWS仕様書のサンプルスクリーンショット
EC2仕様書
Security Group仕様書
ELB仕様書
RDS仕様書
AWS仕様書自動作成アドオンC#コード抜粋
Excelを制御するコードの一部を下記に抜粋してみました。Excelの部分はVBAのコードとほぼ同じなので簡単ですね。AWSアクセス部分もコードを呼んでいただければ直感的に理解できる内容のものになっていると思います。
EC2インスタンス一覧の取得
#region ■AWSアクセスクライアントの作成 var ec2Client = new AmazonEC2Client(Amazon.RegionEndpoint.APNortheast1); #endregion #region ■EC2インスタンス一覧の取得 DescribeInstancesRequest request = new DescribeInstancesRequest(); DescribeInstancesResponse response = ec2Client.DescribeInstances(request); List<Reservation> reservationList = response.Reservations; List<InstanceInReservation> instanceList = new List<InstanceInReservation>(); foreach (var reservation in reservationList) { for(int index = 0; index < reservation.Instances.Count; index++) { instanceList.Add(new InstanceInReservation() { Instance = reservation.Instances[index], ReservationId = reservation.ReservationId , AmiLaunchIndex = index}); } } #endregion
※独自のInstanceオブジェクトとReservationIdとAmiLaunchIndexをもったモデルを用意しています。
アクティブシートの取得とシート名の変更
#region ■アクティブシート参照の取得とセル変数の宣言 // using Excel = Microsoft.Office.Interop.Excel; Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet); Excel.Range cell; if (activeWorksheet == null) { return; } #endregion #region ■シート名の変更 try { activeWorksheet.Name = "EC2"; } catch (Exception) { } #endregion
インスタンス一覧の描画
#region ■EC2インスタンス一覧の描画 foreach (var instanceWirhReservation in instanceList) { var instance = instanceWirhReservation.Instance; string name = (from tag in instance.Tags where tag.Key == "Name" select tag.Value).ToArray()[0]; cell = activeWorksheet.get_Range("B" + rowCounter); cell.Value2 = name; cell = activeWorksheet.get_Range("C" + rowCounter); cell.Value2 = instance.InstanceId; cell = activeWorksheet.get_Range("D" + rowCounter); cell.Value2 = instance.InstanceType.Value; cell = activeWorksheet.get_Range("E" + rowCounter); cell.Value2 = instance.Placement.AvailabilityZone; cell = activeWorksheet.get_Range("F" + rowCounter); cell.Value2 = instance.PublicIpAddress; rowCounter++; } int instanceListEnd = rowCounter - 1; // インスタンス一覧に罫線を引く activeWorksheet.get_Range("B" + instanceListStart + ":" + "F" + instanceListEnd).Borders.LineStyle = true; // 1行開ける rowCounter++; #endregion
AWS監査資料の作成
次にAWS監査資料の作成を行ってみました。といっても、単にまずはAWS Configの内容をExcelで表示するというところまでやっただけのデモになります。
今回はSecurity Groupの設定変更状況をExcelに出力しています。監査資料とまでは全然行きませんでしたが、ちょっとそれらしい感じにするために、Security Groupの注意すべきエントリー(0.0.0.0/0)を赤字表示させてみています。
AWS監査資料自動作成アドオンC#コード抜粋
AWS Configのデータ出力処理としては下記のようにGetResourceConfigHistoryを呼び出しています。
(処理を簡易にするためにResourceIdを直書きしています)
#region ■AWSアクセスクライアントの作成 var configClient = new AmazonConfigServiceClient(Amazon.RegionEndpoint.USEast1); #endregion #region ■ResourceConfigHistoryの取得 var getResourceConfigHistoryRequest = new GetResourceConfigHistoryRequest(); getResourceConfigHistoryRequest.ResourceType = ConfigResourceType.AWSEC2SecurityGroup; getResourceConfigHistoryRequest.ResourceId = "sg-ddc034b9"; var getResourceConfigHistoryResponse = configClient.GetResourceConfigHistory(getResourceConfigHistoryRequest); var configItems = getResourceConfigHistoryResponse.ConfigurationItems; // 念のためリソースを古い順に並べ替える configItems = (from configItem in configItems orderby configItem.ConfigurationItemCaptureTime select configItem).ToList(); #endregion
Wordの改造
PDFの資料を毎日のように作成しているのですが、その元になるのはWordドキュメントです。
お客様にIAMユーザーの情報を送ったりする場合、AWS Management Consoleが出力するCSVファイルをそのまま送ったのでは味気ないですよね。
そこでPDFのアカウント通知書を作成してお客様に送っています。
今回は下記テンプレートからその次の完成品を作成するWordアドオンを作成しました。
Wordの改造はやってみるとExcelと全く同じ感じで、やりたいことをどうやってコードにするかはExcel同様Word VBAの資料を漁れば簡単に実現できました。
まとめ
まとめという名の2015年の目標:
- インストーラー
- 仕様書自動生成の他サービスへの展開
- DynamoDB、Redshift、ElastiCashe、S3等
- AWS監査資料の強化
- AWS Config、AWS CloudTrail
- AWS Lambda連携
- Amazon Cognito認証