Java搭載のGoogle Cloud Storageの紹介
1概要
Google Cloud Storage
は、場所、アクセス頻度、費用に基づいて、個々のアプリケーションのニーズに合わせたオンラインストレージを提供します。 Amazon Webサービスとは異なり、Google Cloud Storageは高、中、低頻度のアクセスに単一のAPIを使用します。
ほとんどのクラウドプラットフォームと同様に、Googleは無料のアクセス層を提供しています。料金の詳細はhttps://cloud.google.com/storage/pricing[こちら]です。
このチュートリアルでは、ストレージへの接続、バケットの作成、データの書き込み、読み取り、更新を行います。 APIを使用してデータを読み書きするときは、https://cloud.google.com/storage/docs/gsutil[
gsutil
]クラウドストレージユーティリティも使用します。
2 Googleクラウドストレージの設定
2.1. Mavenの依存関係
pom.xml
に単一の依存関係を追加する必要があります。
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.17.0</version>
</dependency>
Maven Centralはhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22google-cloud-storage%22[最新バージョンのライブラリ]を持っています。
2.2. 認証キーを作成する
Googleクラウドに接続する前に、https://cloud.google.com/docs/authentication/[authentication]を設定する必要があります。 Google Cloud Platform(GCP)アプリケーションは、JSON設定ファイルから秘密鍵と設定情報を読み込みます。 GCPコンソールを介してこのファイルを生成します。コンソールにアクセスするには、有効なGoogle Cloud Platformアカウントが必要です。
次のようにして設定を作成します。
-
に行く
Google
Cloud Platform Console
。 GCPプロジェクトをまだ定義していない場合は、[作成]ボタンをクリックします。
「
baeldung-cloud-tutorial
」などのプロジェクト名を入力します。
。ドロップダウンリストから「
新しいサービスアカウント
」を選択します。
-
アカウント名に「
baeldung-cloud-storage
」などの名前を追加します.
フィールド。
-
「
ロール
」の下の「プロジェクト」を選択し、次にサブメニューの「所有者」を選択します. -
[作成]を選択すると、コンソールに秘密鍵ファイルがダウンロードされます.
ステップ#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は、クラウドプラットフォームを管理するためのいくつかのツールを提供しています。このチュートリアルでは、APIと共にデータを読み書きするために
gsutil
を使用します。
これは2つの簡単なステップで実行できます。
-
指示からCloud SDKをインストールします
here
私たちのプラットフォームのために。
-
私たちのプラットフォームのためのクイックスタートに従ってください
here。
SDKの初期化
のステップ4では、上記のセクション2.2のステップ4のプロジェクト名(「
baeldung-cloud-storage__」またはどちらかの名前)を選択します。使いました)。
gsutil
がインストールされ、クラウドプロジェクトからデータを読み込むように設定されました。
3
Storage
への接続と
Bucket
の作成
3.1.
Storage
に接続
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.
Bucket
を作成する
接続と認証が完了したので、バケツを作成できます。
バケットはオブジェクトを保持するコンテナです。それらはデータアクセスを整理し制御するために使用することができます。
バケット内のオブジェクト数に制限はありません。 GCP
limits
バケットに対する操作の数を制限し、** アプリケーション設計者がバケットではなくオブジェクトに対する操作を強調するようにします。
バケットを作成するには__BucketInfoが必要です。
Bucket bucket = storage.create(BucketInfo.of("baeldung-bucket"));
この簡単な例では、バケット名を使用してデフォルトのプロパティを受け入れます。
バケット名は
グローバルにユニークでなければなりません
すでに使われている名前を選ぶと、__create()は失敗します。
3.3.
gsutil
で
Bucket
を調べる
今バケットがあるので、
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__オプションはリスト、__objects__または__buckets__を生成します、そして__-L__オプションは詳細なリストが欲しいことを示しました - それで我々は作成時間とアクセス制御を含む__bucket__についての詳細を受け取りました。
バケットにデータを追加しましょう。
[[data]]
=== ** 4データの読み取り、書き込み、および更新**
** Google Cloud Storageでは、オブジェクトは__Blobs__ ** に格納されています。 __Blob__名には、1024文字以内の任意のUnicode文字を含めることができます。
[[writing]]
==== ** 4.1. データを書き込む**
__String__をバケツに保存しましょう。
[source,java,gutter:,true]
String value = “Hello, World!”;
byte[]bytes = value.getBytes(UTF__8);
Blob blob = bucket.create(“my-first-blob”, bytes);
ご覧のとおり、オブジェクトは単にバケット内の__bytes__の配列なので、単に生のバイトを操作して__String__を格納します。 ==== 4.2. __gsutil__を使用したデータの読み取り オブジェクトが入ったバケツができたので、__gsutilを見てみましょう。 バケットの内容を一覧表示することから始めましょう。 [source,shell,gutter:,true]
$ gsutil ls gs://baeldung-1-bucket/gs://baeldung-1-bucket/my-first-blob
__gsutil__に__ls__オプションを再度渡しましたが、__-b__と__-Lを省略したので、オブジェクトの簡単なリストを求めました。各オブジェクトのURIのリストを受け取ります。これは、この例では1つです。 オブジェクトを調べてみましょう。 [source,shell,gutter:,true]
$ gsutil cat gs://baeldung-1-bucket/my-first-blob
Hello World!
__Cat__は、オブジェクトの内容を標準出力に連結します。 __Blob.__に書き込んだ__String__が表示されます。 [[reading]] ==== ** 4.3. データを読む** BLOBは作成時に__BlobId__が割り当てられます。 Blobを取得する最も簡単な方法は__BlobId__を使うことです。 [source,java,gutter:,true]
Blob blob = storage.get(blobId);
String value = new String(blob.getContent());
IDを__Storage__に渡して__Blob__を返し、__getContent()__がバイトを返します。 __BlobId__がない場合は、バケットを名前で検索できます。 [source,java,gutter:,true]
Page<Blob> blobs = bucket.list();
for (Blob blob: blobs.getValues()) {
if (name.equals(blob.getName())) {
return new String(blob.getContent());
}
}
[[updating]] ==== ** 4.4. データを更新する** __Blob__を取得してから、その__WriteableByteChannel__にアクセスすることで、__Blob__を更新できます。 [source,java,gutter:,true]
String newString = “Bye now!”;
Blob blob = storage.get(blobId);
WritableByteChannel channel = blob.writer();
channel.write(ByteBuffer.wrap(newString.getBytes(UTF__8)));
channel.close();
更新されたオブジェクトを調べましょう。 [source,shell,gutter:,true]
$ gsutil cat gs://baeldung-1-bucket/my-first-blob
Bye now!
==== 4.5. オブジェクトをファイルに保存してから削除 更新したオブジェクトをファイルに保存しましょう。 [source,shell,gutter:,true]
$ 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__は、格納するのに十分なスペースがあると仮定して、Google Cloud Storageからローカルファイルシステムに任意のオブジェクトをコピーできます。 次のようにクリーンアップします。 [source,shell,gutter:,true]
$ 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__を使用してクラウドストレージを調べました。 また、バケットの使用方法とデータの効率的な書き込みおよび変更方法についても説明しました。 いつものように、コードサンプルはhttps://github.com/eugenp/tutorials/tree/master/google-cloud[over on GitHub]にあります。