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

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"
}

# 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

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"
}

# 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:


The attributes block supports:

The criticality block supports:

The environment block supports:

The developer_owners block supports:

The operator_owners block supports:

The business_owners block supports:

Attributes Reference

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

The service_reference block contains:

The service_properties block contains:

Timeouts

This resource provides the following Timeouts configuration options:

Import

Service can be imported using any of these accepted formats:

In Terraform v1.5.0 and later, use an import block to import Service using one of the formats above. For example:

import {
  id = "projects/{{project}}/locations/{{location}}/applications/{{application_id}}/services/{{service_id}}"
  to = google_apphub_service.default
}

When using the terraform import command, 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.