自由帳

とりとめのない学習メモです。主に Web サービスのシステム基盤や運用に関することを書いています

Amazon Lightsailの新プランで料金改定(値下げ)が発表されたので既存インスタンスを移行した

AWSVPSサービスであるAmazon Lightsailの新プラン/料金改定(値下げ)が発表された。

今はLightsailの1Gメモリプランのものを使っていたが、それも$10->$5へ値下げされたにも関わらずSSDのサイズが30G->40Gへと上がっていた。 これは移行したほうが良いのではないかと思い、1Gプラン→新1Gプランへと移行してみた。

移行手順

LightsailはEC2のように簡単にスペック変更できず、スナップショットから新しいインスタンスを作成する必要があるとのこと。

  • よくある質問
  • プランをアップグレードできますか?
    はい。インスタンスのスナップショットを作成し、API を使用して新しい大きなサイズのインスタンスを作成します。Lightsail コンソールまたは CLI を使用して、スナップショットから新しいインスタンスを作成できます。CLI の使用方法については、こちらを参照してください。
    

ということで、以下の手順にて新インスタンスへの移行を行う。

  1. 今のインスタンスのスナップショット取得
  2. 取得したスナップショットから新インスタンスを作成

事前

AWS CLIを利用できるようにしておく。 Amazon Linux AMI ならデフォルトで利用可能かと思われる。

それ以外のOSの場合はドキュメントを参照されたし。

今のインスタンスのスナップショット取得

今のLightsailのインスタンス情報を取得する。 以下のような結果が得られる。

$ aws lightsail get-instances
{
    "instances": [
        {
            "username": "ec2-user",
            "isStaticIp": true,
            "networking": {
                "monthlyTransfer": {
                    "gbPerMonthAllocated": 2048
                },
                "ports": [
                    {
                        "protocol": "tcp",
                        "accessType": "public",
                        "commonName": "",
                        "accessFrom": "Anywhere (0.0.0.0/0)",
                        "fromPort": 80,
                        "accessDirection": "inbound",
                        "toPort": 80
                    },
                     :
                     :
                    }
                ]
            },
            "name": "Amazon_Linux-1GB-Tokyo-1",
            "resourceType": "Instance",
            "supportCode": "************/i-*****************",
            "blueprintName": "Amazon Linux",
            "hardware": {
                "cpuCount": 1,
                "disks": [
                    {
                        "attachmentState": "attached",
                        "attachedTo": "Amazon_Linux-1GB-Tokyo-1",
                        "iops": 100,
                        "sizeInGb": 30,
                        "path": "/dev/xvda",
                        "isSystemDisk": true,
                        "createdAt": **********.***
                    }
                ],
                "ramSizeInGb": 1.0
            },
            "privateIpAddress": "***.***.***.***",
            "state": {
                "code": 16,
                "name": "running"
            },
            "arn": "arn:aws:lightsail:ap-northeast-1:************:Instance/********-****-****-****-************",
            "publicIpAddress": "***.***.***.***",
            "blueprintId": "amazon_linux_2017_03_0",
            "bundleId": "micro_1_0",
            "sshKeyName": "keypair01",
            "createdAt": **********.***,
            "location": {
                "availabilityZone": "ap-northeast-1a",
                "regionName": "ap-northeast-1"
            }
        }
    ]
}

この情報をもとにスナップショットを取得する。

$ aws lightsail create-instance-snapshot \
  --region ap-northeast-1 \
  --instance-snapshot-name "Amazon_Linux-1GB-Tokyo-1-snapshot-2018090101" \
  --instance-name "Amazon_Linux-1GB-Tokyo-1"

スナップショットの結果を確認する。

$ aws lightsail get-instance-snapshots
{
    "instanceSnapshots": [
        {
            "fromInstanceName": "Amazon_Linux-1GB-Tokyo-1",
            "fromAttachedDisks": [],
            "name": "Amazon_Linux-1GB-Tokyo-1-snapshot-2018090101",
            "sizeInGb": 30,
            "resourceType": "InstanceSnapshot",
            "supportCode": "************/ami-*****************",
            "fromInstanceArn": "arn:aws:lightsail:ap-northeast-1:************:Instance/********-****-****-****-************",
            "state": "pending",
            "arn": "arn:aws:lightsail:ap-northeast-1:************:InstanceSnapshot/********-****-****-****-************",
            "fromBundleId": "micro_1_0",
            "fromBlueprintId": "amazon_linux_2017_03_0",
            "createdAt": **********.***,
            "location": {
                "availabilityZone": "all",
                "regionName": "ap-northeast-1"
            }
        }
    ]
}

