フォルダの作成と管理

フォルダは、Cloud Platform リソース階層のノードです。フォルダ内には、プロジェクトや他のフォルダが存在します。組織リソースでは、フォルダを使用して、階層内の組織リソースノードにあるプロジェクトをグループ化できます。たとえば、組織リソースに複数の部門があり、各部門が独自の Google Cloud リソースセットを使用する場合があります。フォルダを使用すると、これらのリソースを部門別にグループ化できます。フォルダは、共通の IAM ポリシーを共有するリソースのグループ化に使用します。フォルダには複数のフォルダやリソースを入れることができますが、1 つのフォルダやリソースに対する親は 1 つだけです。

下の図では、組織リソース「Company」に 2 つの部門「Dept X」と「Dept Y」を表すフォルダがあり、両方の部門に共通する項目がフォルダ「Shared Infrastructure」に存在しています。「Dept Y」の下に 2 つのチームがあり、チームのフォルダ内にプロダクトが存在します。「Product 1」フォルダには 3 つのプロジェクトが存在し、それぞれにプロジェクトに必要なリソースが含まれています。これにより、適切なレベルの組織のポリシーに IAM ポリシーを柔軟に割り当てることができます。

フォルダ階層の例

フォルダレベルの IAM ポリシーを使用すると、フォルダ内のリソースに対するアクセスを制御できます。たとえば、フォルダに対する Compute インスタンス管理者のロールをユーザーに付与すると、このユーザーには、フォルダ内のすべてのプロジェクトに対する Compute インスタンス管理者のロールが付与されます。

始める前に

フォルダ機能は、組織リソースを持つ Google Workspace および Cloud Identity のユーザーのみが利用できます。組織リソースの取得については、組織の作成と管理をご覧ください。

フォルダの最適な使い方を学習する前に、次のことを行ってください。

  1. IAM によるフォルダのアクセス制御を確認する。このトピックでは、フォルダとフォルダ内のリソースに対するアクセス制御の方法を説明しています。
  2. フォルダ権限の設定方法を確認する。フォルダには、さまざまな IAM ロールを設定できます。ユーザーがプロジェクトの構造を確認できるように権限を設定するには、ドメイン全体に組織レベルで組織閲覧者フォルダ閲覧者のロールを付与します。フォルダ階層でブランチの公開を制限するには、ユーザーに表示するフォルダにフォルダ閲覧者のロールを付与します。
  3. フォルダを作成する。Cloud リソースの整理方法を検討するときに、サンドボックスとして 1 つのフォルダを作成し、組織で有効な階層を探すことをおすすめします。フォルダは、リソース間の境界であり、アクセス ポリシーや構成ポリシーの割り当てポイントとなります。異なる部門のリソースを含むフォルダを作成して、フォルダに管理者ロールを割り当て、管理者権限を委譲することもできます。フォルダは、アプリケーションや異なる環境(開発環境、本番環境、テスト環境など)に属するリソースをグループ化する場合にも使用できます。フォルダをネストすることで、異なるシナリオをモデル化できます。

通常は、上記の図のように、フォルダを作成して、そのフォルダにフォルダやプロジェクトを追加します。この構造をフォルダ階層といいます。フォルダ階層を作成する場合には、次の点に注意してください。

  • フォルダのネストレベルは 10 個までです。
  • 親フォルダ内に作成できるフォルダは 300 個までです。この制限は、直下の子フォルダのみに適用されます。これらの子フォルダにはフォルダやプロジェクトを追加できます。
  • フォルダの表示名は、階層内の同じレベルで一意にする必要があります。

フォルダの管理に権限を設定する

フォルダにアクセスして管理するには、フォルダ固有の IAM 役割を特定のユーザー グループに割り当てます。ロールの詳細については、IAM を使用したフォルダのアクセス制御をご覧ください。また、おすすめの方法にて、フォルダの権限に最適な設定を確認することをおすすめします。

ヒント: 組織リソース全体のフォルダを管理するには、フォルダ管理者のロールが必要です。このロールを使用すると、フォルダに対する IAM 権限(作成、編集、削除、移動、変更)とフォルダ間でのプロジェクトの移動権限がユーザーに付与されます。

