blob: 7ea672c98688605f75f1803ff5f5a7ca2d73f40f [file] [log] [blame] [edit]
---
# ----------------------------------------------------------------------------
#
# *** 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: "App Hub"
description: |-
Service is a network/api interface that exposes some functionality to clients for consumption over the network.
---
# google_apphub_service
Service is a network/api interface that exposes some functionality to clients for consumption over the network. Service typically has one or more Workloads behind it. It registers identified service to the Application.
## Example Usage - Apphub Service Basic
```hcl
resource "google_apphub_application" "application" {
location = "us-central1"
application_id = "example-application-1"
scope {
type = "REGIONAL"
}
}
resource "google_project" "service_project" {
project_id ="project-1"
name = "Service Project"
org_id = "123456789"
billing_account = "000000-0000000-0000000-000000"
deletion_policy = "DELETE"
}
# Enable Compute API
resource "google_project_service" "compute_service_project" {
project = google_project.service_project.project_id
service = "compute.googleapis.com"
}
resource "time_sleep" "wait_120s" {
depends_on = [google_project_service.compute_service_project]
create_duration = "120s"
}
resource "google_apphub_service_project_attachment" "service_project_attachment" {
service_project_attachment_id = google_project.service_project.project_id
depends_on = [time_sleep.wait_120s]
}
# discovered service block
data "google_apphub_discovered_service" "catalog-service" {
provider = google
location = "us-central1"
service_uri = "//compute.googleapis.com/${google_compute_forwarding_rule.forwarding_rule.id}"
depends_on = [google_apphub_service_project_attachment.service_project_attachment, time_sleep.wait_120s_for_resource_ingestion]
}
resource "time_sleep" "wait_120s_for_resource_ingestion" {
depends_on = [google_compute_forwarding_rule.forwarding_rule]
create_duration = "120s"
}
resource "google_apphub_service" "example" {
location = "us-central1"
application_id = google_apphub_application.application.application_id
service_id = google_compute_forwarding_rule.forwarding_rule.name
discovered_service = data.google_apphub_discovered_service.catalog-service.name
}
#creates service
# VPC network
resource "google_compute_network" "ilb_network" {
name = "l7-ilb-network"
project = google_project.service_project.project_id
auto_create_subnetworks = false
depends_on = [time_sleep.wait_120s]
}
# backend subnet
resource "google_compute_subnetwork" "ilb_subnet" {
name = "l7-ilb-subnet"
project = google_project.service_project.project_id
ip_cidr_range = "10.0.1.0/24"
region = "us-central1"
network = google_compute_network.ilb_network.id
}
# forwarding rule
resource "google_compute_forwarding_rule" "forwarding_rule" {
name ="l7-ilb-forwarding-rule"
project = google_project.service_project.project_id
region = "us-central1"
ip_version = "IPV4"
load_balancing_scheme = "INTERNAL"
all_ports = true
backend_service = google_compute_region_backend_service.backend.id
network = google_compute_network.ilb_network.id
subnetwork = google_compute_subnetwork.ilb_subnet.id
}
# backend service
resource "google_compute_region_backend_service" "backend" {
name = "l7-ilb-backend-subnet"
project = google_project.service_project.project_id
region = "us-central1"
health_checks = [google_compute_health_check.default.id]
}
# health check
resource "google_compute_health_check" "default" {
name = "l7-ilb-hc"
project = google_project.service_project.project_id
check_interval_sec = 1
timeout_sec = 1
tcp_health_check {
port = "80"
}
depends_on = [time_sleep.wait_120s]
}
```
## Example Usage - Apphub Service Full
```hcl
resource "google_apphub_application" "application" {
location = "us-central1"
application_id = "example-application-1"
scope {
type = "REGIONAL"
}
}
resource "google_project" "service_project" {
project_id ="project-1"
name = "Service Project"
org_id = "123456789"
billing_account = "000000-0000000-0000000-000000"
deletion_policy = "DELETE"
}
# Enable Compute API
resource "google_project_service" "compute_service_project" {
project = google_project.service_project.project_id
service = "compute.googleapis.com"
}
resource "time_sleep" "wait_120s" {
depends_on = [google_project_service.compute_service_project]
create_duration = "120s"
}
resource "google_apphub_service_project_attachment" "service_project_attachment" {
service_project_attachment_id = google_project.service_project.project_id
depends_on = [time_sleep.wait_120s]
}
# discovered service block
data "google_apphub_discovered_service" "catalog-service" {
provider = google
location = "us-central1"
service_uri = "//compute.googleapis.com/${google_compute_forwarding_rule.forwarding_rule.id}"
depends_on = [google_apphub_service_project_attachment.service_project_attachment, time_sleep.wait_120s_for_resource_ingestion]
}
resource "time_sleep" "wait_120s_for_resource_ingestion" {
depends_on = [google_compute_forwarding_rule.forwarding_rule]
create_duration = "120s"
}
resource "google_apphub_service" "example" {
location = "us-central1"
application_id = google_apphub_application.application.application_id
service_id = google_compute_forwarding_rule.forwarding_rule.name
discovered_service = data.google_apphub_discovered_service.catalog-service.name
display_name = "Example Service Full"
description = "Register service for testing"
attributes {
environment {
type = "STAGING"
}
criticality {
type = "MISSION_CRITICAL"
}
business_owners {
display_name = "Alice"
email = "alice@google.com"
}
developer_owners {
display_name = "Bob"
email = "bob@google.com"
}
operator_owners {
display_name = "Charlie"
email = "charlie@google.com"
}
}
}
#creates service
# VPC network
resource "google_compute_network" "ilb_network" {
name = "l7-ilb-network"
project = google_project.service_project.project_id
auto_create_subnetworks = false
depends_on = [time_sleep.wait_120s]
}
# backend subnet
resource "google_compute_subnetwork" "ilb_subnet" {
name = "l7-ilb-subnet"
project = google_project.service_project.project_id
ip_cidr_range = "10.0.1.0/24"
region = "us-central1"
network = google_compute_network.ilb_network.id
}
# forwarding rule
resource "google_compute_forwarding_rule" "forwarding_rule" {
name ="l7-ilb-forwarding-rule"
project = google_project.service_project.project_id
region = "us-central1"
ip_version = "IPV4"
load_balancing_scheme = "INTERNAL"
all_ports = true
backend_service = google_compute_region_backend_service.backend.id
network = google_compute_network.ilb_network.id
subnetwork = google_compute_subnetwork.ilb_subnet.id
}
# backend service
resource "google_compute_region_backend_service" "backend" {
name = "l7-ilb-backend-subnet"
project = google_project.service_project.project_id
region = "us-central1"
health_checks = [google_compute_health_check.default.id]
}
# health check
resource "google_compute_health_check" "default" {
name = "l7-ilb-hc"
project = google_project.service_project.project_id
check_interval_sec = 1
timeout_sec = 1
tcp_health_check {
port = "80"
}
depends_on = [time_sleep.wait_120s]
}
```
## Argument Reference
The following arguments are supported:
* `discovered_service` -
(Required)
Immutable. The resource name of the original discovered service.
* `location` -
(Required)
Part of `parent`. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID}
* `application_id` -
(Required)
Part of `parent`. Full resource name of a parent Application. Example: projects/{HOST_PROJECT_ID}/locations/{LOCATION}/applications/{APPLICATION_ID}
* `service_id` -
(Required)
The Service identifier.
- - -
* `display_name` -
(Optional)
User-defined name for the Service.
* `description` -
(Optional)
User-defined description of a Service.
* `attributes` -
(Optional)
Consumer provided attributes.
Structure is [documented below](#nested_attributes).
* `project` - (Optional) The ID of the project in which the resource belongs.
If it is not provided, the provider project is used.
<a name="nested_attributes"></a>The `attributes` block supports:
* `criticality` -
(Optional)
Criticality of the Application, Service, or Workload
Structure is [documented below](#nested_criticality).
* `environment` -
(Optional)
Environment of the Application, Service, or Workload
Structure is [documented below](#nested_environment).
* `developer_owners` -
(Optional)
Developer team that owns development and coding.
Structure is [documented below](#nested_developer_owners).
* `operator_owners` -
(Optional)
Operator team that ensures runtime and operations.
Structure is [documented below](#nested_operator_owners).
* `business_owners` -
(Optional)
Business team that ensures user needs are met and value is delivered
Structure is [documented below](#nested_business_owners).
<a name="nested_criticality"></a>The `criticality` block supports:
* `type` -
(Required)
Criticality type.
Possible values are: `MISSION_CRITICAL`, `HIGH`, `MEDIUM`, `LOW`.
<a name="nested_environment"></a>The `environment` block supports:
* `type` -
(Required)
Environment type.
Possible values are: `PRODUCTION`, `STAGING`, `TEST`, `DEVELOPMENT`.
<a name="nested_developer_owners"></a>The `developer_owners` block supports:
* `display_name` -
(Optional)
Contact's name.
* `email` -
(Required)
Required. Email address of the contacts.
<a name="nested_operator_owners"></a>The `operator_owners` block supports:
* `display_name` -
(Optional)
Contact's name.
* `email` -
(Required)
Required. Email address of the contacts.
<a name="nested_business_owners"></a>The `business_owners` block supports:
* `display_name` -
(Optional)
Contact's name.
* `email` -
(Required)
Required. Email address of the contacts.
## Attributes Reference
In addition to the arguments listed above, the following computed attributes are exported:
* `id` - an identifier for the resource with format `projects/{{project}}/locations/{{location}}/applications/{{application_id}}/services/{{service_id}}`
* `name` -
Identifier. The resource name of a Service. Format:
"projects/{host-project-id}/locations/{location}/applications/{application-id}/services/{service-id}"
* `service_reference` -
Reference to an underlying networking resource that can comprise a Service.
Structure is [documented below](#nested_service_reference).
* `service_properties` -
Properties of an underlying cloud resource that can comprise a Service.
Structure is [documented below](#nested_service_properties).
* `create_time` -
Output only. Create time.
* `update_time` -
Output only. Update time.
* `uid` -
Output only. A universally unique identifier (UUID) for the `Service` in the UUID4
format.
* `state` -
Output only. Service state. Possible values: STATE_UNSPECIFIED CREATING ACTIVE DELETING DETACHED
<a name="nested_service_reference"></a>The `service_reference` block contains:
* `uri` -
(Output)
Output only. The underlying resource URI (For example, URI of Forwarding Rule, URL Map,
and Backend Service).
<a name="nested_service_properties"></a>The `service_properties` block contains:
* `gcp_project` -
(Output)
Output only. The service project identifier that the underlying cloud resource resides in.
* `location` -
(Output)
Output only. The location that the underlying resource resides in, for example, us-west1.
* `zone` -
(Output)
Output only. The location that the underlying resource resides in if it is zonal, for example, us-west1-a).
## 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.
- `update` - Default is 20 minutes.
- `delete` - Default is 20 minutes.
## Import
Service can be imported using any of these accepted formats:
* `projects/{{project}}/locations/{{location}}/applications/{{application_id}}/services/{{service_id}}`
* `{{project}}/{{location}}/{{application_id}}/{{service_id}}`
* `{{location}}/{{application_id}}/{{service_id}}`
In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Service using one of the formats above. For example:
```tf
import {
id = "projects/{{project}}/locations/{{location}}/applications/{{application_id}}/services/{{service_id}}"
to = google_apphub_service.default
}
```
When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), Service can be imported using one of the formats above. For example:
```
$ terraform import google_apphub_service.default projects/{{project}}/locations/{{location}}/applications/{{application_id}}/services/{{service_id}}
$ terraform import google_apphub_service.default {{project}}/{{location}}/{{application_id}}/{{service_id}}
$ terraform import google_apphub_service.default {{location}}/{{application_id}}/{{service_id}}
```
## User Project Overrides
This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).