"state": "pending" となっているところを "state": "available" となるまで待つ。

$ aws lightsail get-instance-snapshots
{
    "instanceSnapshots": [
        {
            "fromInstanceName": "Amazon_Linux-1GB-Tokyo-1",
            "fromAttachedDisks": [],
            "name": "Amazon_Linux-1GB-Tokyo-1-snapshot-2018090101",
            "sizeInGb": 30,
            "resourceType": "InstanceSnapshot",
            "supportCode": "************/ami-*****************",
            "fromInstanceArn": "arn:aws:lightsail:ap-northeast-1:************:Instance/********-****-****-****-************",
            "state": "available",
            "arn": "arn:aws:lightsail:ap-northeast-1:************:InstanceSnapshot/********-****-****-****-************",
            "fromBundleId": "micro_1_0",
            "fromBlueprintId": "amazon_linux_2017_03_0",
            "createdAt": **********.***,
            "location": {
                "availabilityZone": "all",
                "regionName": "ap-northeast-1"
            }
        }
    ]
}

これでスナップショットの取得は完了。

取得したスナップショットから新インスタンスを作成

スケールアップさせたいスペックを確認するため、以下を実行する。 利用できるインスタンスの情報が出力されるので、利用したいスペックのbundleIdをメモしておく。 ここでは現行と同様(ただし "diskSizeInGb": 40, となっている)メモリ1Gのものを使いたいので"bundleId": "micro_2_0"となる。

$ aws lightsail get-bundles
{
    "bundles": [
        {
            "name": "Nano",
            "power": 300,
            "price": 3.5,
            "ramSizeInGb": 0.5,
            "diskSizeInGb": 20,
            "transferPerMonthInGb": 1024,
            "cpuCount": 1,
            "instanceType": "nano",
            "isActive": true,
            "bundleId": "nano_2_0"
        },
        {
            "name": "Micro",
            "power": 500,
            "price": 5.0,
            "ramSizeInGb": 1.0,
            "diskSizeInGb": 40,
            "transferPerMonthInGb": 2048,
            "cpuCount": 1,
            "instanceType": "micro",
            "isActive": true,
            "bundleId": "micro_2_0"
        },
         :
         :
         :
        {
            "name": "Xlarge",
            "power": 4000,
            "price": 120.0,
            "ramSizeInGb": 16.0,
            "diskSizeInGb": 320,
            "transferPerMonthInGb": 6144,
            "cpuCount": 4,
            "instanceType": "xlarge",
            "isActive": true,
            "bundleId": "xlarge_win_2_0"
        },
        {
            "name": "2Xlarge",
            "power": 5000,
            "price": 240.0,
            "ramSizeInGb": 32.0,
            "diskSizeInGb": 640,
            "transferPerMonthInGb": 7168,
            "cpuCount": 8,
            "instanceType": "2xlarge",
            "isActive": true,
            "bundleId": "2xlarge_win_2_0"
        }
    ]
}

AWS Cliツールでaws lightsail create-instances-from-snapshotを実行する。 必要な引数は環境に合わせて調整する。

$ aws lightsail create-instances-from-snapshot \
  --instance-names "Amazon_Linux-1GB-Tokyo-1-2018090101" \
  --availability-zone "ap-northeast-1a" \
  --instance-snapshot-name "Amazon_Linux-1GB-Tokyo-1-snapshot-2018090101" \
  --key-pair-name "lightsail-key-pair" \
  --bundle-id "micro_2_0"
{
    "operations": [
        {
            "status": "Started",
            "resourceType": "Instance",
            "isTerminal": false,
            "statusChangedAt": **********.***,
            "location": {
                "availabilityZone": "ap-northeast-1a",
                "regionName": "ap-northeast-1"
            },
            "operationType": "CreateInstancesFromSnapshot",
            "resourceName": "Amazon_Linux-1GB-Tokyo-1-2018090101",
            "id": "********-****-****-****-************",
            "createdAt": **********.***
        }
    ]
}

これでしばらく待てば、新しいインスタンスが起動して利用可能になる。 ネットワーク回りの設定は引き継がれないので、Lightsailのファイアウォールとか静的IPの設定は別途行う必要がある。

まとめ

Amazon Lightsailのプラン変更(スペックアップ)試した。 現時点では、現行インスタンスのスナップショットを取得して、それを用いて新しいインスタンスを作成するしかない。

参考