最初の段階では、組織リソースにフォルダ管理者のロールを割り当てることができるのは組織管理者だけです。以降は、このロールが割り当てられたアカウントが他のアカウントにロールを付与します。

フォルダ権限を設定する手順は次のとおりです。

Console

  1. Google Cloud コンソールで [リソースの管理] ページを開きます。

    [リソースの管理] に移動

  2. 情報パネルが開かない場合は、[情報パネルを表示] をクリックします。
  3. [リソース] テーブルで、フォルダを含む組織を展開します。
  4. 組織のリソースのリストから、管理するフォルダを選択します。
  5. 情報パネルで [プリンシパルを追加] をクリックします。
  6. [プリンシパルを追加] フィールドに、権限を付与するメールアドレスを入力します。
  7. [ロールを選択] メニューで [Resource Manager] カテゴリを選択し、付与するロール([フォルダ管理者] など)を選択します。
  8. [保存] をクリックして、新しいロールを付与します。

gcloud

Google Cloud CLI を使用してプリンシパルにフォルダ管理者ロールを付与するには、次のコマンドを実行します。

    gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member=user:USER_ID \
    --role=roles/resourcemanager.folderAdmin

API

JSON リクエスト:

request_json= '{ policy: { version: "1", bindings: [ { role: "roles/folderAdmin",
members: [ "user:admin@myorganization.com", ] }, { role: "roles/folderCreator",
members: [   "user:admin@myorganization.com", ] } , { role: "roles/folderMover",
members: [ "user:admin@myorganization.com", ] } , ] } }'

curl リクエスト:

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token}" \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/ORGANIZATION_NAME:setIamPolicy

ORGANIZATION_NAME は、IAM ポリシーが設定されている組織の名前(organizations/123 など)に置き換えます。

フォルダの作成

フォルダを作成するには、親レベルにフォルダ管理者またはフォルダ作成者のロールが必要です。たとえば、組織レベルでフォルダを作成するには、これらのいずれかのロールが組織レベルで必要です。

フォルダの作成中にフォルダ名を割り当てます。フォルダ名は次の要件を満たす必要があります。

  • 名前には文字、数字、スペース、ハイフン、アンダースコアを使用できます。
  • フォルダの表示名の先頭と最後は文字または数字にする必要があります。
  • 名前は 3~30 文字にしてください。
  • 親を共有する別のフォルダと同じ名前は使用できません。

フォルダを作成するには:

Console

フォルダの作成は、UI の [プロジェクトとフォルダを管理] セクションで行います。

  1. Google Cloud コンソールの [リソースの管理] ページに移動します。

    [リソースの管理] ページを開く

  2. ページの上部にある組織プルダウン リストから組織リソース名が選択されていることを確認します。

  3. [フォルダを作成] をクリックし、次のいずれかのオプションを選択します。

  4. [フォルダ名] ボックスに、新しいフォルダの名前を入力します。

  5. [宛先] で [参照] をクリックして、新しいフォルダを作成する組織リソースまたはフォルダを選択します。

    1. [作成] をクリックします。

gcloud

Google Cloud CLI を使用して、フォルダをプログラムで作成できます。

gcloud コマンドライン ツールを使用して組織リソースの下にフォルダを作成するには、次のコマンドを実行します。

gcloud resource-manager folders create \
   --display-name=[DISPLAY_NAME] \
   --organization=[ORGANIZATION_ID]

親が異なるフォルダを作成するには:

gcloud resource-manager folders create \
   --display-name=[DISPLAY_NAME] \
   --folder=[FOLDER_ID]

ここで

  • [DISPLAY_NAME] はフォルダの表示名です。同じ親を持つフォルダと表示名を共有することはできません。表示名の先頭と最後は文字または数字にしてください。表示名には文字や数字以外に、スペース、ハイフン、アンダースコアを使用できますが、長さは 30 文字以下にする必要があります。
  • 親が組織リソースの場合、[ORGANIZATION_ID] は親組織リソースの ID です。
  • 親がフォルダの場合、[FOLDER_ID] は親フォルダの ID です。

API

API リクエストによってフォルダを作成できます。

JSON リクエスト:

request_json= '{
  display_name: DISPLAY_NAME,
  parent: ORGANIZATION_NAME
}'

フォルダを作成する curl リクエスト:

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token}" \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/folders

