AWS CLIからLightsailのスナップショットを作成する
仮想プライベートサーバー(VPS)を簡単に利用できる Amazon Lightsail は
- インスタンス(EC2 の AMI 相当)
- ストレージ(EC2 の EBS 相当)
の粒度でスナップショットを作成できます。
今回は AWS CLI からこれらのスナップショットを作成する方法を紹介します。
Cloudwatch Events と Lambda を連携させて、定期実行する方法は次の記事を参照ください。
Cloudwatch EventsとLambdaでLightsailのスナップショットを定期取得する | Developers.IO
前提
Amazon Lightsail のテンプレートから WordPress インスタンス(WP)を起動し、別途、8GB のディスク(MyDisk)をアタッチしているものとします。
$ aws lightsail get-instance --instance-name WP { "instance": { "resourceType": "Instance", ... "blueprintId": "wordpress_4_9_6", "name": "WP", "hardware": { "disks": [ { "iops": 100, "attachmentState": "attached", "createdAt": 1530982976.689, "sizeInGb": 20, "path": "/dev/sda1", "attachedTo": "WP", "isSystemDisk": true }, { "resourceType": "Disk", "attachmentState": "attached", "isAttached": true, "name": "MyDisk", "state": "in-use", "path": "/dev/xvdf", "attachedTo": "WP", ... } ], ... }, "blueprintName": "WordPress", ... } }
インスタンスのスナップショット
create-instance-snapshot API を使い、対象のインスタンス名(--instance-name
)とスナップショット名(--instance-snapshot-name
)を指定します。
$ aws lightsail create-instance-snapshot \ --instance-name WP \ --instance-snapshot-name WP-test { "operations": [ { "operationDetails": "WP", "status": "Started", "createdAt": 1530992189.634, "id": "7aec100d-ac2f-4266-b4de-833ceea8d1c8", "resourceType": "InstanceSnapshot", "operationType": "CreateInstanceSnapshot", "isTerminal": false, "location": { "availabilityZone": "all", "regionName": "eu-central-1" }, "resourceName": "WP-test", "statusChangedAt": 1530992189.634 }, { "operationDetails": "WP-test", "status": "Started", "createdAt": 1530992189.634, "id": "2a2d6f9f-6c4b-4f04-8081-c872dacb93f0", "resourceType": "Instance", "operationType": "CreateInstanceSnapshot", "isTerminal": false, "location": { "availabilityZone": "eu-central-1a", "regionName": "eu-central-1" }, "resourceName": "WP", "statusChangedAt": 1530992189.634 } ] }
作成したスナップショットを get-instance-snapshots API で確認します。
$ aws lightsail get-instance-snapshots { "instanceSnapshots": [ { "name": "WP-test", "location": { "regionName": "eu-central-1", "availabilityZone": "all" }, "createdAt": 1530992189.634, "state": "available", "fromBundleId": "nano_1_0", "arn": "arn:aws:lightsail:eu-central-1:123456789012:InstanceSnapshot/d831c28d-9c7f-4c7b-88e5-7d6b82114c4b", "fromInstanceArn": "arn:aws:lightsail:eu-central-1:123456789012:Instance/41abddc4-62b5-4d5a-8355-e5e674b01b65", "fromBlueprintId": "wordpress_4_9_6", "resourceType": "InstanceSnapshot", "fromInstanceName": "WP", "fromAttachedDisks": [ { "path": "/dev/xvdf", "name": "MyDisk", "sizeInGb": 8 } ], "sizeInGb": 20, "supportCode": "174337882580/ami-ec8db707" } ] }
create-instances-from-snapshot API を使い、取得済みスナップショット名(--instance-snapshot-name
)と新規インスタンス名(--instance-name
)を指定し、インスタンスをリストアします。
$ aws lightsail create-instances-from-snapshot --instance-names restored-WP \ > --availability-zone eu-central-1a \ > --instance-snapshot-name WP-test \ > --bundle-id nano_1_0 { "operations": [ { "status": "Started", "isTerminal": false, "location": { "availabilityZone": "eu-central-1a", "regionName": "eu-central-1" }, "operationType": "CreateInstancesFromSnapshot", "createdAt": 1530993202.452, "resourceName": "restored-WP", "id": "9fa98e12-0025-4e46-839c-c0cd1ab969ef", "resourceType": "Instance", "statusChangedAt": 1530993202.452 } ] }
--bundle-id
はプライスプラント設定を紐付けます。プランをかえない場合、既存のものを流用します。
バンドル情報は スナップショットに "fromBundleId": "nano_1_0"
というように含まれています。
バンドルの一覧は次の API から確認可能です。
$ aws lightsail get-bundles { "bundles": [ { "instanceType": "nano", "cpuCount": 1, "diskSizeInGb": 20, "supportedPlatforms": [ "LINUX_UNIX" ], "price": 5.0, "isActive": true, "transferPerMonthInGb": 1024, "ramSizeInGb": 0.5, "name": "Nano", "power": 300, "bundleId": "nano_1_0" }, ... }
最後に不要になったスナップショットを delete-instance-snapshot API で削除します。
$ aws lightsail delete-instance-snapshot --instance-snapshot-name WP-test { "operations": [ { "createdAt": 1530993349.468, "resourceName": "WP-test", "status": "Succeeded", "isTerminal": true, "id": "fc2d36a9-9e2a-4444-a4fb-0077e7a629b9", "resourceType": "InstanceSnapshot", "location": { "availabilityZone": "all", "regionName": "eu-central-1" }, "operationType": "DeleteInstanceSnapshot", "statusChangedAt": 1530993349.468 } ] }
ディスクのスナップショット
create-disk-snapshot API を使い、対象のインスタンス名(--disk-name
)とスナップショット名(--disk-snapshot-name
)を指定します。
$ aws lightsail create-disk-snapshot \ --disk-name MyDisk \ --disk-snapshot-name MyDisk-test { "operations": [ { "resourceName": "MyDisk-test", "isTerminal": false, "statusChangedAt": 1530992294.397, "operationDetails": "MyDisk", "location": { "regionName": "eu-central-1", "availabilityZone": "all" }, "id": "abcb5977-3ec5-4097-b81e-848519feda48", "status": "Started", "operationType": "CreateDiskSnapshot", "createdAt": 1530992294.397, "resourceType": "DiskSnapshot" }, { "resourceName": "MyDisk", "isTerminal": false, "statusChangedAt": 1530992294.397, "operationDetails": "MyDisk-test", "location": { "regionName": "eu-central-1", "availabilityZone": "eu-central-1a" }, "id": "e1434553-f382-47bb-82be-346ae689cb0b", "status": "Started", "operationType": "CreateDiskSnapshot", "createdAt": 1530992294.397, "resourceType": "Disk" } ] }
作成したスナップショットを get-disk-snapshots API で確認します。
$ aws lightsail get-disk-snapshots { "diskSnapshots": [ { "createdAt": 1530992294.397, "progress": "100%", "sizeInGb": 8, "fromDiskName": "MyDisk", "location": { "regionName": "eu-central-1", "availabilityZone": "all" }, "arn": "arn:aws:lightsail:eu-central-1:123456789012:DiskSnapshot/d3c29f0b-0e1e-41ce-bfd6-cd763e43e556", "state": "completed", "fromDiskArn": "arn:aws:lightsail:eu-central-1:123456789012:Disk/10872187-8d3e-4149-b6fa-4561087ca960", "supportCode": "174337882580/snap-093e2fec86780e52b", "name": "MyDisk-test", "resourceType": "DiskSnapshot" } ] }
create-disk-from-snapshot API を使い、取得済みスナップショット名(--disk-snapshot-name
)と新規ディスク名(--disk-name
)を指定し、ディスクをリストアします。
アタッチ先インスタンスと同じアベイラビリティゾーン(--availability-zone
)を指定してください。
ディスクのサイズ(--size-in-gb
)は取得済みスナップショット以上のサイズのみ指定可能です。
$ aws lightsail create-disk-from-snapshot \ --disk-name restored-disk \ --disk-snapshot-name MyDisk-test \ --availability-zone eu-central-1a \ --size-in-gb 10 { "operations": [ { "id": "c344fb69-64ce-46c1-ab21-7c77e7967b38", "location": { "availabilityZone": "eu-central-1a", "regionName": "eu-central-1" }, "createdAt": 1530992810.275, "isTerminal": false, "operationType": "CreateDiskFromSnapshot", "resourceName": "restored-disk", "resourceType": "Disk", "status": "Started", "statusChangedAt": 1530992810.616 } ] }
最後に不要になったスナップショットを delete-disk-snapshot API で削除します。
$ aws lightsail delete-disk-snapshot --disk-snapshot-name MyDisk-test { "operations": [ { "resourceType": "DiskSnapshot", "statusChangedAt": 1530993308.209, "isTerminal": true, "createdAt": 1530993308.209, "resourceName": "MyDisk-test", "status": "Succeeded", "id": "61fb5779-379f-4f8e-ac45-76f4c4111de4", "location": { "availabilityZone": "all", "regionName": "eu-central-1" }, "operationType": "DeleteDiskSnapshot" } ] }
まとめ
Amazon Lightsail のインスタンス・ディスクのスナップショットの作成・リストアを AWS CLI から行う方法を紹介しました。
Lightsail 運用の際は、これらを参考に、要件に合わせてスナップショットの取得を実装ください。
また、AWS からスナップショットの作成を定期実行する CloudFormation テンプレートが提供されています。 このテンプレートを利用すると、作り込み負荷が軽減されます。 詳細は次の記事を参考ください。
Cloudwatch EventsとLambdaでLightsailのスナップショットを定期取得する | Developers.IO
参考
- AWS CLI Lightsail reference
- https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-amazon-lightsail