[.NET]ExcelのAWS環境定義書から直接AWS環境を構築してみる[CloudFormation]

2016.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS環境定義書からAWS環境を構築する

AWS環境定義書をExcelで記述したら、ボタン一発でAWS環境を作成してしまいたいと思います。

(この記事はその未来への扉を開く第一歩となる記事です)

作成するAWS環境

excel_cfn

CloudFormationを利用しています。上図はCloudFormationで作成する最も簡単なAWS環境です。VPCが1個あるだけです。

ユーザーはStackとVPCにNameタグをそれぞれ付けることができるようにします。

改造されたExcelの姿

わたしのExcelは下記のようなイメージにリボンが改造されています。

excel_cfn-02

このCFnグループの部分のテキストボックスに作成したいStackNameとVpcNameを指定してCreateVPCボタンをクリックするとAWS環境が作成されます。

リボン部分の改造は Excel改造シリーズ の記事を参照して下さい:

本来はExcelのシート部分仕様を記述してそれを読み込んでAWS環境を構築したいのですが、今回は簡易的にリボン部分に仕様を記述する形にしています。

作成対象のAWSアカウントのプロファイル(クレデンシャル)やリージョンはAWSタブのリボンで指定しています。

excel_cfn-03

(本来のExcel AWS環境定義書のイメージ。下記のような仕様書を書いて、ボタンをポチッと押すとAWS環境ができるといいな)

excel_cfn-04

CloudFormationのテンプレートファイル

CloudFormationのテンプレートファイルは下記のようになっています:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "VpcName": {
      "Description": "Name of Your VPC.",
      "Type": "String"
    }
  },
  "Resources": {
    "MyVPC": {
      "Type": "AWS::EC2::VPC",
      "Properties": {
        "CidrBlock": "10.0.0.0/16",
        "EnableDnsSupport": "true",
        "EnableDnsHostnames": "true",
        "InstanceTenancy": "default",
        "Tags": [
          {
            "Key": "Name",
            "Value": {
              "Ref": "VpcName"
            }
          }
        ]
      }
    }
  }
}

デフォルトのStackName以外にパラメータはVpcNameを指定できるようにしています。

Excelアドオンのコード

Excelのリボン上のボタンをクリックした際のイベントハンドラは下記のようになっています:

internal static void CreateVPC(string vpcName, string stackName)
{
    AWSCredentials credentials = ProfileManager.GetAWSCredentials(Globals.ThisAddIn.SelectedProfileName);

    var cfnClient = new AmazonCloudFormationClient(credentials, Globals.ThisAddIn.SelectedRegion);

    CreateStackRequest request = new CreateStackRequest();

    Parameter vpcNameParameter = new Parameter();
    vpcNameParameter.ParameterKey = "VpcName";
    vpcNameParameter.ParameterValue = vpcName;

    request.Parameters = new List<Parameter>() { vpcNameParameter };
    request.StackName = stackName;
    request.TemplateURL = "**********";

    CreateStackResponse response = cfnClient.CreateStack(request);

    MessageBox.Show("Stackが作成されました:\n" + response.StackId);
}

実際にAWS環境を作ってみる

Excel上のリボンにStackNameとVpcNameを入力してCreateStackボタンをポチッと押してみます。

excel_cfn-05

するとAWS環境が無事に作成されました(決してAWS Management Consoleからは作っておりません)

excel_cfn-06

excel_cfn-07

最後に

あとはExcelの仕様書を整備してパラメータをCloudFormationのテンプレートファイルに流し込むコードを充実させれば本格的なAWS環境もボタン一発で作成できるようになります。

果たしてそんな未来は来るのでしょうか?