ここで

  • [DISPLAY_NAME] は、新しいフォルダの表示名です。例: My Awesome Folder
  • [ORGANIZATION_NAME] は、フォルダを作成する組織リソースの名前です。例: organizations/123

フォルダ作成に対するレスポンス:

{
  "name": "operations/fc.123456789",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "[DISPLAY_NAME]",
    "operationType": "CREATE"
  }
}

オペレーションを取得する curl リクエスト:

curl -H "Authorization: Bearer ${bearer_token}" \
https://cloudresourcemanager.googleapis.com/v3/operations/fc.123456789

オペレーション取得に対するレスポンス:

{
  "name": "operations/fc.123456789",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "[DISPLAY_NAME]",
    "operationType": "CREATE"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.Folder",
    "name": "folders/12345",
    "parent": "organizations/123",
    "displayName": "[DISPLAY_NAME]",
    "lifecycleState": "ACTIVE",
    "createTime": "2017-07-19T23:29:26.018Z",
    "updateTime": "2017-07-19T23:29:26.046Z"
  }
}

フォルダの作成時にタグを追加する

タグを使用すると、リソースのアノテーションを作成できます。タグはフォルダの作成時に追加できます。これを行うには、タグユーザーのロールが必要です。このロールに含まれる権限の詳細については、リソースのタグの管理をご覧ください。タグの Key-Value ペアの名前空間は、次のいずれかの方法でのみ追加できます。

gcloud

フォルダの作成時にタグを追加するには、次のコマンドを実行します。

  gcloud resource-manager folders create \
  --display-name=DISPLAY_NAME \
  --organization=ORGANIZATION_ID
  --tags=KEY_VALUE_PAIRS

次のように置き換えます。

  • DISPLAY_NAME はフォルダの表示名です。
  • ORGANIZATION_ID は親組織リソースの一意の識別子です。
  • KEY_VALUE_PAIRS は、リソースに割り当てることができる Key-Value ペアのカンマ区切りのリストです。カンマ区切りの Key-Value ペアの例は 123/environment=production, 456/create=testresource です。

API

次のスニペットは、フォルダを作成してタグを追加する JSON リクエストです。

  POST https://cloudresourcemanager.googleapis.com/v3/projects/
  Authorization: *************
  Content-Type: application/json

  {
    "display_name": "our-folder-456",
    "parent": "organizations/123",
    "tags": {
      "key": "123/environment"
      "value": "production"
    },
"tags": {
      "key": "123/costCenter"
      "value": "marketing"
    }
  }

フォルダに対するアクセス権を設定する

フォルダに対するアクセス権を設定するには、親レベルでフォルダ IAM 管理者またはフォルダ管理者のロールが必要です。

Console

  1. Google Cloud コンソールで [リソースの管理] ページを開きます。

    [リソースの管理] ページを開く

  2. 左上にある [組織] プルダウン リストをクリックして、組織リソースを選択します。

  3. 権限を変更するプロジェクトの横にあるチェックボックスをオンにします。

    1. 右側の [情報パネル] の [権限] で、追加するメンバーのメールアドレスを入力します。

    2. [ロールを選択] プルダウン リストで、メンバーに付与するロールを選択します。

    3. [追加] をクリックします。メンバーの新しいロールの追加または更新を確認する通知が表示されます。

gcloud

Google Cloud CLI や API を使用して、フォルダに対するアクセス権をプログラムで構成できます。

gcloud resource-manager folders \
  add-iam-policy-binding [FOLDER_ID] \
  --member=user:email1@example.com \
  --role=roles/resourcemanager.folderEditor
gcloud resource-manager folders \
  add-iam-policy-binding [FOLDER_ID] \
  --member=user:email1@example.com \
  --role=roles/resourcemanager.folderViewer

または

gcloud resource-manager folders \
  set-iam-policy [FOLDER_ID] [POLICY_FILE]

ここで

  • [FOLDER_ID] は、新しいフォルダの ID です。
  • [POLICY_FILE] は、フォルダのポリシー ファイルのパスです。

API

