|
|
|
|
@@ -206,12 +206,19 @@ module "apigee-x-foundations" {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int_cross_region_lb_config = {
|
|
|
|
|
certificate_manager_certificates = [
|
|
|
|
|
"projects/myprj/locations/global/certificates/certificate"
|
|
|
|
|
]
|
|
|
|
|
certificate_manager_config = {
|
|
|
|
|
certificates = {
|
|
|
|
|
my-certificate-1 = {
|
|
|
|
|
self_managed = {
|
|
|
|
|
pem_certificate = "PEM-Encoded certificate string"
|
|
|
|
|
pem_private_key = "PEM-Encoded private key string"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
# tftest modules=7 resources=58
|
|
|
|
|
# tftest modules=8 resources=62
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Apigee X in service project with peering disabled and exposed using Global LB
|
|
|
|
|
@@ -460,7 +467,7 @@ module "apigee-x-foundations" {
|
|
|
|
|
| [kms.tf](./kms.tf) | None | <code>kms</code> | <code>random_id</code> |
|
|
|
|
|
| [main.tf](./main.tf) | Module-level locals and resources. | <code>net-vpc</code> · <code>project</code> | |
|
|
|
|
|
| [monitoring.tf](./monitoring.tf) | None | <code>cloud-function-v2</code> | |
|
|
|
|
|
| [northbound.tf](./northbound.tf) | None | <code>net-lb-app-ext</code> · <code>net-lb-app-int</code> · <code>net-lb-app-int-cross-region</code> | <code>google_compute_region_network_endpoint_group</code> · <code>google_compute_security_policy</code> |
|
|
|
|
|
| [northbound.tf](./northbound.tf) | None | <code>certificate-manager</code> · <code>net-lb-app-ext</code> · <code>net-lb-app-int</code> · <code>net-lb-app-int-cross-region</code> | <code>google_compute_region_network_endpoint_group</code> · <code>google_compute_security_policy</code> |
|
|
|
|
|
| [outputs.tf](./outputs.tf) | Module outputs. | | |
|
|
|
|
|
| [variables.tf](./variables.tf) | Module variables. | | |
|
|
|
|
|
|
|
|
|
|
@@ -469,21 +476,25 @@ module "apigee-x-foundations" {
|
|
|
|
|
| name | description | type | required | default | producer |
|
|
|
|
|
|---|---|:---:|:---:|:---:|:---:|
|
|
|
|
|
| [apigee_config](variables.tf#L17) | Apigee configuration. | <code title="object({ addons_config = optional(object({ advanced_api_ops = optional(bool, false) api_security = optional(bool, false) connectors_platform = optional(bool, false) integration = optional(bool, false) monetization = optional(bool, false) })) organization = object({ analytics_region = optional(string) api_consumer_data_encryption_key_config = optional(object({ auto_create = optional(bool, false) id = optional(string) }), {}) api_consumer_data_location = optional(string) billing_type = optional(string) control_plane_encryption_key_config = optional(object({ auto_create = optional(bool, false) id = optional(string) }), {}) database_encryption_key_config = optional(object({ auto_create = optional(bool, false) id = optional(string) }), {}) description = optional(string, "Terraform-managed") disable_vpc_peering = optional(bool, false) display_name = optional(string) properties = optional(map(string), {}) retention = optional(string) }) envgroups = optional(map(list(string)), {}) environments = optional(map(object({ description = optional(string) display_name = optional(string) envgroups = optional(list(string), []) forward_proxy_uri = optional(string) iam = optional(map(list(string)), {}) iam_bindings = optional(map(object({ role = string members = list(string) condition = optional(object({ expression = string title = string description = optional(string) })) })), {}) iam_bindings_additive = optional(map(object({ role = string member = string condition = optional(object({ expression = string title = string description = optional(string) })) })), {}) node_config = optional(object({ min_node_count = optional(number) max_node_count = optional(number) }), {}) type = optional(string) })), {}) instances = optional(map(object({ disk_encryption_key_config = optional(object({ auto_create = optional(bool, false) id = optional(string) }), {}) environments = optional(list(string), []) external = optional(bool, true) runtime_ip_cidr_range = optional(string) troubleshooting_ip_cidr_range = optional(string) })), {}) endpoint_attachments = optional(map(object({ region = string service_attachment = string dns_names = optional(list(string), []) })), {}) })">object({…})</code> | ✓ | | |
|
|
|
|
|
| [project_config](variables.tf#L300) | Project configuration. | <code title="object({ billing_account_id = optional(string) compute_metadata = optional(map(string), {}) contacts = optional(map(list(string)), {}) custom_roles = optional(map(list(string)), {}) default_service_account = optional(string, "keep") deletion_policy = optional(string) descriptive_name = optional(string) iam = optional(map(list(string)), {}) group_iam = optional(map(list(string)), {}) iam_bindings = optional(map(object({ role = string members = list(string) condition = optional(object({ expression = string title = string description = optional(string) })) })), {}) iam_bindings_additive = optional(map(object({ role = string member = string condition = optional(object({ expression = string title = string description = optional(string) })) })), {}) labels = optional(map(string), {}) lien_reason = optional(string) logging_data_access = optional(map(map(list(string))), {}) log_exclusions = optional(map(string), {}) logging_sinks = optional(map(object({ bq_partitioned_table = optional(bool) description = optional(string) destination = string disabled = optional(bool, false) exclusions = optional(map(string), {}) filter = string iam = optional(bool, true) type = string unique_writer = optional(bool, true) })), {}) metric_scopes = optional(list(string), []) name = string org_policies = optional(map(object({ inherit_from_parent = optional(bool) # for list policies only. reset = optional(bool) rules = optional(list(object({ allow = optional(object({ all = optional(bool) values = optional(list(string)) })) deny = optional(object({ all = optional(bool) values = optional(list(string)) })) enforce = optional(bool) # for boolean policies only. condition = optional(object({ description = optional(string) expression = optional(string) location = optional(string) title = optional(string) }), {}) })), []) })), {}) parent = optional(string) prefix = optional(string) project_create = optional(bool, true) vpc_sc = optional(object({ perimeter_name = string perimeter_bridges = optional(list(string), []) is_dry_run = optional(bool, false) })) services = optional(list(string), []) shared_vpc_host_config = optional(object({ enabled = bool service_projects = optional(list(string), []) })) shared_vpc_service_config = optional(object({ host_project = string service_agent_iam = optional(map(list(string)), {}) service_iam_grants = optional(list(string), []) })) tag_bindings = optional(map(string)) })">object({…})</code> | ✓ | | |
|
|
|
|
|
| [project_config](variables.tf#L333) | Project configuration. | <code title="object({ billing_account_id = optional(string) compute_metadata = optional(map(string), {}) contacts = optional(map(list(string)), {}) custom_roles = optional(map(list(string)), {}) default_service_account = optional(string, "keep") deletion_policy = optional(string) descriptive_name = optional(string) iam = optional(map(list(string)), {}) group_iam = optional(map(list(string)), {}) iam_bindings = optional(map(object({ role = string members = list(string) condition = optional(object({ expression = string title = string description = optional(string) })) })), {}) iam_bindings_additive = optional(map(object({ role = string member = string condition = optional(object({ expression = string title = string description = optional(string) })) })), {}) labels = optional(map(string), {}) lien_reason = optional(string) logging_data_access = optional(map(map(list(string))), {}) log_exclusions = optional(map(string), {}) logging_sinks = optional(map(object({ bq_partitioned_table = optional(bool) description = optional(string) destination = string disabled = optional(bool, false) exclusions = optional(map(string), {}) filter = string iam = optional(bool, true) type = string unique_writer = optional(bool, true) })), {}) metric_scopes = optional(list(string), []) name = string org_policies = optional(map(object({ inherit_from_parent = optional(bool) # for list policies only. reset = optional(bool) rules = optional(list(object({ allow = optional(object({ all = optional(bool) values = optional(list(string)) })) deny = optional(object({ all = optional(bool) values = optional(list(string)) })) enforce = optional(bool) # for boolean policies only. condition = optional(object({ description = optional(string) expression = optional(string) location = optional(string) title = optional(string) }), {}) })), []) })), {}) parent = optional(string) prefix = optional(string) project_create = optional(bool, true) vpc_sc = optional(object({ perimeter_name = string perimeter_bridges = optional(list(string), []) is_dry_run = optional(bool, false) })) services = optional(list(string), []) shared_vpc_host_config = optional(object({ enabled = bool service_projects = optional(list(string), []) })) shared_vpc_service_config = optional(object({ host_project = string service_agent_iam = optional(map(list(string)), {}) service_iam_grants = optional(list(string), []) })) tag_bindings = optional(map(string)) })">object({…})</code> | ✓ | | |
|
|
|
|
|
| [enable_monitoring](variables.tf#L116) | Boolean flag indicating whether an custom metric to monitor instances should be created in Cloud monitoring. | <code>bool</code> | | <code>false</code> | |
|
|
|
|
|
| [ext_lb_config](variables.tf#L122) | External application load balancer configuration. | <code title="object({ log_sample_rate = optional(number) outlier_detection = optional(object({ consecutive_errors = optional(number) consecutive_gateway_failure = optional(number) enforcing_consecutive_errors = optional(number) enforcing_consecutive_gateway_failure = optional(number) enforcing_success_rate = optional(number) max_ejection_percent = optional(number) success_rate_minimum_hosts = optional(number) success_rate_request_volume = optional(number) success_rate_stdev_factor = optional(number) base_ejection_time = optional(object({ seconds = number nanos = optional(number) })) interval = optional(object({ seconds = number nanos = optional(number) })) })) security_policy = optional(object({ advanced_options_config = optional(object({ json_parsing = optional(object({ enable = optional(bool, false) content_types = optional(list(string)) })) log_level = optional(string) })) adaptive_protection_config = optional(object({ layer_7_ddos_defense_config = optional(object({ enable = optional(bool, false) rule_visibility = optional(string) })) auto_deploy_config = optional(object({ load_threshold = optional(number) confidence_threshold = optional(number) impacted_baseline_threshold = optional(number) expiration_sec = optional(number) })) })) rate_limit_threshold = optional(object({ count = number interval_sec = number })) forbidden_src_ip_ranges = optional(list(string), []) forbidden_regions = optional(list(string), []) preconfigured_waf_rules = optional(map(object({ sensitivity = optional(number) opt_in_rule_ids = optional(list(string), []) opt_out_rule_ids = optional(list(string), []) }))) })) ssl_certificates = object({ certificate_ids = optional(list(string), []) create_configs = optional(map(object({ certificate = string private_key = string })), {}) managed_configs = optional(map(object({ domains = list(string) description = optional(string) })), {}) self_signed_configs = optional(list(string), null) }) })">object({…})</code> | | <code>null</code> | |
|
|
|
|
|
| [int_cross_region_lb_config](variables.tf#L193) | Internal application load balancer configuration. | <code title="object({ log_sample_rate = optional(number) outlier_detection = optional(object({ consecutive_errors = optional(number) consecutive_gateway_failure = optional(number) enforcing_consecutive_errors = optional(number) enforcing_consecutive_gateway_failure = optional(number) enforcing_success_rate = optional(number) max_ejection_percent = optional(number) success_rate_minimum_hosts = optional(number) success_rate_request_volume = optional(number) success_rate_stdev_factor = optional(number) base_ejection_time = optional(object({ seconds = number nanos = optional(number) })) interval = optional(object({ seconds = number nanos = optional(number) })) })) certificate_manager_certificates = optional(list(string)) })">object({…})</code> | | <code>null</code> | |
|
|
|
|
|
| [int_lb_config](variables.tf#L221) | Internal application load balancer configuration. | <code title="object({ log_sample_rate = optional(number) outlier_detection = optional(object({ consecutive_errors = optional(number) consecutive_gateway_failure = optional(number) enforcing_consecutive_errors = optional(number) enforcing_consecutive_gateway_failure = optional(number) enforcing_success_rate = optional(number) max_ejection_percent = optional(number) success_rate_minimum_hosts = optional(number) success_rate_request_volume = optional(number) success_rate_stdev_factor = optional(number) base_ejection_time = optional(object({ seconds = number nanos = optional(number) })) interval = optional(object({ seconds = number nanos = optional(number) })) })) ssl_certificates = object({ certificate_ids = optional(list(string), []) create_configs = optional(map(object({ certificate = string private_key = string })), {}) self_signed_configs = optional(list(string), []) }) })">object({…})</code> | | <code>null</code> | |
|
|
|
|
|
| [network_config](variables.tf#L257) | Network configuration. | <code title="object({ shared_vpc = optional(object({ name = string subnets = map(string) subnets_psc = map(string) })) apigee_vpc = optional(object({ name = optional(string) auto_create = optional(bool, true) subnets = optional(map(object({ id = optional(string) name = optional(string) ip_cidr_range = optional(string) })), {}) subnets_proxy_only = optional(map(object({ name = optional(string) ip_cidr_range = string })), {}) subnets_psc = optional(map(object({ id = optional(string) name = optional(string) ip_cidr_range = optional(string) })), {}) })) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [ext_lb_config](variables.tf#L122) | External application load balancer configuration. | <code title="object({ address = optional(string) log_sample_rate = optional(number) outlier_detection = optional(object({ consecutive_errors = optional(number) consecutive_gateway_failure = optional(number) enforcing_consecutive_errors = optional(number) enforcing_consecutive_gateway_failure = optional(number) enforcing_success_rate = optional(number) max_ejection_percent = optional(number) success_rate_minimum_hosts = optional(number) success_rate_request_volume = optional(number) success_rate_stdev_factor = optional(number) base_ejection_time = optional(object({ seconds = number nanos = optional(number) })) interval = optional(object({ seconds = number nanos = optional(number) })) })) security_policy = optional(object({ advanced_options_config = optional(object({ json_parsing = optional(object({ enable = optional(bool, false) content_types = optional(list(string)) })) log_level = optional(string) })) adaptive_protection_config = optional(object({ layer_7_ddos_defense_config = optional(object({ enable = optional(bool, false) rule_visibility = optional(string) })) auto_deploy_config = optional(object({ load_threshold = optional(number) confidence_threshold = optional(number) impacted_baseline_threshold = optional(number) expiration_sec = optional(number) })) })) rate_limit_threshold = optional(object({ count = number interval_sec = number })) forbidden_src_ip_ranges = optional(list(string), []) forbidden_regions = optional(list(string), []) preconfigured_waf_rules = optional(map(object({ sensitivity = optional(number) opt_in_rule_ids = optional(list(string), []) opt_out_rule_ids = optional(list(string), []) }))) })) ssl_certificates = object({ certificate_ids = optional(list(string), []) create_configs = optional(map(object({ certificate = string private_key = string })), {}) managed_configs = optional(map(object({ domains = list(string) description = optional(string) })), {}) self_signed_configs = optional(list(string), null) }) })">object({…})</code> | | <code>null</code> | |
|
|
|
|
|
| [int_cross_region_lb_config](variables.tf#L194) | Internal application load balancer configuration. | <code title="object({ addresses = optional(map(string)) log_sample_rate = optional(number) outlier_detection = optional(object({ consecutive_errors = optional(number) consecutive_gateway_failure = optional(number) enforcing_consecutive_errors = optional(number) enforcing_consecutive_gateway_failure = optional(number) enforcing_success_rate = optional(number) max_ejection_percent = optional(number) success_rate_minimum_hosts = optional(number) success_rate_request_volume = optional(number) success_rate_stdev_factor = optional(number) base_ejection_time = optional(object({ seconds = number nanos = optional(number) })) interval = optional(object({ seconds = number nanos = optional(number) })) })) certificate_manager_config = object({ certificates = map(object({ description = optional(string) labels = optional(map(string), {}) location = optional(string) scope = optional(string) self_managed = optional(object({ pem_certificate = string pem_private_key = string })) managed = optional(object({ domains = list(string) dns_authorizations = optional(list(string)) issuance_config = optional(string) })) })) dns_authorizations = optional(map(object({ domain = string description = optional(string) location = optional(string) type = optional(string) labels = optional(map(string)) }))) issuance_configs = optional(map(object({ ca_pool = string description = optional(string) key_algorithm = string labels = optional(map(string), {}) lifetime = string rotation_window_percentage = number }))) }) })">object({…})</code> | | <code>null</code> | |
|
|
|
|
|
| [int_lb_config](variables.tf#L254) | Internal application load balancer configuration. | <code title="object({ addresses = optional(map(string)) log_sample_rate = optional(number) outlier_detection = optional(object({ consecutive_errors = optional(number) consecutive_gateway_failure = optional(number) enforcing_consecutive_errors = optional(number) enforcing_consecutive_gateway_failure = optional(number) enforcing_success_rate = optional(number) max_ejection_percent = optional(number) success_rate_minimum_hosts = optional(number) success_rate_request_volume = optional(number) success_rate_stdev_factor = optional(number) base_ejection_time = optional(object({ seconds = number nanos = optional(number) })) interval = optional(object({ seconds = number nanos = optional(number) })) })) ssl_certificates = object({ certificate_ids = optional(list(string), []) create_configs = optional(map(object({ certificate = string private_key = string })), {}) }) })">object({…})</code> | | <code>null</code> | |
|
|
|
|
|
| [network_config](variables.tf#L290) | Network configuration. | <code title="object({ shared_vpc = optional(object({ name = string subnets = map(string) subnets_psc = map(string) })) apigee_vpc = optional(object({ name = optional(string) auto_create = optional(bool, true) subnets = optional(map(object({ id = optional(string) name = optional(string) ip_cidr_range = optional(string) })), {}) subnets_proxy_only = optional(map(object({ name = optional(string) ip_cidr_range = string })), {}) subnets_psc = optional(map(object({ id = optional(string) name = optional(string) ip_cidr_range = optional(string) })), {}) })) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
|
|
|
|
|
## Outputs
|
|
|
|
|
|
|
|
|
|
| name | description | sensitive | consumers |
|
|
|
|
|
|---|---|:---:|---|
|
|
|
|
|
| [endpoint_attachment_hosts](outputs.tf#L17) | Endpoint attachment hosts. | | |
|
|
|
|
|
| [ext_lb_ip_address](outputs.tf#L22) | External IP address. | | |
|
|
|
|
|
| [instance_service_attachments](outputs.tf#L27) | Instance service attachments. | | |
|
|
|
|
|
| [int_cross_region_lb_ip_addresses](outputs.tf#L32) | Internal IP addresses. | | |
|
|
|
|
|
| [int_lb_ip_addresses](outputs.tf#L37) | Internal IP addresses. | | |
|
|
|
|
|
| [project_id](outputs.tf#L42) | Project. | | |
|
|
|
|
|
| [apigee_vpc](outputs.tf#L17) | Apigee VPC. | | |
|
|
|
|
|
| [apigee_vpc_id](outputs.tf#L22) | Apigee VPC. | | |
|
|
|
|
|
| [apigee_vpc_self_link](outputs.tf#L27) | Apigee VPC. | | |
|
|
|
|
|
| [endpoint_attachment_hosts](outputs.tf#L31) | Endpoint attachment hosts. | | |
|
|
|
|
|
| [ext_lb_ip_address](outputs.tf#L36) | External IP address. | | |
|
|
|
|
|
| [instance_service_attachments](outputs.tf#L41) | Instance service attachments. | | |
|
|
|
|
|
| [int_cross_region_lb_ip_addresses](outputs.tf#L46) | Internal IP addresses. | | |
|
|
|
|
|
| [int_lb_ip_addresses](outputs.tf#L51) | Internal IP addresses. | | |
|
|
|
|
|
| [project](outputs.tf#L56) | Project. | | |
|
|
|
|
|
| [project_id](outputs.tf#L61) | Project id. | | |
|
|
|
|
|
<!-- END TFDOC -->
|
|
|
|
|
|