階層型名前空間が有効なバケットを作成する

このページでは、階層型名前空間が有効なバケットを作成する方法について説明します。

必要なロール

階層型名前空間が有効になっているバケットを作成するために必要な権限を取得するには、プロジェクトに対するストレージ管理者 roles/storage.admin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

この事前定義ロールには、階層型名前空間が有効になっているバケットを作成するために必要な storage.buckets.create 権限が含まれています。

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

階層型名前空間が有効なバケットを作成する

コンソール

  1. Trusted Cloud コンソールで Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. [ 作成] をクリックします。
  3. [バケットの作成] ページでバケット情報を入力し、[続行] をクリックします。
    1. [始める] セクションで、次の操作を行います。
      1. バケット名の要件を満たす、グローバルに一意のバケット名を入力します。
      2. 階層型名前空間を有効にするには、展開矢印をクリックして [Optimize for file oriented and data-intensive workloads] セクションを開き、[このバケットで階層的な名前空間を有効にする] を選択します。

        注: 既存のバケットで階層型名前空間を有効にすることはできません。

      3. 省略可: バケットラベルを追加するには、 展開矢印をクリックして [ラベル] セクションを開き、[ ラベルを追加] をクリックして、ラベルの keyvalue を指定します。
    2. [データの保存場所の選択] セクションで、次の操作を行います。
      1. [ロケーション タイプ] で [リージョン] を選択します。
      2. [ロケーション] リストで、バケットデータが永続的に保存されるリージョンを選択します。
    3. [データのストレージ クラスを選択する] セクションで、バケットに対して [デフォルトのクラスを設定する] を選択します。

      注: 右側の [毎月の費用の見積もり] パネルでは、選択したストレージ クラスとロケーション、予想されるデータサイズとオペレーションに基づいてバケットの毎月のコストを見積もります。

    4. [オブジェクトへのアクセスを制御する方法を選択する] セクションで、バケットに公開アクセスの防止を適用するかどうかを選択し、[アクセス制御] で [均一] を選択します。

      注: プロジェクトの組織のポリシーによって公開アクセスの防止がすでに適用されている場合、[公開アクセスの防止] の切り替えはロックされています。

    5. [オブジェクト データを保護する方法を選択する] セクションで、次の操作を行います。
      1. 省略可: カスタム削除(復元可能)ポリシーオブジェクトのバージョニング保持ポリシーの構成など、データ保護方法を選択します。
      2. データの暗号化方法を選択するには、[データ暗号化] というラベルの付いた 展開矢印をクリックします。
  4. [作成] をクリックします。

失敗した Cloud Storage オペレーションの詳細なエラー情報を Trusted Cloud コンソールで確認する方法については、トラブルシューティングをご覧ください。

