【GCP】ディスクイメージを他のプロジェクトに移す方法

インターステラの阿形です。

GCPではプロジェクトという単位でリソースを管理しており、そのプロジェクトのオーナーや権限を付与されたGoogleアカウントからいろんな操作を行います。
あるプロジェクト内で作成したディスクイメージもそのプロジェクトに紐付いた形になるんですが、これを他にコピーしたいということがあり、どうやるのか試行錯誤したときのメモです。

方法1:コピー元のイメージを参照して新しいインスタンスを作成する方法

以下のステップで行います。
  1. 前準備
  2. コピー元のディスクイメージを使ってコピー先でディスクを作成
  3. 作成したディスクでイメージを作成
GCPにある程度慣れている人ならこれだけでやり方分かってしまうかもしれませんが、詳細な手順を以下で説明します。

1.前準備

説明の便宜上、プロジェクト、イメージを以下のように仮定します。
  • コピー元のプロジェクト:master-image-prj
  • コピー先のプロジェクト:copy-image-prj
  • コピー元のイメージ:master-image
  • コピー先のイメージ:copy-image
まず、使用するGoogleアカウントにmaster-image-prj、copy-image-prj両方の編集可能以上の権限を付与しておきます。
作業は基本的にコピー先のcopy-image-prjで行います。
いちいちコマンドオプションを指定するのも面倒なのでまずはプロジェクトを設定しておきます。
$ gcloud config set project copy-image-prj
ついでにゾーンも設定しておきましょう。
$ gcloud config set compute/zone asia-northeast1-a

2. コピー元のディスクイメージを使ってコピー先でディスクを作成

前準備ができたところで本題です。
まずは、コピー先のプロジェクトで新しいディスクをコピー元のディスクイメージを指定して作成します。ここでは作成するディスクはcopy-diskとします。
$ gcloud compute disks create copy-disk --image master-image --image-project master-image-prj
これでコピー元のイメージを使用して、コピー先で新しいディスクを作成できます。
単純にコピー元のイメージを使用してインスタンスを立てたいだけならこれで終わりなんですが、これをコピー先の方にイメージとして保存するにはもう一手間必要です。

3.作成したディスクでイメージを作成

作成したディスクを使用して、以下のコマンドでイメージを作成します。
$ gcloud compute images create copy-image --source-disk copy-disk
以上でコピーは終わりです。
不要なら作成したcopy-diskを削除しておきましょう。

方法2:Google Cloud Storage(GCS)を経由してコピーする方法

最初良くわからなくて試した方法がこれです。が、面倒すぎて途中で挫折しました。
本来GCP以外にイメージを持ち出したり、逆に外部からイメージをインポートするための方法を利用します。
参考になるドキュメントは以下の2つ。
時間がかかる上、とってもめんどくさいのであえてやる人はいないと思いますが、詳しくは上記ドキュメントを参考に頑張ってみてください。
もし万が一リクエストがあるようなら改めてやり方をアップします。

まとめ

いろいろ調べたんですが、どうもイメージを直接コピーする方法はないようです。
gcloudコマンドも頻繁にバージョンアップしていますので、そのうちそういうコマンドも実装されるかもしれませんが、今のところは上記のようなやり方でやるしかなさそうです。

このブログの人気の投稿

【AWS】IAMFullAccessを付与せずIAM Roleの作成とアタッチを行う方法

【AWS】EBSボリューム自動取得/削除 を Lambda で実行 (世代管理も)

【GCP】Compute EngineでVPNサーバーを立てるときの注意点