Javaを使用したGoogleCloudStorageの概要
1. 概要
Google Cloud Storage は、場所、アクセスの頻度、コストに基づいて、個々のアプリケーションのニーズに合わせて調整されたオンラインストレージを提供します。 アマゾンウェブサービスとは異なり、Google Cloud Storageは、高、中、低頻度のアクセスに単一のAPIを使用します。
ほとんどのクラウドプラットフォームと同様に、Googleは無料のアクセス枠を提供しています。 価格の詳細はこちらです。
このチュートリアルでは、ストレージに接続し、バケットを作成し、データの書き込み、読み取り、更新を行います。 APIを使用してデータの読み取りと書き込みを行う一方で、gsutilクラウドストレージユーティリティも使用します。
2. GoogleCloudStorageのセットアップ
2.1. Mavenの依存関係
pom.xmlに単一の依存関係を追加する必要があります。
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.17.0</version>
</dependency>
Maven Centralには、最新バージョンのライブラリがあります。
2.2. 認証キーを作成する
Google Cloudに接続する前に、認証を設定する必要があります。 Google Cloud Platform(GCP)アプリケーションは、JSON構成ファイルから秘密鍵と構成情報を読み込みます。 このファイルはGCPコンソールを介して生成されます。 コンソールにアクセスするには、有効なGoogleCloudPlatformアカウントが必要です。
次の方法で構成を作成します。
- Google Cloud PlatformConsoleに移動します
- GCPプロジェクトをまだ定義していない場合は、 create ボタンをクリックして、「baeldung-cloud-tutorial」などのプロジェクト名を入力します。
- ドロップダウンリストから[新しいサービスアカウント]を選択します
- アカウント名フィールドに「baeldung-cloud-storage」などの名前を追加します。
- 「role」で「プロジェクト」を選択し、サブメニューで「所有者」を選択します。
- [作成]を選択すると、コンソールが秘密鍵ファイルをダウンロードします。
手順6の役割は、アカウントがプロジェクトリソースにアクセスすることを許可します。 簡単にするために、このアカウントにすべてのプロジェクトリソースへの完全なアクセスを許可しました。
実稼働環境では、アプリケーションが必要とするアクセスに対応する役割を定義します。
2.3. 認証キーをインストールします
次に、GCPコンソールからダウンロードしたファイルを便利な場所にコピーし、GOOGLE_APPLICATION_CREDENTIALS環境変数をその場所にポイントします。 これは、クレデンシャルをロードする最も簡単な方法ですが、以下で別の可能性を検討します。
LinuxまたはMacの場合:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/file"
Windowsの場合:
set GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\file"
2.4. クラウドツールをインストールする
Googleは、クラウドプラットフォームを管理するためのいくつかのツールを提供しています。 このチュートリアルでは、 gsutil を使用して、APIと一緒にデータを読み書きします。
これは、2つの簡単なステップで実行できます。
- プラットフォームのこちらの手順からCloudSDKをインストールします。
- プラットフォームのクイックスタートはこちらSDK の初期化のステップ4で、上記のセクション2.2のステップ4でプロジェクト名を選択します(「 baeldung-cloud-storage 」または使用した名前)。
gsutil がインストールされ、クラウドプロジェクトからデータを読み取るように構成されました。
3. ストレージに接続してバケットを作成する
3.1. ストレージに接続します
Google Cloudストレージを使用する前に、サービスオブジェクトを作成する必要があります。 GOOGLE_APPLICATION_CREDENTIALS 環境変数をすでに設定している場合は、デフォルトのインスタンスを使用できます。
Storage storage = StorageOptions.getDefaultInstance().getService();
環境変数を使用したくない場合は、 Credentials インスタンスを作成し、それをプロジェクト名でStorageに渡す必要があります。
Credentials credentials = GoogleCredentials
.fromStream(new FileInputStream("path/to/file"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials)
.setProjectId("baeldung-cloud-tutorial").build().getService();
3.2. バケットの作成
接続して認証されたので、バケットを作成できます。 バケットは、オブジェクトを保持するコンテナです。 これらは、データアクセスを整理および制御するために使用できます。
バケット内のオブジェクトの数に制限はありません。 GCP はバケットでの操作の数を制限し、はアプリケーション設計者がバケットではなくオブジェクトでの操作を強調するように促します。
バケットを作成するには、 BucketInfo:が必要です
Bucket bucket = storage.create(BucketInfo.of("baeldung-bucket"));
この簡単な例では、バケット名を指定し、デフォルトのプロパティを受け入れます。 バケット名はグローバルに一意である必要があります。すでに使用されている名前を選択すると、 create()は失敗します。
3.3. バケットをgsutilで調べる
これでバケットができたので、gsutil。で調べることができます。
コマンドプロンプトを開いて、見てみましょう。
$ gsutil ls -L -b gs://baeldung-1-bucket/
gs://baeldung-1-bucket/ :
Storage class: STANDARD
Location constraint: US
Versioning enabled: None
Logging configuration: None
Website configuration: None
CORS configuration: None
Lifecycle configuration: None
Requester Pays enabled: None
Labels: None
Time created: Sun, 11 Feb 2018 21:09:15 GMT
Time updated: Sun, 11 Feb 2018 21:09:15 GMT
Metageneration: 1
ACL:
[
{
"entity": "project-owners-385323156907",
"projectTeam": {
"projectNumber": "385323156907",
"team": "owners"
},
"role": "OWNER"
},
...
]
Default ACL:
[
{
"entity": "project-owners-385323156907",
"projectTeam": {
"projectNumber": "385323156907",
"team": "owners"
},
"role": "OWNER"
},
...
]
gsutil はシェルコマンドによく似ており、Unixコマンドラインに精通している人なら誰でもここで非常に快適に感じるはずです。 バケットへのパスをURLとして渡したことに注意してください: gs:// baeldung-1-bucket/と他のいくつかのオプション。
ls オプションは、リストまたはオブジェクトまたはバケットを生成し、 -L オプションは、詳細なリストが必要であることを示しています。作成時間やアクセス制御など、バケットに関する詳細を受け取りました。
バケットにデータを追加しましょう!
4. データの読み取り、書き込み、更新
Google Cloud Storageでは、オブジェクトはBlobsに保存されます。 Blob 名には、1024文字に制限された任意のUnicode文字を含めることができます。
4.1. データの書き込み
Stringをバケットに保存しましょう。
String value = "Hello, World!";
byte[] bytes = value.getBytes(UTF_8);
Blob blob = bucket.create("my-first-blob", bytes);
ご覧のとおり、オブジェクトはバケット内の bytes の配列であるため、生のバイトを操作するだけでStringを格納します。
4.2. gsutilを使用したデータの読み取り
オブジェクトを含むバケットができたので、gsutil。を見てみましょう。
バケットの内容を一覧表示することから始めましょう。
$ gsutil ls gs://baeldung-1-bucket/
gs://baeldung-1-bucket/my-first-blob
gsutil ls オプションを再度渡しましたが、 -bと-L、を省略したため、オブジェクトの簡単なリストを要求しました。 各オブジェクトのURIのリストを受け取ります。これは、この場合は1つです。
オブジェクトを調べてみましょう。
$ gsutil cat gs://baeldung-1-bucket/my-first-blob
Hello World!
Cat は、オブジェクトのコンテンツを標準出力に連結します。 Blobに書き込んだStringが表示されます。
4.3. データの読み取り
ブロブには、作成時にBlobIdが割り当てられます。
Blobを取得する最も簡単な方法は、BlobIdを使用することです。
Blob blob = storage.get(blobId);
String value = new String(blob.getContent());
IDをStorageに渡し、 Blob を取得し、 getContent()がバイトを返します。
BlobId がない場合は、名前でバケットを検索できます。
Page<Blob> blobs = bucket.list();
for (Blob blob: blobs.getValues()) {
if (name.equals(blob.getName())) {
return new String(blob.getContent());
}
}
4.4. データの更新
Blob を取得し、その WriteableByteChannel にアクセスすることで、更新できます。
String newString = "Bye now!";
Blob blob = storage.get(blobId);
WritableByteChannel channel = blob.writer();
channel.write(ByteBuffer.wrap(newString.getBytes(UTF_8)));
channel.close();
更新されたオブジェクトを調べてみましょう。
$ gsutil cat gs://baeldung-1-bucket/my-first-blob
Bye now!
4.5. オブジェクトをファイルに保存してから削除する
更新されたオブジェクトをファイルに保存しましょう。
$ gsutil copy gs://baeldung-1-bucket/my-first-blob my-first-blob
Copying gs://baeldung-1-bucket/my-first-blob...
/ [1 files][ 9.0 B/ 9.0 B]
Operation completed over 1 objects/9.0 B.
Grovers-Mill:~ egoebelbecker$ cat my-first-blob
Bye now!
予想どおり、 copy オプションは、コマンドラインで指定されたファイル名にオブジェクトをコピーします。
gsutil は、オブジェクトを保存するのに十分なスペースがある場合、任意のオブジェクトをGoogleCloudStorageからローカルファイルシステムにコピーできます。
クリーンアップして終了します。
$ gsutil rm gs://baeldung-1-bucket/my-first-blob
Removing gs://baeldung-1-bucket/my-first-blob...
/ [1 objects]
Operation completed over 1 objects.
$ gsutil ls gs://baeldung-1-bucket/
$
rm ( del も機能します)は、指定されたオブジェクトを削除します
5. 結論
この簡単なチュートリアルでは、Google Cloud Storageのクレデンシャルを作成し、インフラストラクチャに接続しました。 バケットを作成し、データを書き込んでから、それを読み取って変更しました。 APIを使用しているため、 gsutil を使用して、データを作成および読み取るときにクラウドストレージを調べました。
また、バケットの使用方法とデータの効率的な書き込みと変更の方法についても説明しました。
コードサンプルは、いつものように、GitHubのにあります。