setIamPolicy メソッドは、フォルダにアクセス制御ポリシーを設定し、既存のポリシーを置き換えます。resource フィールドは、フォルダのリソース名です。例: folders/1234

 request_json= '{
   policy: {
     version: "1",
     bindings: [
       {
         role: "roles/resourcemanager.folderEditor",
         members: [
           "user:email1@example.com",
           "user:email2@example.com",
         ]
       }
     ]
   }
 }'

curl リクエスト:

   curl -X POST -H "Content-Type: application/json" \
   -H "Authorization: Bearer ${bearer_token}" \
   -d "$request_json" \
   https://cloudresourcemanager.googleapis.com/v3/[FOLDER_NAME]:setIamPolicy

ここで

  • [FOLDER_NAME] は、IAM ポリシーが設定されるフォルダの名前です。例: folders/123

フォルダ内にプロジェクトを作成する

フォルダ内にプロジェクトを作成するには、フォルダに対するプロジェクト作成者のロール(roles/resourcemanager.projectCreator)が必要です。このロールは親フォルダから継承できます。

Console

  1. Google Cloud コンソールで [リソースの管理] ページを開きます。

    Google Cloud コンソールを開く

  2. [リソースの管理] ページに移動
  3. ページの左上にある [組織] プルダウンから組織リソースを選択します。
  4. [プロジェクトを作成] をクリックします。
  5. プロジェクト名を入力します。
  6. [移動先] ボックスで [参照] をクリックして、プロジェクトを作成するフォルダを選択します。

  7. [作成] をクリックします。

gcloud

  gcloud projects create PROJECT_ID --folder FOLDER_ID

次のように置き換えます。

  • PROJECT_ID は、作成するプロジェクトの ID です。
  • FOLDER_ID は、プロジェクトが作成されるフォルダの ID です。

API

JSON リクエスト:

   request_json= '{
      name: DISPLAY_NAME, projectId: PROJECT_ID, parent: {id: PARENT_ID, type: PARENT_TYPE}
   }'

curl リクエスト:

   curl -X POST -H "Content-Type: application/json" \
   -H "Authorization: Bearer ${bearer_token}" \
   -d "$request_json" \
   https://cloudresourcemanager.googleapis.com/v3/projects

次のように置き換えます。

  • PROJECT_ID は、作成するプロジェクトの一意の識別子です。例: my-awesome-proj-123
  • DISPLAY_NAME は、作成するプロジェクトの表示名です。
  • PARENT_ID は作成する親の一意の識別子です。例: 123
  • PARENT_TYPE は、親のタイプ(folderorganization など)です。

フォルダ名やその他のリソース名には機密情報を含めないでください。フォルダや関連リソースを参照すると、フォルダ名やリソース名が公開されます。

フォルダへのプロジェクトの移動

プロジェクトをフォルダに移動する前に、ポリシーの影響を充分に考慮する必要があります。プロジェクト レベルで定義した Identity and Access Management ポリシーは、プロジェクトとともに移動しますが、親リソースから継承されたポリシーは移動しません。

プロジェクトを移動すると、Identity and Access Management ポリシーまたは直接接続されている組織のポリシーがすべてそのプロジェクトとともに移動します。ただし、リソース階層のプロジェクトは、親リソースから継承するポリシーの影響も受けます。特定のサービスを使用する権限をユーザーに付与する IAM ロールがプロジェクトから継承されている場合、エクスポート先で権限を継承しない限り、ユーザーはエクスポート先でそのサービスにアクセスできません。

たとえば、サービス アカウントでフォルダ A のユーザーにストレージのオブジェクト作成者のロールがバインドされているとします。サービス アカウントには、フォルダ A 内の任意のプロジェクトで Cloud Storage にデータをアップロードする権限があります。同じ継承された権限を持たないいずれかのプロジェクトをフォルダ B に移動すると、そのプロジェクトのサービス アカウントはデータのアップロード権限を失い、結果的にサービスが停止します。

移動元と移動先のフォルダで組織のポリシーが定義されている場合も同様です。IAM ポリシーと同じように、組織ポリシーも継承されます。したがって、移動元と移動先のフォルダで組織のポリシーが一致していなければなりません。

組織のポリシーの詳細については、組織ポリシー サービスの概要をご覧ください。

プロジェクトを移動するには、移動元と移動先の両方のフォルダでプロジェクト移動の IAM ロール(roles/resourcemanager.projectMover)が必要です。リソースがフォルダ内にない場合は、組織リソースでこのロールが必要です。

