LoginSignup
0
0

[Cloud Storage API(V2)] JavaでCloud Storageを使う

Last updated at Posted at 2024-04-24

Googleが提供しているCloud Storage API V2をJavaで使ってみました。

Cloud Storage APIとは
Googleが提供しているAPIで、Cloud Storageに関する操作ができます。

下記にCloud Storageで出現する用語について簡単にまとめました。

用語 概要
バケット データを格納する基本的なコンテナ
オブジェクト Cloud Storage内に保存する個々のデータ
アクセス制御リスト(ACL) アクセスのレベルを定義するために使用できるメカニズム
HMACキー アカウントに関連付けられた認証情報の一種

料金は、Cloud Storage APIの実行するAPIによって異なります。
当然ですが、ストレージへの保存容量によっても料金が発生します。

詳細は公式ドキュメントの「Cloud Storage の料金」を参照ください。

No 目次
1 Cloud Storage APIを使用するための準備
1 プロジェクトの作成
2 APIを使用するためのキー取得
2 Cloud Storage APIを使ってみる
1 googleライブラリの読み込み
2 Storageインスタンスを取得
1 サービスアカウントを利用する場合
2 OAuth 2.0 クライアントIDを利用する場合
3 プログラムの実行
3 いろいろとAPIを叩いてみる
1 バケットに対する操作
2 管理フォルダ(マネージドフォルダ)に対する操作
3 オブジェクトに対する操作
4 HMACキーに対する操作
5 サービスエージェントのメールアドレスを取得
6 変更通知(通知サブスクリプション)に対する操作
7 変更通知(通知サブスクリプション)の停止
8 バケットに対するアクセス制御リスト(ACL)の操作
9 デフォルトのアクセス制御リスト(ACL)の操作
10 オブジェクトのアクセス制御リスト(ACL)の操作

1. Cloud Storage APIを使用するための準備

設定は下記から行います。
⧉Google クラウド プラットフォーム

やることは大きく分けて下記の2つです。
1.GCPプロジェクトの作成
2.プログラムで使用するJSONファイルのダウンロード

なお、APIの有効化はしなくともAPIが実行できるようです。

1.1. プロジェクトの作成

まずはGCPでプロジェクトを作成します。
詳細はこちらの記事を参照ください
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.1. プロジェクトの作成)

1.2. APIを使用するためのキー取得

プログラムからAPIを実行するための準備を行います。
サービスアカウントを利用する方法と、OAuth2.0を利用する方法があります。

同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Drive API v3] JavaでDrive APIを使う

2. Cloud Storage APIを使ってみる

2.1. googleライブラリの読み込み

Cloud Storage APIを使用するためにライブラリのパスを設定します。
私の環境はpom.xmlで下記を指定しています。
Javaのバージョンは21を使用しています。

<dependencies>
    <dependency>
        <groupId>com.google.api-client</groupId>
        <artifactId>google-api-client</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-storage</artifactId>
    </dependency>
    <!-- OAuth2.0で認証を行う場合のみ使用します -->
    <dependency>
        <groupId>com.google.oauth-client</groupId>
        <artifactId>google-oauth-client-jetty</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>libraries-bom</artifactId>
            <version>26.34.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.2. Storageインスタンスを取得

2.2.1. サービスアカウントを利用する場合

コード中の「JSONファイルのパス」は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
で取得したJSONファイルのパスを指定してください。

コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。

private static Storage getStorage() throws Exception {
    HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    
    try(InputStream input = new FileInputStream("JSONファイルのパス")){
        GoogleCredentials credentials = GoogleCredentials
                .fromStream(input)
                .createScoped(Arrays.asList("スコープ"));
        
        return new Storage.Builder(transport, jsonFactory, new HttpCredentialsAdapter(credentials)).build();
    }
}

2.2.2. OAuth 2.0 クライアントIDを利用する場合

コード中の「JSONファイルのパス」は、

⧉[Google Drive API v3] JavaでDrive APIを使う(1.3.2.1 認証情報の作成)
で取得したJSONファイルのパスを指定してください。

