Google Cloud Storage へのデータのバックアップ

このページでは、Cloud Tools for PowerShell を使用してローカルマシンから Cloud Storage にデータをバックアップする方法について説明します。Cloud Tools for PowerShell で Cloud Storage リソースにアクセスするには、他のほとんどのリソースとは違って 2 つの方法があります。1 つはコマンドレット、もう 1 つは PowerShell プロバイダです。

プロバイダを使用すると、Cloud Storage のバケットやオブジェクトに、使い慣れたファイル システムのコマンドを使用してファイル システムのようにアクセスできます。ただし、プロバイダにはいくつかの制約があります。まず、すべての有効なオブジェクト名が有効なプロバイダパスに変換されるわけではありません。また、プロバイダを使用して ACL を管理することはできません。これらの高度なケースに対してはコマンドレットを使用できます。Cloud Storage コマンドレットの詳細については、Cloud Tools for PowerShell コマンドレット リファレンスをご覧ください。

データのアップロード

Cloud Storage のデータはバケットに整理されます。新しいバケットを作成する手順は次のとおりです。

コマンドレット

新しいバケットを作成するには New-GcsBucket コマンドレットを使用します。

$bucket = "my-gcs-bucket"
New-GcsBucket $bucket

プロバイダ

バケットは、gs:\ ドライブのルートにあるフォルダです。そのレベルに新しいアイテムを作成すると、新しいバケットが作成されます。

cd gs:\
$bucket = "my-gcs-bucket"
mkdir $bucket

バケットへのファイルのアップロード

1 つのファイルまたはディレクトリ全体をバケットにアップロードできます。

コマンドレット

New-GcsObject を使用します。宛先バケットとオブジェクト名をパラメータとして指定します。新しいストレージ オブジェクトのコンテンツがどこから取得されるかは、使用するパラメータ セットによって異なります。

-File パラメータを使用し、ファイルパスを指定して、Cloud Storage にローカル ファイルのコンテンツをアップロードできます。あるいは、PowerShell パイプライン経由で文字列としてオブジェクトのコンテンツを渡すか、-Value パラメータを使用します。

ローカル ディスクのディレクトリ全体を Cloud Storage にアップロードするには、-Folder パラメータを使用してフォルダパスを指定します。フォルダが Cloud Storage バケットのルートに直接アップロードされないようにするには、-ObjectNamePrefix を使用して、アップロードするすべてのオブジェクトの接頭辞を指定します。

# Upload the folder LogFiles and its content to the root of the widget bucket.
New-GcsObject -Bucket "widget" -Folder "C:\inetpub\logs\LogFiles"

# Upload the folder LogFiles and its content to directory Test in the widget bucket.
New-GcsObject -Bucket "widget" -Folder "C:\inetpub\logs\LogFiles" -ObjectNamePrefix "Test"

プロバイダ

New-Item を使用します。作成するアイテムのパスを指定する必要があります。絶対パスでも相対パスでもかまいません。新しい Cloud Storage オブジェクトのコンテンツは、-Value パラメータで文字列として指定することも、-File パラメータでファイルパスとして指定することもできます。

New-Item gs:\my-gcs-bucket\new-object -File $file

次のスニペットによって、ローカル ディスクのディレクトリ全体を Cloud Storage にアップロードします。

cd $folder
$files = Get-ChildItem -Recurse
$data = @()
foreach ($file in $files) {
      $objectPath = $file | Resolve-Path -Relative
      $data += @{file = $file; objectPath = $objectPath}
}
cd gs:\my-gcs-bucket
foreach($element in $data) {
      Write-Host "`t${$element.objectPath}"
      New-Item $element.objectPath -File $element.file
}

データの検索

データは、コマンドレットを使用して検索することも、プロバイダを使用して一般的なファイル検索コマンドレットで検索することもできます。

コマンドレット

Get-GcsObject を使用してバケットのオブジェクト全体を検索できます。これは Out-GridView コマンドレットと組み合わせてデータを表示するときに有効です。

Get-GcsObject $bucket | Select Name, Size | Out-GridView

プロバイダ

Get-ChildItem またはそのいずれかのエイリアス(dirlsgci)を使用できます。-Recurse パラメータを使用すると、すべての論理フォルダの中を検索できます。

cd gs:\my-gcs-bucket
ls -Recurse

データの読み取り

プロバイダを使用してデータを読み取る場合は、標準の Get-Content コマンドレットを使用します。プロバイダを使用しない場合は、Read-GcsObject コマンドレットを使用します。

コマンドレット

Cloud Storage オブジェクトのコンテンツを読み取るには Read-GcsObject コマンドレットを使用します。デフォルトでは、このコマンドレットはオブジェクトのコンテンツを文字列として読み取り、コンテンツを PowerShell パイプラインに書き込みます。-OutFile パラメータを指定すると、オブジェクトのコンテンツをローカル ディスクにダウンロードできます。

Read-GcsObject $bucket "timestamp.txt" | Write-Host
Read-GcsObject $bucket "logo.png" `
    -OutFile "$Env:UserProfile\pictures\logo.png"

プロバイダ

Cloud Storage オブジェクトのコンテンツを読み取るには、Get-Content コマンドレットまたはそのいずれかのエイリアス(catgctype)を使用します。

cd gs:\my-gcs-bucket
cat my-object-name

データの削除

プロバイダを使用してデータを削除する場合は、標準の Remove-Item コマンドレットを使用します。プロバイダを使用しない場合は、Remove-GcsObject コマンドレットを使用します。

コマンドレット

Cloud Storage 内のデータをすべて削除するには、次のように Remove-GcsObject コマンドレットを使用します。

Get-GcsObject $bucket | Remove-GcsObject

プロバイダ

Cloud Storage のデータを削除するには、Remove-Item コマンドレットまたはそのいずれかのエイリアス(delrmerase)を使用します。

cd gs:\my-gcs-bucket
rm my-object-name