セキュリティグループの状態をテキスト化&バージョン管理(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で差分を確認すると下記のようにセキュリティグループ同様、構成の変更が確認できます。
後は、同様のパターンで増やせばいいだけです。