コード中の「認証情報を保存するフォルダパス」は、
認証情報が保存されるフォルダのパスを指定してください。
このコードを実行するとOAuth同意画面が表示されます。
ユーザーが同意をすると認証情報を保存するフォルダにファイルが生成されます。
このファイルが存在した場合は、再度実行してもOAuth同意画面は表示されません。

コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。
途中でスコープを変更した場合は再度のOAuth同意が必要になるので
「認証情報を保存するフォルダパス」にあるファイルを削除するか、パスを変えてください。

private static Storage getStorage() throws Exception {
    HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    
    try(Reader reader = new InputStreamReader(new FileInputStream("JSONファイルのパス"))){
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory,reader);

        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                transport, jsonFactory, clientSecrets, 
                Arrays.asList("スコープ"))
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File("認証情報を保存するフォルダパス")))
            .build();
        
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().build();
        Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
        
        return new Storage.Builder(transport, jsonFactory, credential).build();
    }
}

2.3. プログラムの実行

プログラムを動かします。
サンプルではバケットの一覧を取得しています。

public static void main(String[] args) throws Exception{
    Storage storage = getStorage2();
    Storage.Buckets bucketAccessControls = storage.buckets();
    Storage.Buckets.List list = bucketAccessControls.list("プロジェクトID");
    
    Buckets res = list.execute();
    System.out.println(res);
}

3. いろいろとAPIを叩いてみる

いろいろなAPIを叩いてみます。

表中の「料金」は、オペレーションのカテゴリの分類を示しています。
カテゴリは、クラスA、クラスB、無料の3つに分類され、クラスが異なると料金も変わります。
詳細は公式ドキュメントの「Cloud Storage の料金」を参照ください。

3.1. Buckets

バケットに対する操作

メソッド 料金 概要 記事
delete 無料 バケットを削除 ⧉[Cloud Storage API(V2)] Javaでバケットを生成・更新・削除する
get B バケットのメタデータを取得 ⧉[Cloud Storage API(V2)] Javaでバケットを取得する
getIamPolicy B IAM ポリシーを取得 ⧉[Cloud Storage API(V2)] JavaでバケットのIAMポリシーを取得する
insert A バケットを作成 ⧉[Cloud Storage API(V2)] Javaでバケットを生成・更新・削除する
list A バケットのリストを取得 ⧉[Cloud Storage API(V2)] Javaでバケットを取得する
lockRetentionPolicy A バケットの保持ポリシーをロック ⧉[Cloud Storage API(V2)] Javaでバケットの保持ポリシーをロックする
patch A バケットを更新 ⧉[Cloud Storage API(V2)] Javaでバケットを生成・更新・削除する
setIamPolicy A IAM ポリシーを更新 ⧉[Cloud Storage API(V2)] JavaでバケットのIAMポリシーを更新する
testIamPermissions B バケットのアクセス許可をテスト ⧉[Cloud Storage API(V2)] Javaでバケットのアクセス権限をテストする
update A バケットを上書き更新 ⧉[Cloud Storage API(V2)] Javaでバケットを生成・更新・削除する

3.2. ManagedFolders

管理フォルダ(マネージドフォルダ)に対する操作

メソッド 料金 概要 記事
delete B 管理フォルダ(マネージドフォルダ)を削除 ⧉[Cloud Storage API(V2)] Javaで管理フォルダ(マネージドフォルダ)を生成・削除する
get B 管理フォルダ(マネージドフォルダ)のメタデータを取得 ⧉[Cloud Storage API(V2)] Javaで管理フォルダ(マネージドフォルダ)を取得する
getIamPolicy B 管理フォルダ(マネージドフォルダ)のIAM ポリシーを取得 ⧉[Cloud Storage API(V2)] Javaで管理フォルダ(マネージドフォルダ)のIAMポリシーを取得する
insert A 管理フォルダ(マネージドフォルダ)を作成 ⧉[Cloud Storage API(V2)] Javaで管理フォルダ(マネージドフォルダ)を生成・削除する
list B 管理フォルダ(マネージドフォルダ)のリストを取得 ⧉[Cloud Storage API(V2)] Javaで管理フォルダ(マネージドフォルダ)を取得する
setIamPolicy A 管理フォルダ(マネージドフォルダ)のIAM ポリシーを更新 ⧉[Cloud Storage API(V2)] Javaで管理フォルダ(マネージドフォルダ)のIAMポリシーを更新する
testIamPermissions B 管理フォルダ(マネージドフォルダ)のアクセス許可をテスト ⧉[Cloud Storage API(V2)] Javaで管理フォルダ(マネージドフォルダ)のアクセス許可をテストする

