セキュリティグループの状態をテキスト化&バージョン管理(Git)に続き、今回は、EC2の構成もYAMLで出力してGitで管理し、GitWebで閲覧できるようにしてみました。

YAMLに出力するPHPスクリプトは下記のようになります。

require_once("/opt/aws/php/default/sdk.class.php");

$regions = array(
 AmazonEC2::REGION_US_E1,
 AmazonEC2::REGION_US_W1,
 AmazonEC2::REGION_EU_W1,
 AmazonEC2::REGION_APAC_SE1,
 AmazonEC2::REGION_APAC_NE1
);

$yaml = yaml_parse_file("/opt/cloudpack/conf/$argv[1]/credential.yaml");
$ec2 = new AmazonEC2($yaml["accessKey"], $yaml["secretKey"]);

foreach($regions as $region) {
 $ec2->set_region($region);
 $response = $ec2->describe_instances();
 file_put_contents(
   "/opt/cloudpack/var/$argv[1]/git/ec2/$region.yaml",
   yaml_emit(json_decode($response->body->reservationSet->to_json(), true))
 );
}

exit(0);

今回は、アクセスキーやシークレットキーをPHPでYAMLファイルの読み込みのように外部のYAMLファイルから取得するようにしています。

セキュリティグループ同様、下記のようにリージョンごとのYAMLファイルが作成されます。

# ./output-ec2-create suz-lab
# ls -1 /opt/cloudpack/var/suz-lab/git/ec2/
ap-northeast-1.yaml
ap-southeast-1.yaml
eu-west-1.yaml
us-east-1.yaml
us-west-1.yaml

実際のYAMLファイルは以下の通りです。

# cat /opt/cloudpack/var/suz-lab/git/ec2/ap-northeast-1.yaml
---
item:
 reservationId: r-00000000
 ownerId: "000000000000"
 groupSet:
   item:
   - groupId: sg-00000000
     groupName: default
   - groupId: sg-00000000
     groupName: web
 instancesSet:
   item:
     instanceId: i-00000000
     imageId: ami-00000000
     instanceState:
       code: "16"
       name: running
     privateDnsName: ip-000-000-000-000.ap-northeast-1.compute.internal
     dnsName: ec2-000-000-000-000.ap-northeast-1.compute.amazonaws.com
     reason: []
     keyName: suz-lab_ap-northeast-1
     amiLaunchIndex: "0"
     productCodes: []
     instanceType: m1.large
     launchTime: "2011-09-20T01:51:18.000Z"
     placement:
       availabilityZone: ap-northeast-1a
       groupName: []
       tenancy: default
     kernelId: aki-00000000
     ramdiskId: ari-00000000
     monitoring:
       state: enabled
     privateIpAddress: 000.000.000.000
     ipAddress: 000.000.000.000
     groupSet:
       item:
       - groupId: sg-00000000
         groupName: default
       - groupId: sg-00000000
         groupName: web
     architecture: x86_64
     rootDeviceType: ebs
     rootDeviceName: /dev/sda1
     blockDeviceMapping:
       item:
       - deviceName: /dev/sda1
         ebs:
           volumeId: vol-00000000
           status: attached
           attachTime: "2011-09-20T01:51:37.000Z"
           deleteOnTermination: "true"
       - deviceName: /dev/sdf1
         ebs:
           volumeId: vol-7833b915
           status: attached
           attachTime: "2011-09-20T01:53:46.000Z"
           deleteOnTermination: "false"
     virtualizationType: paravirtual
     clientToken: []
     tagSet:
       item:
         key: Name
         value: web01
     hypervisor: xen
 requesterId: 058890971305
...

そして、任意にEC2の内容を変更し(タグを変更)、コミットしてからGitWebでセキュリティグループの状態を確認のようにGitWebで差分を確認すると下記のようにセキュリティグループ同様、構成の変更が確認できます。

後は、同様のパターンで増やせばいいだけです。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら