Java搭載のGoogle Cloud Storageの紹介

Javaを使用したGoogle Cloud Storageの概要

1. 概要

Google Cloud Storageは、場所、アクセスの頻度、およびコストに基づいて、個々のアプリケーションのニーズに合わせて調整されたオンラインストレージを提供します。 Amazon Web Servicesとは異なり、Google Cloud Storageは、高、中、低頻度のアクセスに単一のAPIを使用します。

ほとんどのクラウドプラットフォームと同様に、Googleは無料のアクセス枠を提供しています。価格の詳細はhere.です

このチュートリアルでは、ストレージへの接続、バケットの作成、データの書き込み、読み取り、更新を行います。 APIを使用してデータの読み取りと書き込みを行う一方で、gsutilクラウドストレージユーティリティも使用します。

2. Google CloudStorageのセットアップ

2.1. メーベン依存

pom.xmlに単一の依存関係を追加する必要があります。


    com.google.cloud
    google-cloud-storage
    1.17.0

Maven Centralにはlatest version of the libraryがあります。

2.2. 認証キーを作成する

Google Cloudに接続する前に、authenticationを設定する必要があります。 Google Cloud Platform(GCP)アプリケーションは、JSON構成ファイルから秘密鍵と構成情報をロードします。 GCPコンソールを介してこのファイルを生成します。 コンソールにアクセスするには、有効なGoogle Cloud Platformアカウントが必要です。

次の方法で構成を作成します。

  1. Google Cloud Platform Consoleに移動します

  2. GCPプロジェクトをまだ定義していない場合は、createボタンをクリックして、「example-cloud-tutorial」などのプロジェクト名を入力します。

  3. ドロップダウンリストから「new service account」を選択します

  4. アカウント名フィールドに「example-cloud-storage」などの名前を追加します。

  5. role」の下で、サブメニューの「プロジェクト」、「所有者」の順に選択します。

  6. [作成]を選択すると、コンソールは秘密キーファイルをダウンロードします。

ステップ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つの簡単な手順で実行できます。

  1. プラットフォームのhereの手順からCloudSDKをインストールします。

  2. プラットフォームhere.のクイックスタートに従います。Initialize the SDKのステップ4で、上記のセクション2.2のステップ4でプロジェクト名(「example-cloud-storage」または使用した名前)を選択します。

これで、gsutilがインストールされ、クラウドプロジェクトからデータを読み取るように構成されました。

3. Storageに接続してBucketを作成する

3.1. Storageに接続します

Google Cloudストレージを使用する前に、サービスオブジェクトを作成する必要があります。 GOOGLE_APPLICATION_CREDENTIALS環境変数をすでに設定している場合は、デフォルトのインスタンスを使用できます。

Storage storage = StorageOptions.getDefaultInstance().getService();

環境変数を使用したくない場合は、Credentialsインスタンスを作成し、それをプロジェクト名Storage withに渡す必要があります。

Credentials credentials = GoogleCredentials
  .fromStream(new FileInputStream("path/to/file"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials)
  .setProjectId("example-cloud-tutorial").build().getService();

3.2. Bucketの作成

接続して認証されたので、バケットを作成できます。 バケットは、オブジェクトを保持するコンテナです。 データアクセスの整理と制御に使用できます。

バケット内のオブジェクトの数に制限はありません。 GCPlimitsバケットの操作数とencourages application designers to emphasize operations on objects rather than on buckets.

バケットを作成するには、BucketInfo:が必要です

Bucket bucket = storage.create(BucketInfo.of("example-bucket"));

この単純な例では、バケット名を使用し、デフォルトのプロパティを受け入れます。 Bucket names must beglobally unique.すでに使用されている名前を選択すると、create()は失敗します。

3.3. gsutilBucketを調べる

これでバケットができたので、gsutil.で調べることができます。

コマンドプロンプトを開いて見てみましょう。

$ gsutil ls -L -b gs://example-1-bucket/
gs://example-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://example-1-bucket/、および他のいくつかのオプション。

lsオプションは、リストまたはobjectsまたはbucketsを生成し、-Lオプションは、詳細なリストが必要であることを示したため、bucketに関する詳細を受け取りました。作成時間とアクセス制御を含みます。

バケットにデータを追加しましょう。

4. データの読み取り、書き込み、更新

In Google Cloud Storage, objects are stored in 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://example-1-bucket/
gs://example-1-bucket/my-first-blob

gsutillsオプションを再度渡しましたが、-b-L,を省略したため、オブジェクトの簡単なリストを要求しました。 各オブジェクトのURIのリストを受け取りますが、これはこの場合のリストです。

オブジェクトを調べてみましょう。

$ gsutil cat gs://example-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 blobs = bucket.list();
for (Blob blob: blobs.getValues()) {
    if (name.equals(blob.getName())) {
        return new String(blob.getContent());
    }
}

4.4. データの更新

Blobを取得し、そのWriteableByteChannelにアクセスすることで、Blobを更新できます。

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://example-1-bucket/my-first-blob
Bye now!

4.5. オブジェクトをファイルに保存してから削除する

更新されたオブジェクトをファイルに保存しましょう。

$ gsutil copy gs://example-1-bucket/my-first-blob my-first-blob
Copying gs://example-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 CloudStorageからローカルファイルシステムに任意のオブジェクトをコピーできます。

クリーンアップして終了します。

$ gsutil rm gs://example-1-bucket/my-first-blob
Removing gs://example-1-bucket/my-first-blob...
/ [1 objects]
Operation completed over 1 objects.
$ gsutil ls gs://example-1-bucket/
$

rmdelも機能します)は、指定されたオブジェクトを削除します

5. 結論

この簡単なチュートリアルでは、Google Cloud Storageの資格情報を作成し、インフラストラクチャに接続しました。 バケットを作成し、データを書き込んでから、読み取りと変更を行いました。 APIを使用しているため、データを作成して読み取るときに、gsutilを使用してクラウドストレージを調べました。

また、バケットを使用して、データを効率的に記述および変更する方法についても説明しました。

いつものように、コードサンプルはover on GitHubで見つけることができます。