これらのロールにより、次の必要な権限が与えられます。

  • プロジェクトに対する resourcemanager.projects.update
  • リソースがフォルダにある場合: 移動元フォルダと宛先のresourcemanager.projects.move
  • リソースがフォルダ内にない場合: 組織リソースのresourcemanager.projects.move

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

Console

プロジェクトを移動するには:

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. ページの左上にある [組織] プルダウンから組織を選択します。

  3. プロジェクトの行をクリックし、リソースのリストからプロジェクトを選択します。プロジェクトの名前はクリックしないでください。クリックすると、プロジェクトの IAM ページに移動します。

  4. 行のオプション メニュー(3 つの点のアイコン)をクリックして、[移動] をクリックします。

  5. [参照] をクリックして、プロジェクトの移動先のフォルダを選択します。

  6. [移動] をクリックします。

gcloud

プロジェクトを移動するには、gcloud beta projects move コマンドを実行します。

gcloud beta projects move PROJECT_ID \
--DESTINATION_TYPE DESTINATION_ID

ここで

  • PROJECT_ID は、移行するプロジェクトの ID または番号です。

  • DESTINATION_TYPEorganizationfolder のどちらかです。

  • DESTINATION_ID は、プロジェクトの移動先となる組織リソースまたはフォルダの ID です。指定できるターゲットは 1 つのみです。

API

プロジェクトを移動するには、v3 projects.move メソッドを使用します。

リクエスト:

POST https://cloudresourcemanager.googleapis.com/v3/{name=PROJECT_NAME}:move
{
  "destinationParent": DESTINATION_PARENT
}

ここで

  • PROJECT_NAME は、更新するプロジェクトの名前です。例: projects/415104041262

  • DESTINATION_PARENT は、移動するプロジェクトの新しい親組織リソースまたはフォルダです。例: organizations/12345678901

成功した場合、リクエストによってオペレーションが返され、これを使用してプロジェクトの移動を追跡できます。

フォルダを別のフォルダに移動する

フォルダを別のフォルダに移動するには、移動元と移動先の両方のフォルダに対する resourcemanager.folders.move 権限が必要です。

Console

コンソールでフォルダを他のフォルダに移動するプロセスは、プロジェクトの移動と似ています。

  1. Google Cloud コンソールで [リソースの管理] ページを開きます。

    Google Cloud コンソールを開く

  2. ページの左上にある [組織] プルダウンから組織リソースを選択します。
  3. フォルダの行をクリックして、プロジェクトとフォルダのリストからフォルダを選択します。
  4. 行のオプション メニュー(3 つの点のアイコン)をクリックして、[移動] をクリックします。
  5. [参照] をクリックして、フォルダの移動先のフォルダを選択します。
  6. [移動] をクリックします。

gcloud

組織リソースの下にフォルダを移動するには、Google Cloud CLI で次のコマンドを実行します。

gcloud resource-manager folders move [FOLDER_ID] \
  --organization=[PARENT_ID]

フォルダを別のフォルダに移動するには:

gcloud resource-manager folders move [FOLDER_ID] \
  --folder=[PARENT_ID]

次のように置き換えます。

  • [FOLDER_ID] は、移動するフォルダの ID です。
  • [PARENT_ID] は、親組織リソースまたはフォルダの組織リソース ID またはフォルダ ID です。

API

JSON リクエスト:

request_json= '{
   destinationParent: "folders/[DESTINATION_FOLDER_ID]"
}'

フォルダを移動する curl リクエスト:

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token} \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/folders/[DISPLAY_NAME]:move

次のように置き換えます。

  • [DESTINATION_FOLDER_ID] は、別の移動するフォルダを入れるフォルダの ID です。例: 98765
  • [DISPLAY_NAME] は、移動するフォルダの表示名です。例: "My Awesome Folder"

フォルダ移動に対するレスポンス:

{
  "name": "operations/fm.1234567890",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "[DISPLAY_NAME]",
    "operationType": "MOVE"
  }
}

オペレーションを取得する curl リクエスト:

curl -H "Authorization: Bearer ${bearer_token}" \
https://cloudresourcemanager.googleapis.com/v3/operations/fm.1234567890

オペレーション取得に対するレスポンス:

{
  "name": "operations/fm.1234567890",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "[DISPLAY_NAME]",
    "operationType": "MOVE"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.Folder",
    "name": "folders/12345",
    "parent": "folders/98765",
    "displayName": "[DISPLAY_NAME]",
    "lifecycleState": "ACTIVE",
    "createTime": "2017-07-19T23:29:26.018Z",
    "updateTime": "2017-07-20T00:54:44.295Z"
  }
}

フォルダとプロジェクトを表示または一覧表示する

フォルダを表示または一覧表示するには、組織閲覧者フォルダ閲覧者のロールが必要です。

フォルダとプロジェクトを表示または一覧表示するには:

Console

  1. Google Cloud コンソールで [リソースの管理] ページを開きます。

    [リソースの管理] ページを開く

  2. ページの上部にあるプロジェクト選択ツールから、組織リソースを選択します。このリストには、作成したフォルダのみが表示されます。

  3. ツリーの任意の行を選択して、フォルダまたはプロジェクトにオペレーションを実行します。

  4. プロジェクトまたはフォルダの名前 / ID を入力して、リストをフィルタリングします。

gcloud

1 つのフォルダの詳細を取得するには、resource-manager folders describe コマンドを使用します。

gcloud resource-manager folders describe FOLDER_ID

FOLDER_ID は、表示するフォルダの ID に置き換えます。

組織リソースの子フォルダを一覧表示するには、resource-manager folders list コマンドを使用します。

gcloud resource-manager folders list \
  --organization ORGANIZATION_ID

ORGANIZATION_ID は、子フォルダのリストを表示する組織リソースの ID に置き換えます。

フォルダリソースの子フォルダを一覧表示するには、resource-manager folders list コマンドを使用します。

gcloud resource-manager folders list \
  --folder FOLDER_ID

FOLDER_ID は、子フォルダのリストを表示するフォルダ リソースの ID に置き換えます。

組織リソース、フォルダ リソース、またはフォルダ内のプロジェクトを一覧表示するには、filter 引数と projects list コマンドを使用します。

gcloud projects list \
  --filter=" parent.id: 'RESOURCE_ID' "

RESOURCE_ID は、子プロジェクトのリストを表示する組織リソースまたはフォルダリソースの ID に置き換えます。

API

フォルダを取得する curl リクエスト:

curl -X GET -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${bearer_token}" \
  https://cloudresourcemanager.googleapis.com/v3/[FOLDER_NAME]

FOLDER_NAME は、フォルダ名(folders/123 など)に置き換えます。

フォルダの一覧を取得する curl リクエスト:

curl -X GET -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${bearer_token}" \
  https://cloudresourcemanager.googleapis.com/v3/folders?parent=[PARENT_NAME]

PARENT_NAME は、フォルダを作成している親リソースの名前(organizations/123folders/123 など)に置き換えます。

Google Cloud CLI の使用

gcloud コマンドライン ツールと Folders API を操作するためのコマンドは、gcloud resource-manager folders コマンド グループにあります。

作成

新しいフォルダを作成するには、フォルダ名と、フォルダの作成先の組織リソースまたはフォルダの ID を指定するフラグを付けて、gcloud resource-manager folders create を使用します。

gcloud resource-manager folders create \
  --display-name="Super Fantastic Folder" \
  --organization=2518

Created Folder 245321.

表示

フォルダを表示するには、表示するフォルダの ID を指定して gcloud resource-manager folders describe を使用します。

gcloud resource-manager folders describe 245321
name: folders/245321
parent: organizations/2518
display_name: Super Fantastic Folder
lifecycle_state: ACTIVE
create_time: <timestamp info …>
update_time: <timestamp info …>

リスト

フォルダの下位フォルダを一覧表示するには、--folder フラグでフォルダ ID を渡し、gcloud resource-manager folders list を使用します。--organization フラグを使用して、組織リソースの最上位のフォルダを一覧表示することもできます。

gcloud resource-manager folders list --folder 245321
<table output showing the folders underneath the folder with the specified ID>

gcloud resource-manager folders list --organization 2518
<table output showing folders in this Organization but not in any folder>

削除がリクエストされたフォルダをリストに含めるには、--show-deleted フラグを追加します。