3.3. Objects

オブジェクト(個々のデータ)に対する操作

メソッド 料金 概要 記事
bulkRestore A 論理的に削除された複数のオブジェクトを一括復元 ⧉[Cloud Storage API(V2)] Javaで論理的削除されたオブジェクトをリストア(復元)する
compose A オブジェクトを結合 ⧉[Cloud Storage API(V2)] JavaでCloud Storage上のオフジェクトを結合する
copy A オブジェクトをコピー ⧉[Cloud Storage API(V2)] Javaでオブジェクトのコピー・置換する
delete 無料 オブジェクトとメタデータを削除 ⧉[Cloud Storage API(V2)] Javaでオブジェクトの保存(アップロード)・更新・削除する
get B オブジェクトのメタデータを取得

オブジェクトをダウンロード
⧉[Cloud Storage API(V2)] Javaでオブジェクトの情報を取得する

⧉[Cloud Storage API(V2)] Javaでオブジェクトをダウンロードする
insert A オブジェクトを保存(アップロード) ⧉[Cloud Storage API(V2)] Javaでオブジェクトの保存(アップロード)・更新・削除する
list A オブジェクトのリストを取得 ⧉[Cloud Storage API(V2)] Javaでオブジェクトの情報を取得する
patch A オブジェクトのメタデータを更新 ⧉[Cloud Storage API(V2)] Javaでオブジェクトの保存(アップロード)・更新・削除する
rewrite A オブジェクトを書き換え ⧉[Cloud Storage API(V2)] Javaでオブジェクトのコピー・置換する
update A オブジェクトを上書き更新 ⧉[Cloud Storage API(V2)] Javaでオブジェクトの保存(アップロード)・更新・削除する
watchAll B バケット内の全てのオブジェクトの変更を監視 ⧉[Cloud Storage API(V2)] Javaで変更通知(通知サブスクリプション)を登録・削除する
restore A 論理的に削除されたオブジェクトを復元 ⧉[Cloud Storage API(V2)] Javaで論理的削除されたオブジェクトをリストア(復元)する

3.4. Projects.hmacKeys

HMACキーに対する操作

メソッド 料金 概要 記事
create B HMACキーを作成 ⧉[Cloud Storage API(V2)] JavaでCloud StorageのHMACキー情報を作成・更新・削除する
delete 無料 HMACキーを削除 ⧉[Cloud Storage API(V2)] JavaでCloud StorageのHMACキー情報を作成・更新・削除する
get B HMACキーのメタデータを取得 ⧉[Cloud Storage API(V2)] JavaでCloud StorageのHMACキー情報を取得する
list B HMACキーのリストを取得 ⧉[Cloud Storage API(V2)] JavaでCloud StorageのHMACキー情報を取得する
update A HMACキーを更新 ⧉[Cloud Storage API(V2)] JavaでCloud StorageのHMACキー情報を作成・更新・削除する

3.5. Projects.serviceAccount

サービスエージェントのメールアドレスを取得

メソッド 料金 概要 記事
get B Cloud Storageサービスエージェントのメールアドレスを取得 ⧉[Cloud Storage API(V2)] JavaでCloud Storageサービスアカウントのメールアドレスを取得する

3.6. Notifications

変更通知(通知サブスクリプション)に対する操作

メソッド 料金 概要 記事
delete A 変更通知(通知サブスクリプション)を削除 ⧉[Cloud Storage API(V2)] Javaで変更通知(通知サブスクリプション)を登録・削除する
get B 変更通知(通知サブスクリプション)を取得 ⧉[Cloud Storage API(V2)] Javaでバケットの変更通知(通知サブスクリプション)を取得する
insert A 変更通知(通知サブスクリプション)を作成 ⧉[Cloud Storage API(V2)] Javaで変更通知(通知サブスクリプション)を登録・削除する
list B 変更通知(通知サブスクリプション)のリストを取得 ⧉[Cloud Storage API(V2)] Javaでバケットの変更通知(通知サブスクリプション)を取得する

