Google Cloud Storage へのカスタム イメージのエクスポート

Compute Engine ブートディスクのデータを Compute Engine プロジェクトの外部に移動する必要がある場合は、ブートディスク イメージを tar.gz ファイルとして Cloud Storage にエクスポートできます。Compute Engine で新しい永続ディスクを作成するときに使用する永続ディスク イメージを作成する必要がある場合は、カスタム イメージを作成するをご覧ください。

カスタム イメージは、イメージを Cloud Storage にエクスポートすることで、バックアップとして、または共有用にエクスポートできます。この方法は、イメージにアクセスできない他のプロジェクトと個別のイメージを共有するのに理想的です。また、イメージまたはイメージを含むプロジェクトについて Compute Engine イメージ ユーザー役割を付与することで、イメージを共有することもできます。

次の図は、カスタム イメージの作成と再利用の一般的なワークフローを示しています。

カスタム イメージの作成と再利用の例
図 1: カスタム イメージの作成と再利用の例

始める前に

1 つのコマンドでのイメージのエクスポート

イメージを Cloud Storage にエクスポートするには、gcloud compute images export コマンドを使用することをおすすめします。このコマンドでは、Daisy を使用して、イメージをエクスポートするために必要な複数のステップが連結されています。前提として、たとえば gcloud compute images create コマンドを使用して、すでにイメージを作成している必要があります。

gcloud コマンドライン ツールを使用して、次を実行します。

gcloud compute images export --destination-uri [DESTINATION_URI] \
    --image [IMAGE]

ここで:

  • [DESTINATION_URI] は、エクスポートされる仮想ディスク ファイルの Cloud Storage URI 宛先です。
  • [IMAGE] は、エクスポートするディスク イメージの名前です。

たとえば、次のコマンドでは、my-image という名前のイメージが my-project から my-bucket という名前の Cloud Storage バケットにエクスポートされます。デフォルトでは、イメージは disk.raw ファイルとしてエクスポートされ、tar.gz ファイル形式に圧縮されます。

gcloud compute images export --destination-uri gs://my-bucket/my-image.tar.gz \
    --image my-image --project my-project

使用可能なフラグの一覧については、gcloud compute images export リファレンス ドキュメントをご覧ください。

手動でのイメージの作成およびエクスポート

gcloud compute images create および gcloud compute images export コマンドでは要件が満たされない場合は、手動でイメージを作成して Compute Engine インスタンスからエクスポートできます。この処理は、最初にイメージを作成し、次にイメージをエクスポートする別々のステップです。

次の例では、作成されるディスクの名前は image-disk です。

