この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
仮想プライベートサーバー(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