Amazon Lightsail インスタンスのスケールアップ手順を試してみた
こんにちは、菊池です。
AWS re:Invent 2016で発表されたAmazon Lightsailで、インスタンスのスケールアップを試してみました。
手順
EC2インスタンスのスケールアップではインスタンスの停止 -> インスタンスタイプの変更 -> 起動 の手順で簡単にスケールアップが可能です。一方、Lightsailでは手順が異なり、現時点で以下の点に注意が必要です。
- 一度作成/起動したインスタンスのスペック変更は不可能
- コンソールからの操作だけでは不可能で、AWS CLIによる操作が必要
まず、一度作成したのインスタンスのスペック変更はできませんので、以下のような手順を踏む必要があります。
- 対象インスタンスのSnapshotを作成
- AWS CLIを使ってSnapshotからBundle-IDを指定してインスタンスを作成
- DNSレコードまたはStatic IPを変更し、新しく作成したインスタンスにユーザのアクセス先を変更
- 元のインスタンスを削除
やってみた
実際に、AWS CLIから以下の作業を実施してみました。
- Snapshot作成
- スナップショットからインスタンス作成
- 元のインスタンスを削除
まずは起動しているインスタンスをget-instances
で確認します。
$ aws lightsail --region us-east-1 get-instances { "instances": [ { "username": "bitnami", "isStaticIp": false, "networking": { "monthlyTransfer": { "gbPerMonthAllocated": 1000 }, "ports": [ { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 80, "accessDirection": "inbound", "toPort": 80 }, { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 22, "accessDirection": "inbound", "toPort": 22 }, { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 443, "accessDirection": "inbound", "toPort": 443 } ] }, "name": "WordPress-1", "resourceType": "Instance", "supportCode": "015515485450/i-xxxxxxxxxxxxxxxxx", "blueprintName": "WordPress", "hardware": { "cpuCount": 1, "ramSizeInGb": 0.5 }, "privateIpAddress": "172.26.8.26", "state": { "code": 16, "name": "running" }, "arn": "arn:aws:lightsail:us-east-1:xxxxxxxxxxxx:Instance/b9e61e46-50ff-4fb5-bef6-8efc0ce5b8cf", "publicIpAddress": "52.206.xxx.xxx", "blueprintId": "wordpress_4_6_1", "bundleId": "nano_1_0", "sshKeyName": "LightsailDefaultKeyPair", "createdAt": 1484776375.816, "location": { "availabilityZone": "us-east-1a", "regionName": "us-east-1" } } ] }
"name": "WordPress-1"
というインスタンスが起動していますので、create-instance-snapshot
でSnapshotを作成します。
$ aws lightsail --region us-east-1 create-instance-snapshot \ --instance-snapshot-name "WordPress-1-snapshot" \ --instance-name "WordPress-1" { "operations": [ { "status": "Started", "resourceType": "InstanceSnapshot", "isTerminal": false, "operationDetails": "WordPress-1", "statusChangedAt": 1484778032.035, "location": { "availabilityZone": "all", "regionName": "us-east-1" }, "operationType": "CreateInstanceSnapshot", "resourceName": "WordPress-1-snapshot", "id": "85bfae0a-b585-40f5-a061-57340eed07be", "createdAt": 1484778032.035 }, { "status": "Started", "resourceType": "Instance", "isTerminal": false, "operationDetails": "WordPress-1-snapshot", "statusChangedAt": 1484778032.035, "location": { "availabilityZone": "us-east-1a", "regionName": "us-east-1" }, "operationType": "CreateInstanceSnapshot", "resourceName": "WordPress-1", "id": "3b395b8c-98e1-4eb4-95d2-2ef742bc116e", "createdAt": 1484778032.035 } ] }
Snapshot作成が開始されましたので、利用可能になるまで待ちます。Snapshotのステータスはget-instance-snapshots
で確認できます。
$ aws lightsail --region us-east-1 get-instance-snapshots { "instanceSnapshots": [ { "fromInstanceName": "WordPress-1", "name": "WordPress-1-snapshot", "sizeInGb": 20, "resourceType": "InstanceSnapshot", "supportCode": "015515485450/ami-cfe50dd9", "fromInstanceArn": "arn:aws:lightsail:us-east-1:xxxxxxxxxxxx:Instance/b9e61e46-50ff-4fb5-bef6-8efc0ce5b8cf", "state": "pending", "arn": "arn:aws:lightsail:us-east-1:xxxxxxxxxxxx:InstanceSnapshot/13730bd7-69eb-44a0-b79c-5f2f3dc0b39a", "fromBundleId": "nano_1_0", "fromBlueprintId": "wordpress_4_6_1", "createdAt": 1484778032.035, "location": { "availabilityZone": "all", "regionName": "us-east-1" } } ] }
"state": "pending"
となっているのが、"state": "available"
となれば利用可能です。
$ aws lightsail --region us-east-1 get-instance-snapshots { "instanceSnapshots": [ { "fromInstanceName": "WordPress-1", "name": "WordPress-1-snapshot", "sizeInGb": 20, "resourceType": "InstanceSnapshot", "supportCode": "015515485450/ami-cfe50dd9", "fromInstanceArn": "arn:aws:lightsail:us-east-1:xxxxxxxxxxxx:Instance/b9e61e46-50ff-4fb5-bef6-8efc0ce5b8cf", "state": "available", "arn": "arn:aws:lightsail:us-east-1:xxxxxxxxxxxx:InstanceSnapshot/13730bd7-69eb-44a0-b79c-5f2f3dc0b39a", "fromBundleId": "nano_1_0", "fromBlueprintId": "wordpress_4_6_1", "createdAt": 1484778032.035, "location": { "availabilityZone": "all", "regionName": "us-east-1" } } ] }
利用可能になりましたので、create-instances-from-snapshot
でSnapshotからインスタンスを作成します。ここで、--bundle-id
に指定するスペックで、新しいインスタンスが起動します。今回は、元がNano (t2.nano) なので、Micro (t2.micro) を指定してみます。選択可能なスペックは、get-bundles
で取得できます。
$ aws lightsail --region us-east-1 create-instances-from-snapshot \ --instance-names "WordPress-2" \ --availability-zone "us-east-1a" \ --instance-snapshot-name "WordPress-1-snapshot" \ --bundle-id "micro_1_0" { "operations": [ { "status": "Started", "resourceType": "Instance", "isTerminal": false, "statusChangedAt": 1484778376.64, "location": { "availabilityZone": "us-east-1a", "regionName": "us-east-1" }, "operationType": "CreateInstance", "resourceName": "WordPress-2", "id": "8dac1f7d-bb20-4e8f-baad-06f0f57d757e", "createdAt": 1484778375.136 } ] }
インスタンスが起動できたか、再度get-instances
で確認してみます。
$ aws lightsail --region us-east-1 get-instances { "instances": [ { "username": "bitnami", "isStaticIp": false, "networking": { "monthlyTransfer": { "gbPerMonthAllocated": 1000 }, "ports": [ { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 80, "accessDirection": "inbound", "toPort": 80 }, { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 22, "accessDirection": "inbound", "toPort": 22 }, { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 443, "accessDirection": "inbound", "toPort": 443 } ] }, "name": "WordPress-1", "resourceType": "Instance", "supportCode": "015515485450/i-xxxxxxxxxxxxxxxxx", "blueprintName": "WordPress", "hardware": { "cpuCount": 1, "ramSizeInGb": 0.5 }, "privateIpAddress": "172.26.8.26", "state": { "code": 16, "name": "running" }, "arn": "arn:aws:lightsail:us-east-1:xxxxxxxxxxxx:Instance/b9e61e46-50ff-4fb5-bef6-8efc0ce5b8cf", "publicIpAddress": "52.206.xxx.xxx", "blueprintId": "wordpress_4_6_1", "bundleId": "nano_1_0", "sshKeyName": "LightsailDefaultKeyPair", "createdAt": 1484776375.816, "location": { "availabilityZone": "us-east-1a", "regionName": "us-east-1" } }, { "username": "bitnami", "isStaticIp": false, "networking": { "monthlyTransfer": { "gbPerMonthAllocated": 2000 }, "ports": [ { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 80, "accessDirection": "inbound", "toPort": 80 }, { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 22, "accessDirection": "inbound", "toPort": 22 }, { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 443, "accessDirection": "inbound", "toPort": 443 } ] }, "name": "WordPress-2", "resourceType": "Instance", "supportCode": "015515485450/i-xxxxxxxxxxxxxxxxx", "blueprintName": "WordPress", "hardware": { "cpuCount": 1, "ramSizeInGb": 1.0 }, "privateIpAddress": "172.26.9.209", "state": { "code": 16, "name": "running" }, "arn": "arn:aws:lightsail:us-east-1:xxxxxxxxxxxx:Instance/d61f5bf5-760b-43ac-b106-6548e97dc736", "publicIpAddress": "54.152.xxx.xxx", "blueprintId": "wordpress_4_6_1", "bundleId": "micro_1_0", "sshKeyName": "LightsailDefaultKeyPair", "createdAt": 1484778375.136, "location": { "availabilityZone": "us-east-1a", "regionName": "us-east-1" } } ] }
"name": "WordPress-2"
のインスタンスが起動しています。これで、スケールアップしたインスタンスができましたので、あとはDNSレコードやStatic IPを変更してアクセスを切替てあげましょう。
最後に、元のインスタンス"name": "WordPress-1"
をdelete-instance
で削除します。
$ aws lightsail --region us-east-1 delete-instance --instance-name "WordPress-1" { "operations": [ { "status": "Succeeded", "resourceType": "Instance", "isTerminal": true, "statusChangedAt": 1484778487.919, "location": { "availabilityZone": "us-east-1a", "regionName": "us-east-1" }, "operationType": "DeleteInstance", "resourceName": "WordPress-1", "id": "a83fd1c3-11e1-43e3-a605-5cb13a76f48a", "createdAt": 1484778487.919 } ] }
削除できたか確認します。
$ aws lightsail --region us-east-1 get-instances { "instances": [ { "username": "bitnami", "isStaticIp": false, "networking": { "monthlyTransfer": { "gbPerMonthAllocated": 2000 }, "ports": [ { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 80, "accessDirection": "inbound", "toPort": 80 }, { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 22, "accessDirection": "inbound", "toPort": 22 }, { "protocol": "tcp", "accessType": "public", "commonName": "", "accessFrom": "Anywhere (0.0.0.0/0)", "fromPort": 443, "accessDirection": "inbound", "toPort": 443 } ] }, "name": "WordPress-2", "resourceType": "Instance", "supportCode": "015515485450/i-xxxxxxxxxxxxxxxxx", "blueprintName": "WordPress", "hardware": { "cpuCount": 1, "ramSizeInGb": 1.0 }, "privateIpAddress": "172.26.9.209", "state": { "code": 16, "name": "running" }, "arn": "arn:aws:lightsail:us-east-1:xxxxxxxxxxxx:Instance/d61f5bf5-760b-43ac-b106-6548e97dc736", "publicIpAddress": "54.152.xxx.xxx", "blueprintId": "wordpress_4_6_1", "bundleId": "micro_1_0", "sshKeyName": "LightsailDefaultKeyPair", "createdAt": 1484778375.136, "location": { "availabilityZone": "us-east-1a", "regionName": "us-east-1" } } ] }
元のインスタンス"name": "WordPress-1"
がなくなり、"name": "WordPress-2"
となりました。
これで Lightsailインスタンスのスケールアップは完了です!
まとめ
いかがでしょうか。
EC2と違い、LightsailではスケールアップするためにもSnapshot取得/インスタンスの再作成が必要でした。また、その操作はコンソールからはできず、AWS CLI が必要です。
また、今回CLIでLightsailを操作してみましたが、EC2に比べて設定項目も少なく、コンソールと同様に非常にシンプルだと感じました。
やはり、Lightsailの最大の魅力はそのシンプルさにあると再確認しました。