On September 15, 2026, all Cloud Composer 1 versions and versions 2.0.x of Cloud Composer 2 will reach their planned end of life. You will not be able to use environments with these versions. We recommend planning migration to Cloud Composer 3. Cloud Composer 2 versions 2.1.x and later are still supported and are not impacted by this change.
You can specify a custom Cloud Storage bucket as an environment's bucket
when you create an environment. Your environment uses this
bucket in the same way as the default environment's bucket,
and the default environment's bucket is not created.
With a custom bucket, you can:
Use a bucket configuration that is compliant with your requirements.
Use a continuously existing bucket for periodic development or testing
purposes.
Reuse an existing bucket from a previous environment and keep CI/CD and data
integrations.
Delete and re-create an environment without the need to transfer data between
buckets.
Pre-populate the custom bucket with required data, such as your DAG files,
and then create an environment.
Before you begin
This feature is supported starting from Cloud Composer
version 2.5.0. Earlier versions of Cloud Composer 2 do not support this
feature.
The custom bucket must be located in the same region as the environment.
Multi-region and dual-region buckets are not supported.
The custom bucket and the environment must be in the same project.
It is not possible to use the same custom bucket with several environments at
the same time. Cloud Composer generates an error if the
specified bucket is already used by another environment. It is possible to
delete an environment and then use the same bucket for another environment.
If you enabled
saving logs to the environment's bucket, then if
you delete an environment and then use the same bucket for another
environment, the new environment does not display Airflow task logs from
the previous environment in Airflow UI. The logs remain in the bucket, but
the new environment does not associate them with any DAG runs.
Cloud Composer doesn't add any missing IAM
permissions to the Cloud Storage bucket when it is used to create an
environment. Make sure that the environment's service account has
permissions from the Composer Worker role on the bucket.
Create an environment with a custom bucket
Console
To specify a custom Cloud Storage bucket when you create an
environment:
On the Create environment page, in the Advanced configuration
section, click Show advanced configuration.
Select Custom bucket.
In the Bucket name field, specify or select a bucket.
gcloud
When you create an environment, the --storage-bucket argument specifies the
environment's custom bucket.
LOCATION: the region where the environment is located.
ENVIRONMENT_NAME: the name of your environment.
CUSTOM_STORAGE_BUCKET: the name of a Cloud Storage bucket
(without the gs:// prefix).
Example:
// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments{"name":"projects/example-project/locations/us-central1/environments/example-environment","storageConfig":{"bucket":"us-central1-example-bucket"}}
Terraform
When you create an environment, the bucket field in the
storage_config block specifies the environment's custom bucket.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-25 UTC."],[[["\u003cp\u003eCloud Composer 2 allows specifying a custom Cloud Storage bucket for an environment, which is used in place of the default environment's bucket, eliminating the creation of the default.\u003c/p\u003e\n"],["\u003cp\u003eUsing a custom bucket provides advantages such as compliance with specific bucket configurations, reusing existing buckets, and avoiding data transfer when deleting and recreating environments.\u003c/p\u003e\n"],["\u003cp\u003eThe custom bucket must meet specific requirements including being in the same region and project as the environment, using Standard storage class, and having no retention policies or locks.\u003c/p\u003e\n"],["\u003cp\u003eCreating an environment with a custom bucket can be done through the console, \u003ccode\u003egcloud\u003c/code\u003e command-line tool, API, or Terraform, each requiring the bucket name to be specified during environment creation.\u003c/p\u003e\n"],["\u003cp\u003eIt's important to know that Cloud Composer will not alter the encryption settings for a custom bucket, so it must be manually encrypted if needed, and that you must add the Composer worker role permissions to the bucket for the service account.\u003c/p\u003e\n"]]],[],null,["# Use a custom environment's bucket\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\n[Cloud Composer 3](/composer/docs/composer-3/custom-bucket \"View this page for Cloud Composer 3\") \\| **Cloud Composer 2** \\| Cloud Composer 1\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nYou can specify a custom Cloud Storage bucket as an environment's bucket\nwhen you create an environment. Your environment uses this\nbucket in the same way as the [default environment's bucket](/composer/docs/composer-2/cloud-storage),\nand the default environment's bucket is not created.\n\nWith a custom bucket, you can:\n\n- Use a bucket configuration that is compliant with your requirements.\n- Use a continuously existing bucket for periodic development or testing purposes.\n- Reuse an existing bucket from a previous environment and keep CI/CD and data integrations.\n- Delete and re-create an environment without the need to transfer data between buckets.\n- Pre-populate the custom bucket with required data, such as your DAG files, and then create an environment.\n\nBefore you begin\n----------------\n\n- This feature is supported starting from Cloud Composer version 2.5.0. Earlier versions of Cloud Composer 2 do not support this feature.\n\n\u003c!-- --\u003e\n\n- The custom bucket must be located in the same region as the environment. Multi-region and dual-region buckets are not supported.\n- The custom bucket and the environment must be in the same project.\n- The custom bucket must have the [Standard storage class](/storage/docs/storage-classes).\n- The custom bucket must have no [retention policies or retention policy locks](/storage/docs/bucket-lock) applied to it.\n- It is not possible to use the same custom bucket with several environments at\n the same time. Cloud Composer generates an error if the\n specified bucket is already used by another environment. It is possible to\n delete an environment and then use the same bucket for another environment.\n\n- If you enabled\n [saving logs to the environment's bucket](/composer/docs/composer-2/enable-saving-logs-to-environment-bucket), then if\n you delete an environment and then use the same bucket for another\n environment, the new environment does not display Airflow task logs from\n the previous environment in Airflow UI. The logs remain in the bucket, but\n the new environment does not associate them with any DAG runs.\n\n- Cloud Composer doesn't add any missing IAM\n permissions to the Cloud Storage bucket when it is used to create an\n environment. Make sure that the environment's service account has\n [permissions from the Composer Worker role](/composer/docs/composer-2/access-control) on the bucket.\n\n| **Warning:** Cloud Composer does not alter the encryption settings of a custom bucket and thus does not [encrypt it with a CMEK key](/composer/docs/composer-2/configure-cmek-encryption) (even if the project's policies require encryption). Specifically, the custom bucket's encryption is not changed if your environment uses CMEK encryption. Your custom bucket follows policies of the project that it belongs to. You can [manually encrypt](/storage/docs/encryption/using-customer-managed-keys) the environment's bucket with CMEK keys before you create an environment.\n\nCreate an environment with a custom bucket\n------------------------------------------\n\n### Console\n\nTo specify a custom Cloud Storage bucket when you create an\nenvironment:\n\n1. On the **Create environment** page, in the **Advanced configuration** section, click **Show advanced configuration**.\n2. Select **Custom bucket**.\n3. In the **Bucket name** field, specify or select a bucket.\n\n### gcloud\n\nWhen you create an environment, the `--storage-bucket` argument specifies the\nenvironment's custom bucket. \n\n gcloud composer environments create \u003cvar translate=\"no\"\u003eENVIRONMENT_NAME\u003c/var\u003e \\\n --location \u003cvar translate=\"no\"\u003eLOCATION\u003c/var\u003e \\\n --storage-bucket \u003cvar translate=\"no\"\u003eCUSTOM_STORAGE_BUCKET\u003c/var\u003e\n\nReplace the following:\n\n- `ENVIRONMENT_NAME`: the name of your environment.\n- `LOCATION`: the region where the environment is located.\n- `CUSTOM_STORAGE_BUCKET`: the name of a Cloud Storage bucket. You can also specify the bucket URI (with the `gs://` prefix).\n\nExample: \n\n gcloud composer environments create example-environment \\\n --location us-cental1 \\\n --storage-bucket us-central1-example-bucket\n\n### API\n\nWhen you create an environment, in the [Environment](/composer/docs/reference/rest/v1/projects.locations.environments#Environment)\n\\\u003e [StorageConfig](/composer/docs/reference/rest/v1/projects.locations.environments#StorageConfig) resource, specify\na custom bucket for your environment. \n\n {\n \"name\": \"projects/\u003cvar translate=\"no\"\u003ePROJECT_ID\u003c/var\u003e/locations/\u003cvar translate=\"no\"\u003eLOCATION\u003c/var\u003e/environments/\u003cvar translate=\"no\"\u003eENVIRONMENT_NAME\u003c/var\u003e\",\n \"storageConfig\": {\n \"bucket\": \"\u003cvar translate=\"no\"\u003eCUSTOM_STORAGE_BUCKET\u003c/var\u003e\"\n }\n }\n\nReplace the following:\n\n- `PROJECT_ID`: the [Project ID](/resource-manager/docs/creating-managing-projects).\n- `LOCATION`: the region where the environment is located.\n- `ENVIRONMENT_NAME`: the name of your environment.\n- `CUSTOM_STORAGE_BUCKET`: the name of a Cloud Storage bucket (without the `gs://` prefix).\n\nExample: \n\n // POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments\n\n {\n \"name\": \"projects/example-project/locations/us-central1/environments/example-environment\",\n \"storageConfig\": {\n \"bucket\": \"us-central1-example-bucket\"\n }\n }\n\n### Terraform\n\nWhen you create an environment, the `bucket` field in the\n`storage_config` block specifies the environment's custom bucket.\n**Caution:** If you change the value of this field for an existing environment, Terraform deletes the existing environment and creates it again. \n\n resource \"google_composer_environment\" \"example\" {\n provider = google-beta\n name = \"\u003cvar translate=\"no\"\u003eENVIRONMENT_NAME\u003c/var\u003e\"\n region = \"\u003cvar translate=\"no\"\u003eLOCATION\u003c/var\u003e\"\n\n storage_config {\n\n bucket = \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-err\"\u003eCUSTOM_STORAGE_BUCKET\u003c/span\u003e\u003c/var\u003e\n\n }\n }\n\nReplace the following:\n\n- `ENVIRONMENT_NAME`: the name of your environment.\n- `LOCATION`: the region where the environment is located.\n- `CUSTOM_STORAGE_BUCKET`: the name of a Cloud Storage bucket. You can also specify the bucket URI (with the `gs://` prefix).\n\nExample: \n\n resource \"google_composer_environment\" \"example\" {\n provider = google-beta\n name = \"example-environment\"\n region = \"us-central1\"\n\n storage_config {\n\n bucket = \"gs://us-central1-example-bucket\"\n\n }\n }\n\nWhat's next\n-----------\n\n- [About the environment's bucket](/composer/docs/composer-2/cloud-storage)\n- [CMEK in Cloud Composer](/composer/docs/composer-2/configure-cmek-encryption)\n- [Create environments](/composer/docs/composer-2/create-environments)"]]