イメージを作成およびエクスポートするには:

  1. 必要に応じて、スナップショットを作成する前に、ディスクが接続されているインスタンスを停止します。インスタンスを停止すると、スナップショット内のディスク コンテンツの整合性が確保されます。

  2. ディスクのスナップショットを作成します。スナップショットに image-snapshot という名前を付けます。

    gcloud compute disks snapshot [DISK_NAME] --snapshot-names image-snapshot
    

    ここで、[DISK_NAME] はスナップショットの作成元のディスクの名前です。

  3. image-snapshot スナップショットを使用して image-disk という名前の新しいディスクを作成するには、次のコマンドを実行します。

    gcloud compute disks create image-disk --source-snapshot image-snapshot
    
  4. tar ファイルを保持する temporary-disk という名前の一時ディスクを作成し、ディスクの [SIZE] をイメージ ディスクより 50% 以上大きく指定します。

    後でディスクを接続解除および削除できます。

    gcloud compute disks create temporary-disk --size [SIZE]
    

    [SIZE] は、一時ディスクのサイズ(GB や TB 単位)です。たとえば、100 GB のディスクを作成するには 100GB を指定します。

  5. 新規インスタンスを作成し、インスタンスで storage-rw スコープを有効にします。また、image-disktemporary-disk を、特定の device-name 属性を持つ 2 番目のディスクとしてインスタンスに接続します。

    gcloud compute instances create [INSTANCE_NAME] --scopes storage-rw \
        --disk name=image-disk,device-name=image-disk \
        --disk name=temporary-disk,device-name=temporary-disk
    

    ここで、[INSTANCE_NAME] は作成するインスタンスの名前です。

    後の手順で Google Cloud Storage にファイルをアップロードできるように、サービス アカウント スコープを渡していることに注意してください。

    必要に応じて、新規インスタンスの起動の詳細を確認します。

  6. インスタンスに接続します

    gcloud compute ssh [INSTANCE_NAME]
    

    ここで、[INSTANCE_NAME] は接続先のインスタンスです。

  7. 一時ディスクをフォーマットし、マウントします。ディスクをフォーマットすると、一時ディスクのコンテンツが削除されます。

    sudo mkdir /mnt/tmp
    
    sudo mkfs.ext4 -F /dev/disk/by-id/google-temporary-disk
    
    sudo mount -o discard,defaults /dev/disk/by-id/google-temporary-disk /mnt/tmp
    
  8. 必要に応じて、イメージ ディスクをマウントし、tar ファイルを作成する前に追加の変更を加えることができます。たとえば、既存のファイルをイメージの一部としない場合は、それらのファイルを /home ディレクトリから削除します。変更する必要のあるディスク パーティションをマウントし、変更する必要のあるディスク上のファイルを変更し、完了したらディスクをマウント解除します。

    1. ディスクまたはパーティションをマウントできるディレクトリを作成します。

      sudo mkdir /mnt/image-disk
      
    2. ls コマンドを使用して、マウントする必要のあるディスクまたはディスク パーティションを判別します。

      ls /dev/disk/by-id/
      

      コマンドでは、ディスク ID とパーティションのリストが出力されます。たとえば、次のディスクには 1 つのパーティションがあるパーティション テーブルがあります。google-image-disk ID は、イメージの作成元の完全なディスクを指します。google-image-disk-part1 ID は、このディスク上の最初のパーティションを指します。ディスクに変更を加える必要がある場合はパーティションをマウントし、完全なディスクからイメージを作成します。

      google-image-disk
      google-image-disk-part1
      
    3. ディスクまたはパーティションをマウントします。ディスクにパーティション テーブルがある場合は、ディスクの個々のパーティションをマウントします。たとえば、google-image-disk-part1 をマウントします。

      sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk
      

      または、ディスクが未加工形式でパーティション テーブルがない場合は、完全な google-image-disk ディスクをマウントします。

      sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
      
    4. /mnt/image-disk ディレクトリ内のファイルを変更し、ディスク上のファイルを構成します。たとえば、/mnt/image-disk/home/[USER]/.ssh/authorized_keys ファイルを削除して、SSH 認証鍵が共有されないよう保護できます。

    5. ファイルの変更後に、ディスクをマウント解除します。

      sudo umount /mnt/image-disk/
      
  9. イメージの tar ファイルを作成します。

    イメージ ディスク上のファイルのカスタマイズが完了したら、一時ディスクに未加工ディスク ファイルを作成します。未加工ディスク イメージの名前は「disk.raw」である必要があります。

    sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096
    

    次に、このファイルに対して tar および gzip を実行します。

    cd /mnt/tmp
    
    sudo tar czvf myimage.tar.gz disk.raw
    

    このコマンドにより、次の場所にインスタンスのイメージが作成されます。

    /mnt/tmp/myimage.tar.gz
    
  10. イメージを Google Cloud Storage にアップロードします。

    tar ファイルを Google Cloud Storage にアップロードするには、インスタンスにプリインストールされている gsutil コマンドライン ツールを使用します。

    1. gsutil を使用してバケットを作成します。

      バケットを作成する前に、バケットと命名のガイドラインを確認します。確認したら、次のコマンドを使用してバケットを作成します。

      me@example-instance:~$ gsutil mb gs://[BUCKET_NAME]

      ここで、[BUCKET_NAME] は作成するバケットの名前です。

    2. ファイルを新しいバケットにコピーします。

      me@example-instance:~$ gsutil cp /mnt/tmp/myimage.tar.gz gs://[BUCKET_NAME]

      ここで、[BUCKET_NAME] はファイルをコピーするバケットです。

これで、ファイルが Google Cloud Storage にエクスポートされました。イメージを他の人と共有したり、tar ファイルを使用して Google Cloud Platform Console プロジェクトに新規イメージを追加したりできます。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント