web-dev-qa-db-ja.com

Google Compute Engine-インスタンスのクローン

さまざまなアプリケーションをカスタマイズしてアップロードしたGCEインスタンスがあります(PHP Apacheで実行されているアプリなど)。このインスタンスを複製したいと思います。つまり、その上にあるすべてのものです。最初はクローンだと思っていました。これを行うかもしれませんが、私はそれをいじってみました、それはインスタンス構成を複製するだけで、カスタマイズされたものは何もないようです。

私はそれをグーグルしました、そして私がする必要があるのはイメージを作成して新しいインスタンスまたはクローンでこのイメージを使用することのように見えますか?あれは正しいですか?もしそうなら、これを行うための段階的なステップはありますか?私は画像のGoogleページを見て、これを行うにはインスタンスを終了する必要があると説明しています。私はこれに少し警戒しています。多分それはドキュメントで使用されている言語だけかもしれませんが、私は私の既存のインスタンスを失いたくありません。

また、すべてが画像に保存されますか?それで、例えば、以下はすべてそれをイメージに入れますか?

  • MySQL-構成とデータベースのスキーマとデータ?
  • Apache-/var/www/htmlにインストールされているすべてのアプリ
  • PHP-php.iniなど...
  • 他のすべてのサーバー構成/変更?
22
fatlog

ソースインスタンスの snapshot を作成してから、ソーススナップショットをディスクとして選択して新しいインスタンスを作成できます。サーバーを非常に高速に複製します。他の接続されたディスクについては、新しいディスクを作成し、ネット(scp、rsyncなど)でファイルをコピーする必要があります。

32
Marco

Webコンソールで、スナップショットを作成してから、スナップショットをクリックしてCREATE INSTANCEボタンをクリックすると、設定をカスタマイズして、表示されている場所をクリックできます。

同等のRESTまたはコマンドライン

コマンドラインをコピーすると、これがテンプレートになります。

これから、BASHスクリプト(clone_instance.sh)を作成できます。私は次のようにしました。

#!/bin/bash -e

snapshot="my-snapshot-name"
gcloud_account="[email protected]"

#clone 10 machines
for machine in 01 02 03 04 05 06 07 08 09 10
do 

    gcloud compute --project "myProject" disks create "instance-${machine}" \
        --size "220" --zone "us-east1-d" --source-snapshot "${snapshot}" \
        --type "pd-standard"

    gcloud compute --project "bizqualify" instances create "webscrape-${machine}" \
        --zone "us-east1-d" --machine-type "n1-highmem-4" --network "default" \
        --maintenance-policy "MIGRATE" \
        --service-account "[email protected]" \
        --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \
        --tags "http-server","https-server" \
        --disk "name=webscrape-${machine},device-name=webscrape-${machine},mode=rw,boot=yes,auto-delete=yes"

done

これで、ターミナルでスクリプトを実行できます

sh clone_instance.sh
3

他のディスクが接続されている場合、実際にそれらをアンマウントしないで最善の方法は、それらが/ etc/fstabにマウントされる方法のパスを変更することです。

FstabでUUIDを使用し、スナップショットから同じディスク(同じUUIDを持つ)を使用すると、何もマウント解除せずにクローンを作成できます。

次のようにfstabの各ディスクを変更してUUIDを使用するだけです

UUID=[UUID_VALUE] [MNT_DIR] ext4 discard,defaults,[NOFAIL] 0 2

あなたはUUIDを得ることができます

Sudo blkid /dev/[DEVICE_ID]

dEVICE_IDがわからない場合に使用できます

Sudo lsblk

システムで使用されるデバイスIDのリストを取得します。

1
Trak

前述のように、ソースインスタンスにセカンダリディスクが接続されている場合、新しいインスタンスにSSH接続することはできません。本番インスタンスのスナップショットを撮る必要があったため、混乱を引き起こさずにセカンダリディスクをマウント解除することはできませんでした。スナップショットからディスクを作成し、ディスクを別のインスタンスにマウントし、セカンダリディスクへの参照をすべて削除する、つまり/ etc/fstabからエントリを削除することで、問題を解決できました。これを実行したら、そのディスクを新しいインスタンスのブートディスクとして使用し、sshを実行することができました。

0
Joe

GCP Import VMオプションを使用して、このマシンをプロジェクトにインポートして戻すことができます。

0
SurDin