gcloud beta resource-manager folders list --folder 245321 --show-deleted
<table output showing all the folders including the delete requested ones underneath the folder with the specified ID>

--filter フラグで親フォルダまたは組織リソース ID を渡し、gcloud projects list コマンドを使用してプロジェクトを一覧表示できます。

gcloud projects list --filter=" parent.id: '245321' "
<table output showing the projects underneath the resource with the specified ID>

権限とフィルタが list コマンドとどのように相互作用するかについては、階層内のすべてのリソースの一覧表示を参照してください。

指定したクエリに一致するフォルダを検索するには、gcloud alpha resource-manager folders search を使用し、--query フラグで条件を渡します。検索範囲は、ユーザーが閲覧権限を持つすべてのフォルダです。

gcloud alpha resource-manager folders search --query="name:vij*"
<table output showing the folders with names starting from vij eg. vijeta, vijay-folder>

gcloud alpha resource-manager folders search --query="state:DELETE_REQUESTED"
<table output showing folders for which delete has been requested>

ユーザーが閲覧権限を持っているすべてのフォルダは、gcloud folders search コマンドで表示できます。

gcloud folders search
<table output showing all viewable folders>

更新

フォルダの更新は、gcloud resource-manager folders update コマンドで行えます。現在、フォルダの display_name フィールドのみ更新できます。

gcloud resource-manager folders update \
  --display-name="Mega Incredible Folder" 245321
name: folders/245321
parent: organizations/2518
display_name: Mega Incredible Folder
lifecycle_state: ACTIVE
create_time: <timestamp info …>
update_time: <recent timestamp info …>

削除

フォルダの削除と削除の取り消しはコマンドラインで行います。フォルダを削除するには、フォルダ管理者またはフォルダ閲覧者のロールが必要です。フォルダは空の場合のみ削除できます。

gcloud resource-manager folders delete 245321
name: folders/245321
parent: organizations/2518
display_name: Mega Incredible Folder
lifecycle_state: DELETE_REQUESTED
create_time: <timestamp info …>
update_time: <recent timestamp info …>

gcloud resource-manager folders undelete 245321
name: folders/245321
parent: organizations/2518
display_name: Mega Incredible Folder
lifecycle_state: ACTIVE
create_time: <timestamp info …>
update_time: <recent timestamp info …>

プロジェクトの移動

既存の gcloud projects create コマンドと gcloud projects move コマンドを使用すると、フォルダにプロジェクトを作成し、別のフォルダへプロジェクトを移動できます。フォルダの移動は、gcloud resource-manager folders move. でも行えます。

gcloud projects create --folder=245321 fancy-folder-project
project_id: fancy-folder-project
project_number: 905283
parent:
  type: "folder"
  id: 245321
other fields …

gcloud projects move --folder=245321 soon-to-be-fancy-project
project_id: soon-to-be-fancy-project
project_number: 428714
parent:
  type: "folder"
  id: 245321
other fields …

長時間実行オペレーション

フォルダの作成など、一部のフォルダ オペレーションでは処理に時間がかかる場合があります。マルチタスクを容易に実行できるように、一部の folders コマンドは非同期で実行できます。これらのコマンドで --async フラグを使用すると、処理が非同期で実行されます。これにより、オペレーションの完了を待たずに、長時間実行オペレーションをすぐに終了することができます。gcloud beta resource-manager operations describe コマンドを使用すると、このオペレーションを自分でポーリングできます。現時点では、非同期で実行できるコマンドは folders createfolders move のみです。

gcloud resource-manager folders create \
  --display-name="Awe-Inspiring Async Folder" \
  --organization=2518 \
  --async

name: operations/fc.8572
metadata:
  operation_type: CREATE
  display_name: Awe-Inspiring Async Folder
  destination_parent: organizations/2518
done: false

[wait for some time …]

gcloud beta resource-manager operations describe fc.8572
name: operations/fc.8572
metadata:
  operation_type: CREATE
  display_name: Awe-Inspiring Async Folder
  destination_parent: organizations/2518
done: true
response:
  name: folders/6428
  parent: organizations/2518
  display_name: Awe-Inspiring Async Folder
  lifecycle_state: ACTIVE
  create_time: <recent timestamp info …>
  update_time: <recent timestamp info …>