# Looker Core module This module manages the creation of a [Looker Core instance](https://cloud.google.com/looker/docs/looker-core). This module accepts Oauth client ID and secret in the input variable `oauth_config`. You must specify the `client_id` and `client_secret` strings for a pre-existing oauth client. You can [set up an oauth client and credentials](https://cloud.google.com/looker/docs/looker-core-create-oauth) manually. > [!WARNING] > Please be aware that, at the time of this writing, deleting the looker core instance via terraform is not possible due > to . The work-around is to delete the instance from the > console (or gcloud with force option) and remove the corresponding resource from the terraform state. - [Examples](#examples) - [Simple example](#simple-example) - [Looker Core private instance with PSA](#looker-core-private-instance-with-psa) - [Looker Core with PSC](#looker-core-with-psc) - [Looker Core full example](#looker-core-full-example) - [Variables](#variables) - [Outputs](#outputs) ## Examples ### Simple example This example shows how to set up a public Looker Core instance. ```hcl module "looker" { source = "./fabric/modules/looker-core" project_id = var.project_id region = var.region name = "looker" network_config = { public = true } oauth_config = { client_id = "xxxxxxxxx" client_secret = "xxxxxxxx" } } # tftest modules=1 resources=1 inventory=simple.yaml ``` ### Looker Core private instance with PSA ```hcl module "project" { source = "./fabric/modules/project" billing_account = var.billing_account_id parent = var.folder_id name = "looker" prefix = var.prefix services = [ "servicenetworking.googleapis.com", "looker.googleapis.com", ] } module "vpc" { source = "./fabric/modules/net-vpc" project_id = module.project.project_id name = "my-network" psa_configs = [ { ranges = { looker = "10.60.0.0/16" } } ] } module "looker" { source = "./fabric/modules/looker-core" project_id = module.project.project_id region = var.region name = "looker" network_config = { psa_config = { network = module.vpc.id } } oauth_config = { client_id = "xxxxxxxxx" client_secret = "xxxxxxxx" } platform_edition = "LOOKER_CORE_ENTERPRISE_ANNUAL" } # tftest modules=3 resources=15 inventory=psa.yaml ``` ### Looker Core with PSC ```hcl module "looker" { source = "./fabric/modules/looker-core" project_id = var.project_id region = var.region name = "looker-psc" network_config = { psc_config = { allowed_vpcs = ["projects/test-project/global/networks/test"] } } oauth_config = { client_id = "xxxxxxxxx" client_secret = "xxxxxxxx" } platform_edition = "LOOKER_CORE_ENTERPRISE_ANNUAL" } # tftest inventory=psc.yaml ``` ### Looker Core full example ```hcl module "project" { source = "./fabric/modules/project" billing_account = var.billing_account_id parent = var.folder_id name = "looker" prefix = var.prefix services = [ "cloudkms.googleapis.com", "iap.googleapis.com", "looker.googleapis.com", "servicenetworking.googleapis.com" ] } module "vpc" { source = "./fabric/modules/net-vpc" project_id = module.project.project_id name = "my-network" psa_configs = [ { ranges = { looker = "10.60.0.0/16" } } ] } module "kms" { source = "./fabric/modules/kms" project_id = module.project.project_id keyring = { location = var.region name = "keyring" } keys = { "key-regional" = { } } iam = { "roles/cloudkms.cryptoKeyEncrypterDecrypter" = [ module.project.service_agents.looker.iam_email ] } } module "looker" { source = "./fabric/modules/looker-core" project_id = module.project.project_id region = var.region name = "looker" admin_settings = { allowed_email_domains = ["google.com"] } encryption_config = { kms_key_name = module.kms.keys.key-regional.id } network_config = { psa_config = { network = module.vpc.id } } oauth_config = { client_id = "xxxxxxxxx" client_secret = "xxxxxxxx" } platform_edition = "LOOKER_CORE_ENTERPRISE_ANNUAL" } # tftest modules=4 resources=23 inventory=full.yaml ``` ## Variables | name | description | type | required | default | |---|---|:---:|:---:|:---:| | [name](variables.tf#L113) | Name of the looker core instance. | string | ✓ | | | [network_config](variables.tf#L118) | Network configuration for cluster and instance. Only one between psa_config, psc_config and public can be used. | object({…}) | ✓ | | | [oauth_config](variables.tf#L147) | Looker Core Oauth config. | object({…}) | ✓ | | | [project_id](variables.tf#L190) | The ID of the project where this instances will be created. | string | ✓ | | | [region](variables.tf#L195) | Region for the Looker core instance. | string | ✓ | | | [admin_settings](variables.tf#L17) | Looker Core admins settings. | object({…}) | | null | | [controlled_egress](variables.tf#L26) | Controlled egress configuration. | object({…}) | | null | | [custom_domain](variables.tf#L36) | Looker core instance custom domain. | string | | null | | [encryption_config](variables.tf#L42) | Set encryption configuration. KMS name format: 'projects/[PROJECT]/locations/[REGION]/keyRings/[RING]/cryptoKeys/[KEY_NAME]'. | object({…}) | | null | | [fips_enabled](variables.tf#L51) | FIPS 140-2 Encryption enablement for Looker (Google Cloud Core). | bool | | null | | [gemini_enabled](variables.tf#L57) | Gemini enablement for Looker (Google Cloud Core). | bool | | null | | [maintenance_config](variables.tf#L63) | Set maintenance window configuration and maintenance deny period (up to 90 days). Date format: 'yyyy-mm-dd'. | object({…}) | | {} | | [periodic_export_config](variables.tf#L155) | Configuration for periodic export. | object({…}) | | null | | [platform_edition](variables.tf#L170) | Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. | string | | "LOOKER_CORE_TRIAL" | | [prefix](variables.tf#L180) | Optional prefix used to generate instance names. | string | | null | ## Outputs | name | description | sensitive | |---|---|:---:| | [egress_public_ip](outputs.tf#L17) | Public IP address of Looker instance for egress. | | | [egress_service_attachments](outputs.tf#L22) | Egress service attachment connection statuses and configurations. | | | [id](outputs.tf#L27) | Fully qualified primary instance id. | | | [ingress_private_ip](outputs.tf#L32) | Private IP address of Looker instance for ingress. | | | [ingress_public_ip](outputs.tf#L37) | Public IP address of Looker instance for ingress. | | | [instance](outputs.tf#L42) | Looker Core instance resource. | ✓ | | [instance_id](outputs.tf#L48) | Looker Core instance id. | ✓ | | [instance_name](outputs.tf#L54) | Name of the looker instance. | | | [looker_service_attachment](outputs.tf#L59) | Service attachment URI for the Looker instance. | | | [looker_uri](outputs.tf#L64) | Looker core URI. | | | [looker_version](outputs.tf#L69) | Looker core version. | |