コマンドライン

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 開発環境で、gcloud storage buckets create コマンドを実行します。

    gcloud storage buckets create gs://BUCKET_NAME --location=BUCKET_LOCATION --uniform-bucket-level-access --enable-hierarchical-namespace

    ここで

    • BUCKET_NAME は、バケットに付ける名前で、命名要件の対象となります。例: my-bucket
    • BUCKET_LOCATION は、バケットのロケーションです。例: us-east1
    • --uniform-bucket-level-access: バケットの均一なバケットレベルのアクセスを有効にします。
    • --enable-hierarchical-namespace: バケットの階層型名前空間を有効にします。既存のバケットで階層型名前空間を有効にすることはできません。

    リクエストが成功すると、コマンドから次のメッセージが返されます。

    Creating gs://BUCKET_NAME/...

    次のフラグを設定すると、バケットの作成をより細かくコントロールできます。

    • --project: バケットが関連付けられるプロジェクト ID またはプロジェクト番号を指定します。例: my-project
    • --default-storage-class: バケットのデフォルトのストレージ クラスを指定します。例: STANDARD
    • Google Cloud CLI を使用してバケットを作成するオプションの完全なリストについては、buckets create オプションをご覧ください。

    例:

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --default-storage-class=STORAGE_CLASS --location=BUCKET_LOCATION --uniform-bucket-level-access
  3. クライアント ライブラリ

    C++

    詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。

    Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    namespace gcs = ::google::cloud::storage;
    using ::google::cloud::StatusOr;
    [](gcs::Client client, std::string const& bucket_name) {
      auto metadata = client.CreateBucket(
          bucket_name,
          gcs::BucketMetadata()
              .set_hierarchical_namespace(gcs::BucketHierarchicalNamespace{true})
              .set_iam_configuration(gcs::BucketIamConfiguration{
                  gcs::UniformBucketLevelAccess{true, {}}, absl::nullopt}));
      if (!metadata) throw std::move(metadata).status();
    
      std::cout << "Bucket " << metadata->name() << " created."
                << "\nFull Metadata: " << *metadata << "\n";
    }

    C#

    詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。

    Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    using Google.Apis.Storage.v1.Data;
    using Google.Cloud.Storage.V1;
    using System;
    
    public class CreateBucketWithHierarchicalNamespaceEnabledSample
    {
        public Bucket CreateBucketWithHierarchicalNamespace(
            string projectId = "your-project-id",
            string bucketName = "your-unique-bucket-name")
        {
            var storage = StorageClient.Create();
            var bucket = storage.CreateBucket(projectId,
                new Bucket
                {
                    Name = bucketName,
                    IamConfiguration = new Bucket.IamConfigurationData
                    {
                        UniformBucketLevelAccess = new Bucket.IamConfigurationData.UniformBucketLevelAccessData { Enabled = true }
                    },
                    HierarchicalNamespace = new Bucket.HierarchicalNamespaceData { Enabled = true }
                });
            Console.WriteLine($"Created {bucketName} with Hierarchical Namespace enabled.");
            return bucket;
        }
    }

    Go

    詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。

    Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    import (
    	"context"
    	"fmt"
    	"io"
    	"time"
    
    	"cloud.google.com/go/storage"
    )
    
    // createBucketHierarchicalNamespace creates a new bucket with hierarchical
    // namespace features enabled.
    func createBucketHierarchicalNamespace(w io.Writer, projectID, bucketName string) error {
    	// projectID := "my-project-id"
    	// bucketName := "bucket-name"
    
    	ctx := context.Background()
    	client, err := storage.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("storage.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	ctx, cancel := context.WithTimeout(ctx, time.Second*30)
    	defer cancel()
    
    	attrs := &storage.BucketAttrs{
    		HierarchicalNamespace: &storage.HierarchicalNamespace{
    			Enabled: true,
    		},
    		// Hierarchical namespace buckets must use uniform bucket-level access.
    		UniformBucketLevelAccess: storage.UniformBucketLevelAccess{
    			Enabled: true,
    		},
    	}
    	bucket := client.Bucket(bucketName)
    	if err := bucket.Create(ctx, projectID, attrs); err != nil {
    		return fmt.Errorf("Bucket(%q).Create: %w", bucketName, err)
    	}
    	fmt.Fprintf(w, "Created bucket %v with hierarchical namespace enabled\n", bucketName)
    	return nil
    }
    

    Java

    詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。

    Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    import com.google.cloud.storage.Bucket;
    import com.google.cloud.storage.BucketInfo;
    import com.google.cloud.storage.BucketInfo.HierarchicalNamespace;
    import com.google.cloud.storage.BucketInfo.IamConfiguration;
    import com.google.cloud.storage.Storage;
    import com.google.cloud.storage.StorageOptions;
    
    public final class CreateHierarchicalNamespaceBucket {
    
      public static void createHierarchicalNamespaceBucket(String projectId, String bucketName)
          throws Exception {
        // The ID of your GCP project
        // String projectId = "your-project-id";
    
        // The ID to give your GCS bucket
        // String bucketName = "your-unique-bucket-name";
        StorageOptions storageOptions = StorageOptions.newBuilder().setProjectId(projectId).build();
        try (Storage storage = storageOptions.getService()) {
    
          BucketInfo bucketInfo =
              BucketInfo.newBuilder(bucketName)
                  .setIamConfiguration(
                      // Hierarchical namespace buckets must use uniform bucket-level access.
                      IamConfiguration.newBuilder().setIsUniformBucketLevelAccessEnabled(true).build())
                  .setHierarchicalNamespace(HierarchicalNamespace.newBuilder().setEnabled(true).build())
                  .build();
    
          Bucket bucket = storage.create(bucketInfo);
    
          System.out.printf(
              "Created bucket %s with Hierarchical Namespace enabled.%n", bucket.getName());
        }
      }
    }

    Node.js

    詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。

    Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // The ID of your GCS bucket
    // const bucketName = 'your-unique-bucket-name';
    
    // Imports the Google Cloud client library
    const {Storage} = require('@google-cloud/storage');
    
    // Creates a client
    // The bucket in the sample below will be created in the project associated with this client.
    // For more information, please see https://cloud.google.com/docs/authentication/production or https://googleapis.dev/nodejs/storage/latest/Storage.html
    const storage = new Storage();
    
    async function createBucketWithHierarchicalNamespace() {
      const [bucket] = await storage.createBucket(bucketName, {
        iamConfiguration: {
          uniformBucketLevelAccess: {
            enabled: true,
          },
        },
        hierarchicalNamespace: {
          enabled: true,
        },
      });
    
      console.log(
        `Created '${bucket.name}' with hierarchical namespace enabled.`
      );
    }
    
    createBucketWithHierarchicalNamespace().catch(console.error);

    PHP

    詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。

    Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    use Google\Cloud\Storage\StorageClient;
    
    /**
     * Create a new bucket with Hierarchical Namespace enabled.
     *
     * @param string $bucketName The name of your Cloud Storage bucket.
     *        (e.g. 'my-bucket')
     */
    function create_bucket_hierarchical_namespace(string $bucketName): void
    {
        $storage = new StorageClient();
        $bucket = $storage->createBucket($bucketName, [
            'hierarchicalNamespace' => ['enabled' => true],
            'iamConfiguration' => ['uniformBucketLevelAccess' => ['enabled' => true]]
        ]);
    
        printf('Created bucket %s with Hierarchical Namespace enabled.', $bucket->name());
    }

    Python

    詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。

    Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    from google.cloud import storage
    
    
    def create_bucket_hierarchical_namespace(bucket_name):
        """Creates a bucket with hierarchical namespace enabled."""
        # The ID of your GCS bucket
        # bucket_name = "your-bucket-name"
    
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        bucket.iam_configuration.uniform_bucket_level_access_enabled = True
        bucket.hierarchical_namespace_enabled = True
        bucket.create()
    
        print(f"Created bucket {bucket_name} with hierarchical namespace enabled.")
    
    

    Ruby

    詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。

    Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    def create_bucket_hierarchical_namespace bucket_name:
      # The ID to give your GCS bucket
      # bucket_name = "your-unique-bucket-name"
    
      require "google/cloud/storage"
    
      storage = Google::Cloud::Storage.new
    
      hierarchical_namespace = Google::Apis::StorageV1::Bucket::HierarchicalNamespace.new enabled: true
    
      storage.create_bucket bucket_name do |b|
        b.uniform_bucket_level_access = true
        b.hierarchical_namespace = hierarchical_namespace
      end
    
      puts "Created bucket #{bucket_name} with Hierarchical Namespace enabled."
    end

    REST API

    JSON API

    1. gcloud CLI のインストールと初期化を行います。これにより、Authorization ヘッダーのアクセス トークンを生成できます。

    2. バケットの設定を含む JSON ファイルを作成します。この設定には、バケットの name を含める必要があります。設定の一覧については、Buckets: Insert のドキュメントをご覧ください。一般的な設定は次のとおりです。
    3. {
        "name": "BUCKET_NAME",
        "location": "BUCKET_LOCATION",
        "storageClass": "STORAGE_CLASS",
        "hierarchicalNamespace": {
          "enabled": "BOOLEAN"
        },
        "iamConfiguration": {
          "uniformBucketLevelAccess": {
            "enabled": true
        },
      },
      }

      ここで

      • BUCKET_NAME は、バケットに付ける名前で、命名要件の対象となります。例: my-bucket
      • BUCKET_LOCATION は、バケットのオブジェクト データを保存するロケーションです。例: US-EAST1
      • STORAGE_CLASS はバケットのデフォルトのストレージ クラスです。例: STANDARD
      • hierarchicalNamespace.enabledTRUE に設定され、バケットで階層型名前空間が有効になります。既存のバケットで階層名前空間を有効にすることはできません。
    4. uniformBucketLevelAccess.enabledTRUE に設定され、バケットの均一なバケットレベルのアクセスが有効になっています。
    5. cURL使用して JSON API を呼び出します。
      curl -X POST --data-binary @JSON_FILE_NAME \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://storage.s3nsapis.fr/storage/v1/b?project=PROJECT_IDENTIFIER"

      ここで

      • JSON_FILE_NAME は、バケット設定を含む JSON ファイルの名前です。
      • PROJECT_IDENTIFIER は、バケットが関連付けられているプロジェクトの ID または番号です。例: my-project

次のステップ