3.7. Channels

変更通知(通知サブスクリプション)の停止操作

メソッド 料金 概要 記事
stop 無料 変更通知の受信を停止 ⧉[Cloud Storage API(V2)] Javaで変更通知(通知サブスクリプション)を登録・削除する

3.8. BucketAccessControls

バケットに対するアクセス制御リスト(ACL)の操作

メソッド 料金 概要 記事
delete ACLエントリを削除 ⧉[Cloud Storage API(V2)] Javaでバケットのアクセス制御リスト(ACL)エントリを作成・更新・削除する
get B ACLエントリを取得 ⧉[Cloud Storage API(V2)] Javaでバケットのアクセス制御リスト(ACL)エントリを取得する
insert A ACLエントリを作成 ⧉[Cloud Storage API(V2)] Javaでバケットのアクセス制御リスト(ACL)エントリを作成・更新・削除する
list B ACLエントリのリストを取得 ⧉[Cloud Storage API(V2)] Javaでバケットのアクセス制御リスト(ACL)エントリを取得する
patch A ACLエントリを更新 ⧉[Cloud Storage API(V2)] Javaでバケットのアクセス制御リスト(ACL)エントリを作成・更新・削除する
update A ACLエントリを上書き更新 ⧉[Cloud Storage API(V2)] Javaでバケットのアクセス制御リスト(ACL)エントリを作成・更新・削除する

3.9. DefaultObjectAccessControls

デフォルトのアクセス制御リスト(ACL)の操作

メソッド 料金 概要 記事
delete B デフォルトのACLエントリを削除 ⧉[Cloud Storage API(V2)] Javaでデフォルトのアクセス制御リスト(ACL)エントリを作成・更新・削除する
get B デフォルトのACL エントリを取得 ⧉[Cloud Storage API(V2)] Javaでデフォルトのアクセス制御リスト(ACL)エントリを取得する
insert A デフォルトのACL エントリを作成 ⧉[Cloud Storage API(V2)] Javaでデフォルトのアクセス制御リスト(ACL)エントリを作成・更新・削除する
list B デフォルトのACL エントリのリストを取得 ⧉[Cloud Storage API(V2)] Javaでデフォルトのアクセス制御リスト(ACL)エントリを取得する
patch A デフォルトのACL エントリを更新 ⧉[Cloud Storage API(V2)] Javaでデフォルトのアクセス制御リスト(ACL)エントリを作成・更新・削除する
update A デフォルトのACL エントリを上書き更新 ⧉[Cloud Storage API(V2)] Javaでデフォルトのアクセス制御リスト(ACL)エントリを作成・更新・削除する

3.10. ObjectAccessControls

オブジェクトのアクセス制御リスト(ACL)の操作

メソッド 料金 概要 記事
delete B オブジェクトのACLエントリを削除 ⧉[Cloud Storage API(V2)] Javaでオブジェクトのアクセス制御リスト(ACL)エントリを作成・更新・削除する
get B オブジェクトのACL エントリを取得 ⧉[Cloud Storage API(V2)] Javaでオブジェクトのアクセス制御リスト(ACL)エントリを取得する
insert A オブジェクトのACL エントリを作成 ⧉[Cloud Storage API(V2)] Javaでオブジェクトのアクセス制御リスト(ACL)エントリを作成・更新・削除する
list B オブジェクトのACL エントリのリストを取得 ⧉[Cloud Storage API(V2)] Javaでオブジェクトのアクセス制御リスト(ACL)エントリを取得する
patch A オブジェクトのACL エントリを更新 ⧉[Cloud Storage API(V2)] Javaでオブジェクトのアクセス制御リスト(ACL)エントリを作成・更新・削除する
update A オブジェクトのACL エントリを上書き更新 ⧉[Cloud Storage API(V2)] Javaでオブジェクトのアクセス制御リスト(ACL)エントリを作成・更新・削除する


おしまい。。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0