---
# ----------------------------------------------------------------------------
#
#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
#
# ----------------------------------------------------------------------------
#
#     This file is automatically generated by Magic Modules and manual
#     changes will be clobbered when the file is regenerated.
#
#     Please read more about how to change this file in
#     .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Firebase Hosting"
description: |-
  A `Version` is a configuration which determine how a site is displayed.
---

# google\_firebase\_hosting\_version

A `Version` is a configuration which determine how a site is displayed. Static files are not supported at the moment.

~> **Warning:** This resource is in beta, and should be used with the terraform-provider-google-beta provider.
See [Provider Versions](https://terraform.io/docs/providers/google/guides/provider_versions.html) for more details on beta resources.

To get more information about Version, see:

* [API documentation](https://firebase.google.com/docs/reference/hosting/rest/v1beta1/sites.versions)
* How-to Guides
    * [Official Documentation](https://firebase.google.com/docs/hosting)

## Example Usage - Firebasehosting Version Redirect


```hcl
resource "google_firebase_hosting_site" "default" {
  provider = google-beta
  project  = "my-project-name"
  site_id  = "site-id"
}

resource "google_firebase_hosting_version" "default" {
  provider = google-beta
  site_id  = google_firebase_hosting_site.default.site_id
  config {
    redirects {
      glob = "/google/**"
      status_code = 302
      location = "https://www.google.com"
    }
  }
}

resource "google_firebase_hosting_release" "default" {
  provider     = google-beta
  site_id      = google_firebase_hosting_site.default.site_id
  version_name = google_firebase_hosting_version.default.name
  message      = "Redirect to Google"
}
```
## Example Usage - Firebasehosting Version Cloud Run


```hcl
resource "google_firebase_hosting_site" "default" {
  provider = google-beta
  project  = "my-project-name"
  site_id  = "site-id"
}

resource "google_cloud_run_v2_service" "default" {
  provider = google-beta
  project  = "my-project-name"
  name     = "cloud-run-service-via-hosting"
  location = "us-central1"

  # Warning: allows all public traffic
  ingress = "INGRESS_TRAFFIC_ALL"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
  }
}

resource "google_firebase_hosting_version" "default" {
  provider = google-beta
  site_id  = google_firebase_hosting_site.default.site_id
  config {
    rewrites {
      glob = "/hello/**"
      run {
        service_id = google_cloud_run_v2_service.default.name
        region = google_cloud_run_v2_service.default.location
      }
    }
  }
}

resource "google_firebase_hosting_release" "default" {
  provider     = google-beta
  site_id      = google_firebase_hosting_site.default.site_id
  version_name = google_firebase_hosting_version.default.name
  message      = "Cloud Run Integration"
}
```
## Example Usage - Firebasehosting Version Cloud Functions


```hcl
resource "google_firebase_hosting_site" "default" {
  provider = google-beta
  project  = "my-project-name"
  site_id  = "site-id"
}

resource "google_storage_bucket" "bucket" {
  provider = google-beta
  project  = "my-project-name"
  name     = "site-id-function-source"  # Every bucket name must be globally unique
  location = "US"
  uniform_bucket_level_access = true
}

resource "google_storage_bucket_object" "object" {
  provider = google-beta
  name   = "function-source.zip"
  bucket = google_storage_bucket.bucket.name
  source = "function-source.zip"  # Add path to the zipped function source code
}

resource "google_cloudfunctions_function" "function" {
  provider = google-beta
  project  = "my-project-name"

  name        = "cloud-function-via-hosting"
  description = "A Cloud Function connected to Firebase Hosing"
  runtime     = "nodejs16"

  available_memory_mb   = 128
  source_archive_bucket = google_storage_bucket.bucket.name
  source_archive_object = google_storage_bucket_object.object.name
  trigger_http          = true
  entry_point           = "helloHttp"
}

resource "google_firebase_hosting_version" "default" {
  provider = google-beta
  site_id  = google_firebase_hosting_site.default.site_id
  config {
    rewrites {
      glob = "/hello/**"
      function = google_cloudfunctions_function.function.name
    }
  }
}

resource "google_firebase_hosting_release" "default" {
  provider     = google-beta
  site_id      = google_firebase_hosting_site.default.site_id
  version_name = google_firebase_hosting_version.default.name
  message      = "Cloud Functions Integration"
}
```

## Argument Reference

The following arguments are supported:


* `site_id` -
  (Required)
  Required. The ID of the site in which to create this Version.


- - -


* `config` -
  (Optional)
  The configuration for the behavior of the site. This configuration exists in the `firebase.json` file.
  Structure is [documented below](#nested_config).


<a name="nested_config"></a>The `config` block supports:

* `rewrites` -
  (Optional)
  An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the
  request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
  Structure is [documented below](#nested_rewrites).

* `redirects` -
  (Optional)
  An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path,
  triggers Hosting to respond with a redirect to the specified destination path.
  Structure is [documented below](#nested_redirects).


<a name="nested_rewrites"></a>The `rewrites` block supports:

* `glob` -
  (Optional)
  The user-supplied glob to match against the request URL path.

* `regex` -
  (Optional)
  The user-supplied RE2 regular expression to match against the request URL path.

* `function` -
  (Optional)
  The function to proxy requests to. Must match the exported function name exactly.

* `run` -
  (Optional)
  The request will be forwarded to Cloud Run.
  Structure is [documented below](#nested_run).


<a name="nested_run"></a>The `run` block supports:

* `service_id` -
  (Required)
  User-defined ID of the Cloud Run service.

* `region` -
  (Optional)
  Optional. User-provided region where the Cloud Run service is hosted. Defaults to `us-central1` if not supplied.

<a name="nested_redirects"></a>The `redirects` block supports:

* `glob` -
  (Optional)
  The user-supplied glob to match against the request URL path.

* `regex` -
  (Optional)
  The user-supplied RE2 regular expression to match against the request URL path.

* `status_code` -
  (Required)
  The status HTTP code to return in the response. It must be a valid 3xx status code.

* `location` -
  (Required)
  The value to put in the HTTP location header of the response.
  The location can contain capture group values from the pattern using a : prefix to identify
  the segment and an optional * to capture the rest of the URL. For example:
  ```hcl
  redirects {
    glob = "/:capture*"
    status_code = 302
    location = "https://example.com/foo/:capture"
  }
  ```

## Attributes Reference

In addition to the arguments listed above, the following computed attributes are exported:

* `id` - an identifier for the resource with format `sites/{{site_id}}/versions/{{version_id}}`

* `name` -
  The fully-qualified resource name for the version, in the format:
  sites/SITE_ID/versions/VERSION_ID

* `version_id` -
  The ID for the version as in sites/SITE_ID/versions/VERSION_ID


## Timeouts

This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:

- `create` - Default is 20 minutes.
- `delete` - Default is 20 minutes.

## Import


Version can be imported using any of these accepted formats:

* `sites/{{site_id}}/versions/{{version_id}}`
* `{{site_id}}/{{version_id}}`


In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Version using one of the formats above. For example:

```tf
import {
  id = "sites/{{site_id}}/versions/{{version_id}}"
  to = google_firebase_hosting_version.default
}
```

When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), Version can be imported using one of the formats above. For example:

```
$ terraform import google_firebase_hosting_version.default sites/{{site_id}}/versions/{{version_id}}
$ terraform import google_firebase_hosting_version.default {{site_id}}/{{version_id}}
```
