※2017/07/16追記:こちらの記事は内容をアップデートして会社の技術ブログに転載しました。今後は以下のURLを参照してください。
https://blog.interstellar.co.jp/2017/07/gcp-disk-image/
ここ最近Amazon Web Service(AWS)とGoogle Cloud Platform(GCP)を行ったり来たりしております。
もうちょっとだけ手順を簡略化した方法があったので、以下に新しく改訂版として書きなおしました。
[GCP] Google Cloud Platformでディスクイメージを他のプロジェクトに移す方法(改訂版)
https://blog.interstellar.co.jp/2017/07/gcp-disk-image/
ここ最近Amazon Web Service(AWS)とGoogle Cloud Platform(GCP)を行ったり来たりしております。
GCPは後発というのもあって、AWSより使い勝手が改善されてるところがあります。
機能面ではAWSがかなり先行してしまってますが、Googleも負けじと新規開発したり技術持ってるところを買収したりでかなり攻めてますね。
さて、GCPではAWSと違って、プロジェクトという単位でリソースを管理していて、そのプロジェクトのオーナーや権限を付与されたGoogleアカウントからいろんな操作を行います。
あるプロジェクト内で作成したディスクイメージもそのプロジェクトに紐付いた形になるんですが、これを他にコピーしたいということがあったのでその方法のメモ。
ただ、もっと直接的にやれる方法ないのかなーと思ってます。ドキュメントを見る限りこれしかなさそうなんですが、Googleのサポートに問い合わせてみるかなぁ…。
2015.09.20追記
[GCP] Google Cloud Platformでディスクイメージを他のプロジェクトに移す方法(改訂版)
方法1:コピー元のイメージを参照して新しいインスタンスを作成する方法
説明の便宜上、コピー元のプロジェクトをmaster-disk-prj、コピー先のプロジェクトをcopy-disk-prjとしておきます。
まず、使用するGoogleアカウントにmaster-disk-prj、copy-disk-prj両方の編集可能以上の権限を付与しておきます。
作業は基本的にコピー先のcopy-disk-prjで行うので、いちいちコマンドオプションを指定するのも面倒なのでまずはプロジェクトを設定しておきます。
$ gcloud config set project copy-disk-prj
ついでにゾーンも設定しておきましょう。
$ gcloud config set compute/zone asia-east1-a
準備ができたところで本題です。
まずは、コピー先のプロジェクトで新しいインスタンスをコピー元のディスクイメージを指定して作成します。
単純にコピー元のイメージを使用したインスタンスを立てたいだけならこれで終わりなんですが、これをコピー先の方にイメージとして保存するにはもう一手間必要です。
せっかく作成したインスタンスですが、削除します。この削除の際にディスクだけ残すようにします。
とりあえず今のところこれが一番簡単そうな気がしますが、もし直接イメージをコピーする方法があったら教えて下さい。
時間がかかる上、とってもめんどくさいのであえてやる人はいないと思いますが …。
本来GCP以外にイメージを持ち出したり、逆に外部からイメージをインポートするための方法を利用します。
参考になるドキュメントは以下の2つ。
まずは、コピー先のプロジェクトで新しいインスタンスをコピー元のディスクイメージを指定して作成します。
$ gcloud compute instances create instance-tmp --machine-type f1-micro --image master-disk-image --image-project master-disk-prj
これでコピー元のイメージを使用して、コピー先で新しいインスタンスが起動します。単純にコピー元のイメージを使用したインスタンスを立てたいだけならこれで終わりなんですが、これをコピー先の方にイメージとして保存するにはもう一手間必要です。
せっかく作成したインスタンスですが、削除します。この削除の際にディスクだけ残すようにします。
$ gcloud compute instances delete instance-tmp --keep-disks boot
ディスクが残っているか念のため確認します。
$ gcloud compute disks list
NAME ZONE SIZE_GB TYPE STATUS
instance-tmp asia-east1-a 10 pd-standard READY
この残っているディスクを使用して、以下のコマンドでイメージを作成します。
$ gcloud compute images create copy-image --source-disk instance-tmp
以上でコピーは終わりです。とりあえず今のところこれが一番簡単そうな気がしますが、もし直接イメージをコピーする方法があったら教えて下さい。
方法2:Google Cloud Storage(GCS)を中継してコピーする方法
最初良くわからなくて試した方法がこれです。時間がかかる上、とってもめんどくさいのであえてやる人はいないと思いますが …。
本来GCP以外にイメージを持ち出したり、逆に外部からイメージをインポートするための方法を利用します。
参考になるドキュメントは以下の2つ。
- Export an image to Google Cloud Storage
https://cloud.google.com/compute/docs/images#export_an_image_to_google_cloud_storage - Import a RAW image
https://cloud.google.com/compute/docs/images#use_saved_image
詳しくは上記ドキュメントを参考に頑張ってみてください。
もし万が一リクエストがあるようなら改めてやり方をアップします。
コメント
コメントを投稿