ServiceAttachment class
Represents a ServiceAttachment resource.
To get more information about ServiceAttachment, see:
Example Usage
Service Attachment Basic
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const producerServiceHealthCheck = new gcp.compute.HealthCheck("producer_service_health_check", {
name: "producer-service-health-check",
checkIntervalSec: 1,
timeoutSec: 1,
tcpHealthCheck: {
port: 80,
},
});
const producerServiceBackend = new gcp.compute.RegionBackendService("producer_service_backend", {
name: "producer-service",
region: "us-west2",
healthChecks: producerServiceHealthCheck.id,
});
const pscIlbNetwork = new gcp.compute.Network("psc_ilb_network", {
name: "psc-ilb-network",
autoCreateSubnetworks: false,
});
const pscIlbProducerSubnetwork = new gcp.compute.Subnetwork("psc_ilb_producer_subnetwork", {
name: "psc-ilb-producer-subnetwork",
region: "us-west2",
network: pscIlbNetwork.id,
ipCidrRange: "10.0.0.0/16",
});
const pscIlbTargetService = new gcp.compute.ForwardingRule("psc_ilb_target_service", {
name: "producer-forwarding-rule",
region: "us-west2",
loadBalancingScheme: "INTERNAL",
backendService: producerServiceBackend.id,
allPorts: true,
network: pscIlbNetwork.name,
subnetwork: pscIlbProducerSubnetwork.name,
});
const pscIlbNat = new gcp.compute.Subnetwork("psc_ilb_nat", {
name: "psc-ilb-nat",
region: "us-west2",
network: pscIlbNetwork.id,
purpose: "PRIVATE_SERVICE_CONNECT",
ipCidrRange: "10.1.0.0/16",
});
const pscIlbServiceAttachment = new gcp.compute.ServiceAttachment("psc_ilb_service_attachment", {
name: "my-psc-ilb",
region: "us-west2",
description: "A service attachment configured with Terraform",
domainNames: ["gcp.tfacc.hashicorptest.com."],
enableProxyProtocol: true,
connectionPreference: "ACCEPT_AUTOMATIC",
natSubnets: [pscIlbNat.id],
targetService: pscIlbTargetService.id,
});
const pscIlbConsumerAddress = new gcp.compute.Address("psc_ilb_consumer_address", {
name: "psc-ilb-consumer-address",
region: "us-west2",
subnetwork: "default",
addressType: "INTERNAL",
});
const pscIlbConsumer = new gcp.compute.ForwardingRule("psc_ilb_consumer", {
name: "psc-ilb-consumer-forwarding-rule",
region: "us-west2",
target: pscIlbServiceAttachment.id,
loadBalancingScheme: "",
network: "default",
ipAddress: pscIlbConsumerAddress.id,
});
import pulumi
import pulumi_gcp as gcp
producer_service_health_check = gcp.compute.HealthCheck("producer_service_health_check",
name="producer-service-health-check",
check_interval_sec=1,
timeout_sec=1,
tcp_health_check={
"port": 80,
})
producer_service_backend = gcp.compute.RegionBackendService("producer_service_backend",
name="producer-service",
region="us-west2",
health_checks=producer_service_health_check.id)
psc_ilb_network = gcp.compute.Network("psc_ilb_network",
name="psc-ilb-network",
auto_create_subnetworks=False)
psc_ilb_producer_subnetwork = gcp.compute.Subnetwork("psc_ilb_producer_subnetwork",
name="psc-ilb-producer-subnetwork",
region="us-west2",
network=psc_ilb_network.id,
ip_cidr_range="10.0.0.0/16")
psc_ilb_target_service = gcp.compute.ForwardingRule("psc_ilb_target_service",
name="producer-forwarding-rule",
region="us-west2",
load_balancing_scheme="INTERNAL",
backend_service=producer_service_backend.id,
all_ports=True,
network=psc_ilb_network.name,
subnetwork=psc_ilb_producer_subnetwork.name)
psc_ilb_nat = gcp.compute.Subnetwork("psc_ilb_nat",
name="psc-ilb-nat",
region="us-west2",
network=psc_ilb_network.id,
purpose="PRIVATE_SERVICE_CONNECT",
ip_cidr_range="10.1.0.0/16")
psc_ilb_service_attachment = gcp.compute.ServiceAttachment("psc_ilb_service_attachment",
name="my-psc-ilb",
region="us-west2",
description="A service attachment configured with Terraform",
domain_names=["gcp.tfacc.hashicorptest.com."],
enable_proxy_protocol=True,
connection_preference="ACCEPT_AUTOMATIC",
nat_subnets=[psc_ilb_nat.id],
target_service=psc_ilb_target_service.id)
psc_ilb_consumer_address = gcp.compute.Address("psc_ilb_consumer_address",
name="psc-ilb-consumer-address",
region="us-west2",
subnetwork="default",
address_type="INTERNAL")
psc_ilb_consumer = gcp.compute.ForwardingRule("psc_ilb_consumer",
name="psc-ilb-consumer-forwarding-rule",
region="us-west2",
target=psc_ilb_service_attachment.id,
load_balancing_scheme="",
network="default",
ip_address=psc_ilb_consumer_address.id)
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var producerServiceHealthCheck = new Gcp.Compute.HealthCheck("producer_service_health_check", new()
{
Name = "producer-service-health-check",
CheckIntervalSec = 1,
TimeoutSec = 1,
TcpHealthCheck = new Gcp.Compute.Inputs.HealthCheckTcpHealthCheckArgs
{
Port = 80,
},
});
var producerServiceBackend = new Gcp.Compute.RegionBackendService("producer_service_backend", new()
{
Name = "producer-service",
Region = "us-west2",
HealthChecks = producerServiceHealthCheck.Id,
});
var pscIlbNetwork = new Gcp.Compute.Network("psc_ilb_network", new()
{
Name = "psc-ilb-network",
AutoCreateSubnetworks = false,
});
var pscIlbProducerSubnetwork = new Gcp.Compute.Subnetwork("psc_ilb_producer_subnetwork", new()
{
Name = "psc-ilb-producer-subnetwork",
Region = "us-west2",
Network = pscIlbNetwork.Id,
IpCidrRange = "10.0.0.0/16",
});
var pscIlbTargetService = new Gcp.Compute.ForwardingRule("psc_ilb_target_service", new()
{
Name = "producer-forwarding-rule",
Region = "us-west2",
LoadBalancingScheme = "INTERNAL",
BackendService = producerServiceBackend.Id,
AllPorts = true,
Network = pscIlbNetwork.Name,
Subnetwork = pscIlbProducerSubnetwork.Name,
});
var pscIlbNat = new Gcp.Compute.Subnetwork("psc_ilb_nat", new()
{
Name = "psc-ilb-nat",
Region = "us-west2",
Network = pscIlbNetwork.Id,
Purpose = "PRIVATE_SERVICE_CONNECT",
IpCidrRange = "10.1.0.0/16",
});
var pscIlbServiceAttachment = new Gcp.Compute.ServiceAttachment("psc_ilb_service_attachment", new()
{
Name = "my-psc-ilb",
Region = "us-west2",
Description = "A service attachment configured with Terraform",
DomainNames = new[]
{
"gcp.tfacc.hashicorptest.com.",
},
EnableProxyProtocol = true,
ConnectionPreference = "ACCEPT_AUTOMATIC",
NatSubnets = new[]
{
pscIlbNat.Id,
},
TargetService = pscIlbTargetService.Id,
});
var pscIlbConsumerAddress = new Gcp.Compute.Address("psc_ilb_consumer_address", new()
{
Name = "psc-ilb-consumer-address",
Region = "us-west2",
Subnetwork = "default",
AddressType = "INTERNAL",
});
var pscIlbConsumer = new Gcp.Compute.ForwardingRule("psc_ilb_consumer", new()
{
Name = "psc-ilb-consumer-forwarding-rule",
Region = "us-west2",
Target = pscIlbServiceAttachment.Id,
LoadBalancingScheme = "",
Network = "default",
IpAddress = pscIlbConsumerAddress.Id,
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
producerServiceHealthCheck, err := compute.NewHealthCheck(ctx, "producer_service_health_check", &compute.HealthCheckArgs{
Name: pulumi.String("producer-service-health-check"),
CheckIntervalSec: pulumi.Int(1),
TimeoutSec: pulumi.Int(1),
TcpHealthCheck: &compute.HealthCheckTcpHealthCheckArgs{
Port: pulumi.Int(80),
},
})
if err != nil {
return err
}
producerServiceBackend, err := compute.NewRegionBackendService(ctx, "producer_service_backend", &compute.RegionBackendServiceArgs{
Name: pulumi.String("producer-service"),
Region: pulumi.String("us-west2"),
HealthChecks: producerServiceHealthCheck.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
pscIlbNetwork, err := compute.NewNetwork(ctx, "psc_ilb_network", &compute.NetworkArgs{
Name: pulumi.String("psc-ilb-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
pscIlbProducerSubnetwork, err := compute.NewSubnetwork(ctx, "psc_ilb_producer_subnetwork", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-producer-subnetwork"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
IpCidrRange: pulumi.String("10.0.0.0/16"),
})
if err != nil {
return err
}
pscIlbTargetService, err := compute.NewForwardingRule(ctx, "psc_ilb_target_service", &compute.ForwardingRuleArgs{
Name: pulumi.String("producer-forwarding-rule"),
Region: pulumi.String("us-west2"),
LoadBalancingScheme: pulumi.String("INTERNAL"),
BackendService: producerServiceBackend.ID().ToIDOutput().ToStringOutput(),
AllPorts: pulumi.Bool(true),
Network: pscIlbNetwork.Name,
Subnetwork: pscIlbProducerSubnetwork.Name,
})
if err != nil {
return err
}
pscIlbNat, err := compute.NewSubnetwork(ctx, "psc_ilb_nat", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-nat"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
Purpose: pulumi.String("PRIVATE_SERVICE_CONNECT"),
IpCidrRange: pulumi.String("10.1.0.0/16"),
})
if err != nil {
return err
}
pscIlbServiceAttachment, err := compute.NewServiceAttachment(ctx, "psc_ilb_service_attachment", &compute.ServiceAttachmentArgs{
Name: pulumi.String("my-psc-ilb"),
Region: pulumi.String("us-west2"),
Description: pulumi.String("A service attachment configured with Terraform"),
DomainNames: pulumi.StringArray{
pulumi.String("gcp.tfacc.hashicorptest.com."),
},
EnableProxyProtocol: pulumi.Bool(true),
ConnectionPreference: pulumi.String("ACCEPT_AUTOMATIC"),
NatSubnets: pulumi.StringArray{
pscIlbNat.ID().ToIDOutput().ToStringOutput(),
},
TargetService: pscIlbTargetService.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
pscIlbConsumerAddress, err := compute.NewAddress(ctx, "psc_ilb_consumer_address", &compute.AddressArgs{
Name: pulumi.String("psc-ilb-consumer-address"),
Region: pulumi.String("us-west2"),
Subnetwork: pulumi.String("default"),
AddressType: pulumi.String("INTERNAL"),
})
if err != nil {
return err
}
_, err = compute.NewForwardingRule(ctx, "psc_ilb_consumer", &compute.ForwardingRuleArgs{
Name: pulumi.String("psc-ilb-consumer-forwarding-rule"),
Region: pulumi.String("us-west2"),
Target: pscIlbServiceAttachment.ID().ToIDOutput().ToStringOutput(),
LoadBalancingScheme: pulumi.String(""),
Network: pulumi.String("default"),
IpAddress: pscIlbConsumerAddress.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_compute_serviceattachment" "psc_ilb_service_attachment" {
name = "my-psc-ilb"
region = "us-west2"
description = "A service attachment configured with Terraform"
domain_names = ["gcp.tfacc.hashicorptest.com."]
enable_proxy_protocol = true
connection_preference = "ACCEPT_AUTOMATIC"
nat_subnets = [gcp_compute_subnetwork.psc_ilb_nat.id]
target_service = gcp_compute_forwardingrule.psc_ilb_target_service.id
}
resource "gcp_compute_address" "psc_ilb_consumer_address" {
name = "psc-ilb-consumer-address"
region = "us-west2"
subnetwork = "default"
address_type = "INTERNAL"
}
resource "gcp_compute_forwardingrule" "psc_ilb_consumer" {
name = "psc-ilb-consumer-forwarding-rule"
region = "us-west2"
target = gcp_compute_serviceattachment.psc_ilb_service_attachment.id
load_balancing_scheme = ""
network = "default"
ip_address = gcp_compute_address.psc_ilb_consumer_address.id
}
resource "gcp_compute_forwardingrule" "psc_ilb_target_service" {
name = "producer-forwarding-rule"
region = "us-west2"
load_balancing_scheme = "INTERNAL"
backend_service = gcp_compute_regionbackendservice.producer_service_backend.id
all_ports = true
network = gcp_compute_network.psc_ilb_network.name
subnetwork = gcp_compute_subnetwork.psc_ilb_producer_subnetwork.name
}
resource "gcp_compute_regionbackendservice" "producer_service_backend" {
name = "producer-service"
region = "us-west2"
health_checks = gcp_compute_healthcheck.producer_service_health_check.id
}
resource "gcp_compute_healthcheck" "producer_service_health_check" {
name = "producer-service-health-check"
check_interval_sec = 1
timeout_sec = 1
tcp_health_check = {
port = "80"
}
}
resource "gcp_compute_network" "psc_ilb_network" {
name = "psc-ilb-network"
auto_create_subnetworks = false
}
resource "gcp_compute_subnetwork" "psc_ilb_producer_subnetwork" {
name = "psc-ilb-producer-subnetwork"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
ip_cidr_range = "10.0.0.0/16"
}
resource "gcp_compute_subnetwork" "psc_ilb_nat" {
name = "psc-ilb-nat"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
purpose = "PRIVATE_SERVICE_CONNECT"
ip_cidr_range = "10.1.0.0/16"
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.HealthCheck;
import com.pulumi.gcp.compute.HealthCheckArgs;
import com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;
import com.pulumi.gcp.compute.RegionBackendService;
import com.pulumi.gcp.compute.RegionBackendServiceArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.ForwardingRule;
import com.pulumi.gcp.compute.ForwardingRuleArgs;
import com.pulumi.gcp.compute.ServiceAttachment;
import com.pulumi.gcp.compute.ServiceAttachmentArgs;
import com.pulumi.gcp.compute.Address;
import com.pulumi.gcp.compute.AddressArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var producerServiceHealthCheck = new HealthCheck("producerServiceHealthCheck", HealthCheckArgs.builder()
.name("producer-service-health-check")
.checkIntervalSec(1)
.timeoutSec(1)
.tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()
.port(80)
.build())
.build());
var producerServiceBackend = new RegionBackendService("producerServiceBackend", RegionBackendServiceArgs.builder()
.name("producer-service")
.region("us-west2")
.healthChecks(producerServiceHealthCheck.id())
.build());
var pscIlbNetwork = new Network("pscIlbNetwork", NetworkArgs.builder()
.name("psc-ilb-network")
.autoCreateSubnetworks(false)
.build());
var pscIlbProducerSubnetwork = new Subnetwork("pscIlbProducerSubnetwork", SubnetworkArgs.builder()
.name("psc-ilb-producer-subnetwork")
.region("us-west2")
.network(pscIlbNetwork.id())
.ipCidrRange("10.0.0.0/16")
.build());
var pscIlbTargetService = new ForwardingRule("pscIlbTargetService", ForwardingRuleArgs.builder()
.name("producer-forwarding-rule")
.region("us-west2")
.loadBalancingScheme("INTERNAL")
.backendService(producerServiceBackend.id())
.allPorts(true)
.network(pscIlbNetwork.name())
.subnetwork(pscIlbProducerSubnetwork.name())
.build());
var pscIlbNat = new Subnetwork("pscIlbNat", SubnetworkArgs.builder()
.name("psc-ilb-nat")
.region("us-west2")
.network(pscIlbNetwork.id())
.purpose("PRIVATE_SERVICE_CONNECT")
.ipCidrRange("10.1.0.0/16")
.build());
var pscIlbServiceAttachment = new ServiceAttachment("pscIlbServiceAttachment", ServiceAttachmentArgs.builder()
.name("my-psc-ilb")
.region("us-west2")
.description("A service attachment configured with Terraform")
.domainNames("gcp.tfacc.hashicorptest.com.")
.enableProxyProtocol(true)
.connectionPreference("ACCEPT_AUTOMATIC")
.natSubnets(pscIlbNat.id())
.targetService(pscIlbTargetService.id())
.build());
var pscIlbConsumerAddress = new Address("pscIlbConsumerAddress", AddressArgs.builder()
.name("psc-ilb-consumer-address")
.region("us-west2")
.subnetwork("default")
.addressType("INTERNAL")
.build());
var pscIlbConsumer = new ForwardingRule("pscIlbConsumer", ForwardingRuleArgs.builder()
.name("psc-ilb-consumer-forwarding-rule")
.region("us-west2")
.target(pscIlbServiceAttachment.id())
.loadBalancingScheme("")
.network("default")
.ipAddress(pscIlbConsumerAddress.id())
.build());
}
}
resources:
pscIlbServiceAttachment:
type: gcp:compute:ServiceAttachment
name: psc_ilb_service_attachment
properties:
name: my-psc-ilb
region: us-west2
description: A service attachment configured with Terraform
domainNames:
- gcp.tfacc.hashicorptest.com.
enableProxyProtocol: true
connectionPreference: ACCEPT_AUTOMATIC
natSubnets:
- ${pscIlbNat.id}
targetService: ${pscIlbTargetService.id}
pscIlbConsumerAddress:
type: gcp:compute:Address
name: psc_ilb_consumer_address
properties:
name: psc-ilb-consumer-address
region: us-west2
subnetwork: default
addressType: INTERNAL
pscIlbConsumer:
type: gcp:compute:ForwardingRule
name: psc_ilb_consumer
properties:
name: psc-ilb-consumer-forwarding-rule
region: us-west2
target: ${pscIlbServiceAttachment.id}
loadBalancingScheme: ""
network: default
ipAddress: ${pscIlbConsumerAddress.id}
pscIlbTargetService:
type: gcp:compute:ForwardingRule
name: psc_ilb_target_service
properties:
name: producer-forwarding-rule
region: us-west2
loadBalancingScheme: INTERNAL
backendService: ${producerServiceBackend.id}
allPorts: true
network: ${pscIlbNetwork.name}
subnetwork: ${pscIlbProducerSubnetwork.name}
producerServiceBackend:
type: gcp:compute:RegionBackendService
name: producer_service_backend
properties:
name: producer-service
region: us-west2
healthChecks: ${producerServiceHealthCheck.id}
producerServiceHealthCheck:
type: gcp:compute:HealthCheck
name: producer_service_health_check
properties:
name: producer-service-health-check
checkIntervalSec: 1
timeoutSec: 1
tcpHealthCheck:
port: '80'
pscIlbNetwork:
type: gcp:compute:Network
name: psc_ilb_network
properties:
name: psc-ilb-network
autoCreateSubnetworks: false
pscIlbProducerSubnetwork:
type: gcp:compute:Subnetwork
name: psc_ilb_producer_subnetwork
properties:
name: psc-ilb-producer-subnetwork
region: us-west2
network: ${pscIlbNetwork.id}
ipCidrRange: 10.0.0.0/16
pscIlbNat:
type: gcp:compute:Subnetwork
name: psc_ilb_nat
properties:
name: psc-ilb-nat
region: us-west2
network: ${pscIlbNetwork.id}
purpose: PRIVATE_SERVICE_CONNECT
ipCidrRange: 10.1.0.0/16
Service Attachment Explicit Projects
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const producerServiceHealthCheck = new gcp.compute.HealthCheck("producer_service_health_check", {
name: "producer-service-health-check",
checkIntervalSec: 1,
timeoutSec: 1,
tcpHealthCheck: {
port: 80,
},
});
const producerServiceBackend = new gcp.compute.RegionBackendService("producer_service_backend", {
name: "producer-service",
region: "us-west2",
healthChecks: producerServiceHealthCheck.id,
});
const pscIlbNetwork = new gcp.compute.Network("psc_ilb_network", {
name: "psc-ilb-network",
autoCreateSubnetworks: false,
});
const pscIlbProducerSubnetwork = new gcp.compute.Subnetwork("psc_ilb_producer_subnetwork", {
name: "psc-ilb-producer-subnetwork",
region: "us-west2",
network: pscIlbNetwork.id,
ipCidrRange: "10.0.0.0/16",
});
const pscIlbTargetService = new gcp.compute.ForwardingRule("psc_ilb_target_service", {
name: "producer-forwarding-rule",
region: "us-west2",
loadBalancingScheme: "INTERNAL",
backendService: producerServiceBackend.id,
allPorts: true,
network: pscIlbNetwork.name,
subnetwork: pscIlbProducerSubnetwork.name,
});
const pscIlbNat = new gcp.compute.Subnetwork("psc_ilb_nat", {
name: "psc-ilb-nat",
region: "us-west2",
network: pscIlbNetwork.id,
purpose: "PRIVATE_SERVICE_CONNECT",
ipCidrRange: "10.1.0.0/16",
});
const pscIlbServiceAttachment = new gcp.compute.ServiceAttachment("psc_ilb_service_attachment", {
name: "my-psc-ilb",
region: "us-west2",
description: "A service attachment configured with Terraform",
domainNames: ["gcp.tfacc.hashicorptest.com."],
enableProxyProtocol: true,
connectionPreference: "ACCEPT_MANUAL",
natSubnets: [pscIlbNat.id],
targetService: pscIlbTargetService.id,
consumerRejectLists: [
"673497134629",
"482878270665",
],
consumerAcceptLists: [{
projectIdOrNum: "658859330310",
connectionLimit: 4,
}],
});
const pscIlbConsumerAddress = new gcp.compute.Address("psc_ilb_consumer_address", {
name: "psc-ilb-consumer-address",
region: "us-west2",
subnetwork: "default",
addressType: "INTERNAL",
});
const pscIlbConsumer = new gcp.compute.ForwardingRule("psc_ilb_consumer", {
name: "psc-ilb-consumer-forwarding-rule",
region: "us-west2",
target: pscIlbServiceAttachment.id,
loadBalancingScheme: "",
network: "default",
ipAddress: pscIlbConsumerAddress.id,
});
import pulumi
import pulumi_gcp as gcp
producer_service_health_check = gcp.compute.HealthCheck("producer_service_health_check",
name="producer-service-health-check",
check_interval_sec=1,
timeout_sec=1,
tcp_health_check={
"port": 80,
})
producer_service_backend = gcp.compute.RegionBackendService("producer_service_backend",
name="producer-service",
region="us-west2",
health_checks=producer_service_health_check.id)
psc_ilb_network = gcp.compute.Network("psc_ilb_network",
name="psc-ilb-network",
auto_create_subnetworks=False)
psc_ilb_producer_subnetwork = gcp.compute.Subnetwork("psc_ilb_producer_subnetwork",
name="psc-ilb-producer-subnetwork",
region="us-west2",
network=psc_ilb_network.id,
ip_cidr_range="10.0.0.0/16")
psc_ilb_target_service = gcp.compute.ForwardingRule("psc_ilb_target_service",
name="producer-forwarding-rule",
region="us-west2",
load_balancing_scheme="INTERNAL",
backend_service=producer_service_backend.id,
all_ports=True,
network=psc_ilb_network.name,
subnetwork=psc_ilb_producer_subnetwork.name)
psc_ilb_nat = gcp.compute.Subnetwork("psc_ilb_nat",
name="psc-ilb-nat",
region="us-west2",
network=psc_ilb_network.id,
purpose="PRIVATE_SERVICE_CONNECT",
ip_cidr_range="10.1.0.0/16")
psc_ilb_service_attachment = gcp.compute.ServiceAttachment("psc_ilb_service_attachment",
name="my-psc-ilb",
region="us-west2",
description="A service attachment configured with Terraform",
domain_names=["gcp.tfacc.hashicorptest.com."],
enable_proxy_protocol=True,
connection_preference="ACCEPT_MANUAL",
nat_subnets=[psc_ilb_nat.id],
target_service=psc_ilb_target_service.id,
consumer_reject_lists=[
"673497134629",
"482878270665",
],
consumer_accept_lists=[{
"project_id_or_num": "658859330310",
"connection_limit": 4,
}])
psc_ilb_consumer_address = gcp.compute.Address("psc_ilb_consumer_address",
name="psc-ilb-consumer-address",
region="us-west2",
subnetwork="default",
address_type="INTERNAL")
psc_ilb_consumer = gcp.compute.ForwardingRule("psc_ilb_consumer",
name="psc-ilb-consumer-forwarding-rule",
region="us-west2",
target=psc_ilb_service_attachment.id,
load_balancing_scheme="",
network="default",
ip_address=psc_ilb_consumer_address.id)
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var producerServiceHealthCheck = new Gcp.Compute.HealthCheck("producer_service_health_check", new()
{
Name = "producer-service-health-check",
CheckIntervalSec = 1,
TimeoutSec = 1,
TcpHealthCheck = new Gcp.Compute.Inputs.HealthCheckTcpHealthCheckArgs
{
Port = 80,
},
});
var producerServiceBackend = new Gcp.Compute.RegionBackendService("producer_service_backend", new()
{
Name = "producer-service",
Region = "us-west2",
HealthChecks = producerServiceHealthCheck.Id,
});
var pscIlbNetwork = new Gcp.Compute.Network("psc_ilb_network", new()
{
Name = "psc-ilb-network",
AutoCreateSubnetworks = false,
});
var pscIlbProducerSubnetwork = new Gcp.Compute.Subnetwork("psc_ilb_producer_subnetwork", new()
{
Name = "psc-ilb-producer-subnetwork",
Region = "us-west2",
Network = pscIlbNetwork.Id,
IpCidrRange = "10.0.0.0/16",
});
var pscIlbTargetService = new Gcp.Compute.ForwardingRule("psc_ilb_target_service", new()
{
Name = "producer-forwarding-rule",
Region = "us-west2",
LoadBalancingScheme = "INTERNAL",
BackendService = producerServiceBackend.Id,
AllPorts = true,
Network = pscIlbNetwork.Name,
Subnetwork = pscIlbProducerSubnetwork.Name,
});
var pscIlbNat = new Gcp.Compute.Subnetwork("psc_ilb_nat", new()
{
Name = "psc-ilb-nat",
Region = "us-west2",
Network = pscIlbNetwork.Id,
Purpose = "PRIVATE_SERVICE_CONNECT",
IpCidrRange = "10.1.0.0/16",
});
var pscIlbServiceAttachment = new Gcp.Compute.ServiceAttachment("psc_ilb_service_attachment", new()
{
Name = "my-psc-ilb",
Region = "us-west2",
Description = "A service attachment configured with Terraform",
DomainNames = new[]
{
"gcp.tfacc.hashicorptest.com.",
},
EnableProxyProtocol = true,
ConnectionPreference = "ACCEPT_MANUAL",
NatSubnets = new[]
{
pscIlbNat.Id,
},
TargetService = pscIlbTargetService.Id,
ConsumerRejectLists = new[]
{
"673497134629",
"482878270665",
},
ConsumerAcceptLists = new[]
{
new Gcp.Compute.Inputs.ServiceAttachmentConsumerAcceptListArgs
{
ProjectIdOrNum = "658859330310",
ConnectionLimit = 4,
},
},
});
var pscIlbConsumerAddress = new Gcp.Compute.Address("psc_ilb_consumer_address", new()
{
Name = "psc-ilb-consumer-address",
Region = "us-west2",
Subnetwork = "default",
AddressType = "INTERNAL",
});
var pscIlbConsumer = new Gcp.Compute.ForwardingRule("psc_ilb_consumer", new()
{
Name = "psc-ilb-consumer-forwarding-rule",
Region = "us-west2",
Target = pscIlbServiceAttachment.Id,
LoadBalancingScheme = "",
Network = "default",
IpAddress = pscIlbConsumerAddress.Id,
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
producerServiceHealthCheck, err := compute.NewHealthCheck(ctx, "producer_service_health_check", &compute.HealthCheckArgs{
Name: pulumi.String("producer-service-health-check"),
CheckIntervalSec: pulumi.Int(1),
TimeoutSec: pulumi.Int(1),
TcpHealthCheck: &compute.HealthCheckTcpHealthCheckArgs{
Port: pulumi.Int(80),
},
})
if err != nil {
return err
}
producerServiceBackend, err := compute.NewRegionBackendService(ctx, "producer_service_backend", &compute.RegionBackendServiceArgs{
Name: pulumi.String("producer-service"),
Region: pulumi.String("us-west2"),
HealthChecks: producerServiceHealthCheck.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
pscIlbNetwork, err := compute.NewNetwork(ctx, "psc_ilb_network", &compute.NetworkArgs{
Name: pulumi.String("psc-ilb-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
pscIlbProducerSubnetwork, err := compute.NewSubnetwork(ctx, "psc_ilb_producer_subnetwork", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-producer-subnetwork"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
IpCidrRange: pulumi.String("10.0.0.0/16"),
})
if err != nil {
return err
}
pscIlbTargetService, err := compute.NewForwardingRule(ctx, "psc_ilb_target_service", &compute.ForwardingRuleArgs{
Name: pulumi.String("producer-forwarding-rule"),
Region: pulumi.String("us-west2"),
LoadBalancingScheme: pulumi.String("INTERNAL"),
BackendService: producerServiceBackend.ID().ToIDOutput().ToStringOutput(),
AllPorts: pulumi.Bool(true),
Network: pscIlbNetwork.Name,
Subnetwork: pscIlbProducerSubnetwork.Name,
})
if err != nil {
return err
}
pscIlbNat, err := compute.NewSubnetwork(ctx, "psc_ilb_nat", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-nat"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
Purpose: pulumi.String("PRIVATE_SERVICE_CONNECT"),
IpCidrRange: pulumi.String("10.1.0.0/16"),
})
if err != nil {
return err
}
pscIlbServiceAttachment, err := compute.NewServiceAttachment(ctx, "psc_ilb_service_attachment", &compute.ServiceAttachmentArgs{
Name: pulumi.String("my-psc-ilb"),
Region: pulumi.String("us-west2"),
Description: pulumi.String("A service attachment configured with Terraform"),
DomainNames: pulumi.StringArray{
pulumi.String("gcp.tfacc.hashicorptest.com."),
},
EnableProxyProtocol: pulumi.Bool(true),
ConnectionPreference: pulumi.String("ACCEPT_MANUAL"),
NatSubnets: pulumi.StringArray{
pscIlbNat.ID().ToIDOutput().ToStringOutput(),
},
TargetService: pscIlbTargetService.ID().ToIDOutput().ToStringOutput(),
ConsumerRejectLists: pulumi.StringArray{
pulumi.String("673497134629"),
pulumi.String("482878270665"),
},
ConsumerAcceptLists: compute.ServiceAttachmentConsumerAcceptListArray{
&compute.ServiceAttachmentConsumerAcceptListArgs{
ProjectIdOrNum: pulumi.String("658859330310"),
ConnectionLimit: pulumi.Int(4),
},
},
})
if err != nil {
return err
}
pscIlbConsumerAddress, err := compute.NewAddress(ctx, "psc_ilb_consumer_address", &compute.AddressArgs{
Name: pulumi.String("psc-ilb-consumer-address"),
Region: pulumi.String("us-west2"),
Subnetwork: pulumi.String("default"),
AddressType: pulumi.String("INTERNAL"),
})
if err != nil {
return err
}
_, err = compute.NewForwardingRule(ctx, "psc_ilb_consumer", &compute.ForwardingRuleArgs{
Name: pulumi.String("psc-ilb-consumer-forwarding-rule"),
Region: pulumi.String("us-west2"),
Target: pscIlbServiceAttachment.ID().ToIDOutput().ToStringOutput(),
LoadBalancingScheme: pulumi.String(""),
Network: pulumi.String("default"),
IpAddress: pscIlbConsumerAddress.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_compute_serviceattachment" "psc_ilb_service_attachment" {
name = "my-psc-ilb"
region = "us-west2"
description = "A service attachment configured with Terraform"
domain_names = ["gcp.tfacc.hashicorptest.com."]
enable_proxy_protocol = true
connection_preference = "ACCEPT_MANUAL"
nat_subnets = [gcp_compute_subnetwork.psc_ilb_nat.id]
target_service = gcp_compute_forwardingrule.psc_ilb_target_service.id
consumer_reject_lists = ["673497134629", "482878270665"]
consumer_accept_lists {
project_id_or_num = "658859330310"
connection_limit = 4
}
}
resource "gcp_compute_address" "psc_ilb_consumer_address" {
name = "psc-ilb-consumer-address"
region = "us-west2"
subnetwork = "default"
address_type = "INTERNAL"
}
resource "gcp_compute_forwardingrule" "psc_ilb_consumer" {
name = "psc-ilb-consumer-forwarding-rule"
region = "us-west2"
target = gcp_compute_serviceattachment.psc_ilb_service_attachment.id
load_balancing_scheme = ""
network = "default"
ip_address = gcp_compute_address.psc_ilb_consumer_address.id
}
resource "gcp_compute_forwardingrule" "psc_ilb_target_service" {
name = "producer-forwarding-rule"
region = "us-west2"
load_balancing_scheme = "INTERNAL"
backend_service = gcp_compute_regionbackendservice.producer_service_backend.id
all_ports = true
network = gcp_compute_network.psc_ilb_network.name
subnetwork = gcp_compute_subnetwork.psc_ilb_producer_subnetwork.name
}
resource "gcp_compute_regionbackendservice" "producer_service_backend" {
name = "producer-service"
region = "us-west2"
health_checks = gcp_compute_healthcheck.producer_service_health_check.id
}
resource "gcp_compute_healthcheck" "producer_service_health_check" {
name = "producer-service-health-check"
check_interval_sec = 1
timeout_sec = 1
tcp_health_check = {
port = "80"
}
}
resource "gcp_compute_network" "psc_ilb_network" {
name = "psc-ilb-network"
auto_create_subnetworks = false
}
resource "gcp_compute_subnetwork" "psc_ilb_producer_subnetwork" {
name = "psc-ilb-producer-subnetwork"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
ip_cidr_range = "10.0.0.0/16"
}
resource "gcp_compute_subnetwork" "psc_ilb_nat" {
name = "psc-ilb-nat"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
purpose = "PRIVATE_SERVICE_CONNECT"
ip_cidr_range = "10.1.0.0/16"
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.HealthCheck;
import com.pulumi.gcp.compute.HealthCheckArgs;
import com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;
import com.pulumi.gcp.compute.RegionBackendService;
import com.pulumi.gcp.compute.RegionBackendServiceArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.ForwardingRule;
import com.pulumi.gcp.compute.ForwardingRuleArgs;
import com.pulumi.gcp.compute.ServiceAttachment;
import com.pulumi.gcp.compute.ServiceAttachmentArgs;
import com.pulumi.gcp.compute.inputs.ServiceAttachmentConsumerAcceptListArgs;
import com.pulumi.gcp.compute.Address;
import com.pulumi.gcp.compute.AddressArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var producerServiceHealthCheck = new HealthCheck("producerServiceHealthCheck", HealthCheckArgs.builder()
.name("producer-service-health-check")
.checkIntervalSec(1)
.timeoutSec(1)
.tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()
.port(80)
.build())
.build());
var producerServiceBackend = new RegionBackendService("producerServiceBackend", RegionBackendServiceArgs.builder()
.name("producer-service")
.region("us-west2")
.healthChecks(producerServiceHealthCheck.id())
.build());
var pscIlbNetwork = new Network("pscIlbNetwork", NetworkArgs.builder()
.name("psc-ilb-network")
.autoCreateSubnetworks(false)
.build());
var pscIlbProducerSubnetwork = new Subnetwork("pscIlbProducerSubnetwork", SubnetworkArgs.builder()
.name("psc-ilb-producer-subnetwork")
.region("us-west2")
.network(pscIlbNetwork.id())
.ipCidrRange("10.0.0.0/16")
.build());
var pscIlbTargetService = new ForwardingRule("pscIlbTargetService", ForwardingRuleArgs.builder()
.name("producer-forwarding-rule")
.region("us-west2")
.loadBalancingScheme("INTERNAL")
.backendService(producerServiceBackend.id())
.allPorts(true)
.network(pscIlbNetwork.name())
.subnetwork(pscIlbProducerSubnetwork.name())
.build());
var pscIlbNat = new Subnetwork("pscIlbNat", SubnetworkArgs.builder()
.name("psc-ilb-nat")
.region("us-west2")
.network(pscIlbNetwork.id())
.purpose("PRIVATE_SERVICE_CONNECT")
.ipCidrRange("10.1.0.0/16")
.build());
var pscIlbServiceAttachment = new ServiceAttachment("pscIlbServiceAttachment", ServiceAttachmentArgs.builder()
.name("my-psc-ilb")
.region("us-west2")
.description("A service attachment configured with Terraform")
.domainNames("gcp.tfacc.hashicorptest.com.")
.enableProxyProtocol(true)
.connectionPreference("ACCEPT_MANUAL")
.natSubnets(pscIlbNat.id())
.targetService(pscIlbTargetService.id())
.consumerRejectLists(
"673497134629",
"482878270665")
.consumerAcceptLists(ServiceAttachmentConsumerAcceptListArgs.builder()
.projectIdOrNum("658859330310")
.connectionLimit(4)
.build())
.build());
var pscIlbConsumerAddress = new Address("pscIlbConsumerAddress", AddressArgs.builder()
.name("psc-ilb-consumer-address")
.region("us-west2")
.subnetwork("default")
.addressType("INTERNAL")
.build());
var pscIlbConsumer = new ForwardingRule("pscIlbConsumer", ForwardingRuleArgs.builder()
.name("psc-ilb-consumer-forwarding-rule")
.region("us-west2")
.target(pscIlbServiceAttachment.id())
.loadBalancingScheme("")
.network("default")
.ipAddress(pscIlbConsumerAddress.id())
.build());
}
}
resources:
pscIlbServiceAttachment:
type: gcp:compute:ServiceAttachment
name: psc_ilb_service_attachment
properties:
name: my-psc-ilb
region: us-west2
description: A service attachment configured with Terraform
domainNames:
- gcp.tfacc.hashicorptest.com.
enableProxyProtocol: true
connectionPreference: ACCEPT_MANUAL
natSubnets:
- ${pscIlbNat.id}
targetService: ${pscIlbTargetService.id}
consumerRejectLists:
- '673497134629'
- '482878270665'
consumerAcceptLists:
- projectIdOrNum: '658859330310'
connectionLimit: 4
pscIlbConsumerAddress:
type: gcp:compute:Address
name: psc_ilb_consumer_address
properties:
name: psc-ilb-consumer-address
region: us-west2
subnetwork: default
addressType: INTERNAL
pscIlbConsumer:
type: gcp:compute:ForwardingRule
name: psc_ilb_consumer
properties:
name: psc-ilb-consumer-forwarding-rule
region: us-west2
target: ${pscIlbServiceAttachment.id}
loadBalancingScheme: ""
network: default
ipAddress: ${pscIlbConsumerAddress.id}
pscIlbTargetService:
type: gcp:compute:ForwardingRule
name: psc_ilb_target_service
properties:
name: producer-forwarding-rule
region: us-west2
loadBalancingScheme: INTERNAL
backendService: ${producerServiceBackend.id}
allPorts: true
network: ${pscIlbNetwork.name}
subnetwork: ${pscIlbProducerSubnetwork.name}
producerServiceBackend:
type: gcp:compute:RegionBackendService
name: producer_service_backend
properties:
name: producer-service
region: us-west2
healthChecks: ${producerServiceHealthCheck.id}
producerServiceHealthCheck:
type: gcp:compute:HealthCheck
name: producer_service_health_check
properties:
name: producer-service-health-check
checkIntervalSec: 1
timeoutSec: 1
tcpHealthCheck:
port: '80'
pscIlbNetwork:
type: gcp:compute:Network
name: psc_ilb_network
properties:
name: psc-ilb-network
autoCreateSubnetworks: false
pscIlbProducerSubnetwork:
type: gcp:compute:Subnetwork
name: psc_ilb_producer_subnetwork
properties:
name: psc-ilb-producer-subnetwork
region: us-west2
network: ${pscIlbNetwork.id}
ipCidrRange: 10.0.0.0/16
pscIlbNat:
type: gcp:compute:Subnetwork
name: psc_ilb_nat
properties:
name: psc-ilb-nat
region: us-west2
network: ${pscIlbNetwork.id}
purpose: PRIVATE_SERVICE_CONNECT
ipCidrRange: 10.1.0.0/16
Service Attachment Explicit Networks
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const pscIlbConsumerNetwork = new gcp.compute.Network("psc_ilb_consumer_network", {
name: "psc-ilb-consumer-network",
autoCreateSubnetworks: false,
});
const producerServiceHealthCheck = new gcp.compute.HealthCheck("producer_service_health_check", {
name: "producer-service-health-check",
checkIntervalSec: 1,
timeoutSec: 1,
tcpHealthCheck: {
port: 80,
},
});
const producerServiceBackend = new gcp.compute.RegionBackendService("producer_service_backend", {
name: "producer-service",
region: "us-west2",
healthChecks: producerServiceHealthCheck.id,
});
const pscIlbNetwork = new gcp.compute.Network("psc_ilb_network", {
name: "psc-ilb-network",
autoCreateSubnetworks: false,
});
const pscIlbProducerSubnetwork = new gcp.compute.Subnetwork("psc_ilb_producer_subnetwork", {
name: "psc-ilb-producer-subnetwork",
region: "us-west2",
network: pscIlbNetwork.id,
ipCidrRange: "10.0.0.0/16",
});
const pscIlbTargetService = new gcp.compute.ForwardingRule("psc_ilb_target_service", {
name: "producer-forwarding-rule",
region: "us-west2",
loadBalancingScheme: "INTERNAL",
backendService: producerServiceBackend.id,
allPorts: true,
network: pscIlbNetwork.name,
subnetwork: pscIlbProducerSubnetwork.name,
});
const pscIlbNat = new gcp.compute.Subnetwork("psc_ilb_nat", {
name: "psc-ilb-nat",
region: "us-west2",
network: pscIlbNetwork.id,
purpose: "PRIVATE_SERVICE_CONNECT",
ipCidrRange: "10.1.0.0/16",
});
const pscIlbServiceAttachment = new gcp.compute.ServiceAttachment("psc_ilb_service_attachment", {
name: "my-psc-ilb",
region: "us-west2",
description: "A service attachment configured with Terraform",
enableProxyProtocol: false,
connectionPreference: "ACCEPT_MANUAL",
natSubnets: [pscIlbNat.id],
targetService: pscIlbTargetService.id,
consumerAcceptLists: [{
networkUrl: pscIlbConsumerNetwork.selfLink,
connectionLimit: 1,
}],
});
const pscIlbConsumerSubnetwork = new gcp.compute.Subnetwork("psc_ilb_consumer_subnetwork", {
name: "psc-ilb-consumer-network",
ipCidrRange: "10.0.0.0/16",
region: "us-west2",
network: pscIlbConsumerNetwork.id,
});
const pscIlbConsumerAddress = new gcp.compute.Address("psc_ilb_consumer_address", {
name: "psc-ilb-consumer-address",
region: "us-west2",
subnetwork: pscIlbConsumerSubnetwork.id,
addressType: "INTERNAL",
});
const pscIlbConsumer = new gcp.compute.ForwardingRule("psc_ilb_consumer", {
name: "psc-ilb-consumer-forwarding-rule",
region: "us-west2",
target: pscIlbServiceAttachment.id,
loadBalancingScheme: "",
network: pscIlbConsumerNetwork.id,
subnetwork: pscIlbConsumerSubnetwork.id,
ipAddress: pscIlbConsumerAddress.id,
});
import pulumi
import pulumi_gcp as gcp
psc_ilb_consumer_network = gcp.compute.Network("psc_ilb_consumer_network",
name="psc-ilb-consumer-network",
auto_create_subnetworks=False)
producer_service_health_check = gcp.compute.HealthCheck("producer_service_health_check",
name="producer-service-health-check",
check_interval_sec=1,
timeout_sec=1,
tcp_health_check={
"port": 80,
})
producer_service_backend = gcp.compute.RegionBackendService("producer_service_backend",
name="producer-service",
region="us-west2",
health_checks=producer_service_health_check.id)
psc_ilb_network = gcp.compute.Network("psc_ilb_network",
name="psc-ilb-network",
auto_create_subnetworks=False)
psc_ilb_producer_subnetwork = gcp.compute.Subnetwork("psc_ilb_producer_subnetwork",
name="psc-ilb-producer-subnetwork",
region="us-west2",
network=psc_ilb_network.id,
ip_cidr_range="10.0.0.0/16")
psc_ilb_target_service = gcp.compute.ForwardingRule("psc_ilb_target_service",
name="producer-forwarding-rule",
region="us-west2",
load_balancing_scheme="INTERNAL",
backend_service=producer_service_backend.id,
all_ports=True,
network=psc_ilb_network.name,
subnetwork=psc_ilb_producer_subnetwork.name)
psc_ilb_nat = gcp.compute.Subnetwork("psc_ilb_nat",
name="psc-ilb-nat",
region="us-west2",
network=psc_ilb_network.id,
purpose="PRIVATE_SERVICE_CONNECT",
ip_cidr_range="10.1.0.0/16")
psc_ilb_service_attachment = gcp.compute.ServiceAttachment("psc_ilb_service_attachment",
name="my-psc-ilb",
region="us-west2",
description="A service attachment configured with Terraform",
enable_proxy_protocol=False,
connection_preference="ACCEPT_MANUAL",
nat_subnets=[psc_ilb_nat.id],
target_service=psc_ilb_target_service.id,
consumer_accept_lists=[{
"network_url": psc_ilb_consumer_network.self_link,
"connection_limit": 1,
}])
psc_ilb_consumer_subnetwork = gcp.compute.Subnetwork("psc_ilb_consumer_subnetwork",
name="psc-ilb-consumer-network",
ip_cidr_range="10.0.0.0/16",
region="us-west2",
network=psc_ilb_consumer_network.id)
psc_ilb_consumer_address = gcp.compute.Address("psc_ilb_consumer_address",
name="psc-ilb-consumer-address",
region="us-west2",
subnetwork=psc_ilb_consumer_subnetwork.id,
address_type="INTERNAL")
psc_ilb_consumer = gcp.compute.ForwardingRule("psc_ilb_consumer",
name="psc-ilb-consumer-forwarding-rule",
region="us-west2",
target=psc_ilb_service_attachment.id,
load_balancing_scheme="",
network=psc_ilb_consumer_network.id,
subnetwork=psc_ilb_consumer_subnetwork.id,
ip_address=psc_ilb_consumer_address.id)
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var pscIlbConsumerNetwork = new Gcp.Compute.Network("psc_ilb_consumer_network", new()
{
Name = "psc-ilb-consumer-network",
AutoCreateSubnetworks = false,
});
var producerServiceHealthCheck = new Gcp.Compute.HealthCheck("producer_service_health_check", new()
{
Name = "producer-service-health-check",
CheckIntervalSec = 1,
TimeoutSec = 1,
TcpHealthCheck = new Gcp.Compute.Inputs.HealthCheckTcpHealthCheckArgs
{
Port = 80,
},
});
var producerServiceBackend = new Gcp.Compute.RegionBackendService("producer_service_backend", new()
{
Name = "producer-service",
Region = "us-west2",
HealthChecks = producerServiceHealthCheck.Id,
});
var pscIlbNetwork = new Gcp.Compute.Network("psc_ilb_network", new()
{
Name = "psc-ilb-network",
AutoCreateSubnetworks = false,
});
var pscIlbProducerSubnetwork = new Gcp.Compute.Subnetwork("psc_ilb_producer_subnetwork", new()
{
Name = "psc-ilb-producer-subnetwork",
Region = "us-west2",
Network = pscIlbNetwork.Id,
IpCidrRange = "10.0.0.0/16",
});
var pscIlbTargetService = new Gcp.Compute.ForwardingRule("psc_ilb_target_service", new()
{
Name = "producer-forwarding-rule",
Region = "us-west2",
LoadBalancingScheme = "INTERNAL",
BackendService = producerServiceBackend.Id,
AllPorts = true,
Network = pscIlbNetwork.Name,
Subnetwork = pscIlbProducerSubnetwork.Name,
});
var pscIlbNat = new Gcp.Compute.Subnetwork("psc_ilb_nat", new()
{
Name = "psc-ilb-nat",
Region = "us-west2",
Network = pscIlbNetwork.Id,
Purpose = "PRIVATE_SERVICE_CONNECT",
IpCidrRange = "10.1.0.0/16",
});
var pscIlbServiceAttachment = new Gcp.Compute.ServiceAttachment("psc_ilb_service_attachment", new()
{
Name = "my-psc-ilb",
Region = "us-west2",
Description = "A service attachment configured with Terraform",
EnableProxyProtocol = false,
ConnectionPreference = "ACCEPT_MANUAL",
NatSubnets = new[]
{
pscIlbNat.Id,
},
TargetService = pscIlbTargetService.Id,
ConsumerAcceptLists = new[]
{
new Gcp.Compute.Inputs.ServiceAttachmentConsumerAcceptListArgs
{
NetworkUrl = pscIlbConsumerNetwork.SelfLink,
ConnectionLimit = 1,
},
},
});
var pscIlbConsumerSubnetwork = new Gcp.Compute.Subnetwork("psc_ilb_consumer_subnetwork", new()
{
Name = "psc-ilb-consumer-network",
IpCidrRange = "10.0.0.0/16",
Region = "us-west2",
Network = pscIlbConsumerNetwork.Id,
});
var pscIlbConsumerAddress = new Gcp.Compute.Address("psc_ilb_consumer_address", new()
{
Name = "psc-ilb-consumer-address",
Region = "us-west2",
Subnetwork = pscIlbConsumerSubnetwork.Id,
AddressType = "INTERNAL",
});
var pscIlbConsumer = new Gcp.Compute.ForwardingRule("psc_ilb_consumer", new()
{
Name = "psc-ilb-consumer-forwarding-rule",
Region = "us-west2",
Target = pscIlbServiceAttachment.Id,
LoadBalancingScheme = "",
Network = pscIlbConsumerNetwork.Id,
Subnetwork = pscIlbConsumerSubnetwork.Id,
IpAddress = pscIlbConsumerAddress.Id,
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
pscIlbConsumerNetwork, err := compute.NewNetwork(ctx, "psc_ilb_consumer_network", &compute.NetworkArgs{
Name: pulumi.String("psc-ilb-consumer-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
producerServiceHealthCheck, err := compute.NewHealthCheck(ctx, "producer_service_health_check", &compute.HealthCheckArgs{
Name: pulumi.String("producer-service-health-check"),
CheckIntervalSec: pulumi.Int(1),
TimeoutSec: pulumi.Int(1),
TcpHealthCheck: &compute.HealthCheckTcpHealthCheckArgs{
Port: pulumi.Int(80),
},
})
if err != nil {
return err
}
producerServiceBackend, err := compute.NewRegionBackendService(ctx, "producer_service_backend", &compute.RegionBackendServiceArgs{
Name: pulumi.String("producer-service"),
Region: pulumi.String("us-west2"),
HealthChecks: producerServiceHealthCheck.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
pscIlbNetwork, err := compute.NewNetwork(ctx, "psc_ilb_network", &compute.NetworkArgs{
Name: pulumi.String("psc-ilb-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
pscIlbProducerSubnetwork, err := compute.NewSubnetwork(ctx, "psc_ilb_producer_subnetwork", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-producer-subnetwork"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
IpCidrRange: pulumi.String("10.0.0.0/16"),
})
if err != nil {
return err
}
pscIlbTargetService, err := compute.NewForwardingRule(ctx, "psc_ilb_target_service", &compute.ForwardingRuleArgs{
Name: pulumi.String("producer-forwarding-rule"),
Region: pulumi.String("us-west2"),
LoadBalancingScheme: pulumi.String("INTERNAL"),
BackendService: producerServiceBackend.ID().ToIDOutput().ToStringOutput(),
AllPorts: pulumi.Bool(true),
Network: pscIlbNetwork.Name,
Subnetwork: pscIlbProducerSubnetwork.Name,
})
if err != nil {
return err
}
pscIlbNat, err := compute.NewSubnetwork(ctx, "psc_ilb_nat", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-nat"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
Purpose: pulumi.String("PRIVATE_SERVICE_CONNECT"),
IpCidrRange: pulumi.String("10.1.0.0/16"),
})
if err != nil {
return err
}
pscIlbServiceAttachment, err := compute.NewServiceAttachment(ctx, "psc_ilb_service_attachment", &compute.ServiceAttachmentArgs{
Name: pulumi.String("my-psc-ilb"),
Region: pulumi.String("us-west2"),
Description: pulumi.String("A service attachment configured with Terraform"),
EnableProxyProtocol: pulumi.Bool(false),
ConnectionPreference: pulumi.String("ACCEPT_MANUAL"),
NatSubnets: pulumi.StringArray{
pscIlbNat.ID().ToIDOutput().ToStringOutput(),
},
TargetService: pscIlbTargetService.ID().ToIDOutput().ToStringOutput(),
ConsumerAcceptLists: compute.ServiceAttachmentConsumerAcceptListArray{
&compute.ServiceAttachmentConsumerAcceptListArgs{
NetworkUrl: pscIlbConsumerNetwork.SelfLink,
ConnectionLimit: pulumi.Int(1),
},
},
})
if err != nil {
return err
}
pscIlbConsumerSubnetwork, err := compute.NewSubnetwork(ctx, "psc_ilb_consumer_subnetwork", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-consumer-network"),
IpCidrRange: pulumi.String("10.0.0.0/16"),
Region: pulumi.String("us-west2"),
Network: pscIlbConsumerNetwork.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
pscIlbConsumerAddress, err := compute.NewAddress(ctx, "psc_ilb_consumer_address", &compute.AddressArgs{
Name: pulumi.String("psc-ilb-consumer-address"),
Region: pulumi.String("us-west2"),
Subnetwork: pscIlbConsumerSubnetwork.ID().ToIDOutput().ToStringOutput(),
AddressType: pulumi.String("INTERNAL"),
})
if err != nil {
return err
}
_, err = compute.NewForwardingRule(ctx, "psc_ilb_consumer", &compute.ForwardingRuleArgs{
Name: pulumi.String("psc-ilb-consumer-forwarding-rule"),
Region: pulumi.String("us-west2"),
Target: pscIlbServiceAttachment.ID().ToIDOutput().ToStringOutput(),
LoadBalancingScheme: pulumi.String(""),
Network: pscIlbConsumerNetwork.ID().ToIDOutput().ToStringOutput(),
Subnetwork: pscIlbConsumerSubnetwork.ID().ToIDOutput().ToStringOutput(),
IpAddress: pscIlbConsumerAddress.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_compute_serviceattachment" "psc_ilb_service_attachment" {
name = "my-psc-ilb"
region = "us-west2"
description = "A service attachment configured with Terraform"
enable_proxy_protocol = false
connection_preference = "ACCEPT_MANUAL"
nat_subnets = [gcp_compute_subnetwork.psc_ilb_nat.id]
target_service = gcp_compute_forwardingrule.psc_ilb_target_service.id
consumer_accept_lists {
network_url = gcp_compute_network.psc_ilb_consumer_network.self_link
connection_limit = 1
}
}
resource "gcp_compute_network" "psc_ilb_consumer_network" {
name = "psc-ilb-consumer-network"
auto_create_subnetworks = false
}
resource "gcp_compute_subnetwork" "psc_ilb_consumer_subnetwork" {
name = "psc-ilb-consumer-network"
ip_cidr_range = "10.0.0.0/16"
region = "us-west2"
network = gcp_compute_network.psc_ilb_consumer_network.id
}
resource "gcp_compute_address" "psc_ilb_consumer_address" {
name = "psc-ilb-consumer-address"
region = "us-west2"
subnetwork = gcp_compute_subnetwork.psc_ilb_consumer_subnetwork.id
address_type = "INTERNAL"
}
resource "gcp_compute_forwardingrule" "psc_ilb_consumer" {
name = "psc-ilb-consumer-forwarding-rule"
region = "us-west2"
target = gcp_compute_serviceattachment.psc_ilb_service_attachment.id
load_balancing_scheme = ""
network = gcp_compute_network.psc_ilb_consumer_network.id
subnetwork = gcp_compute_subnetwork.psc_ilb_consumer_subnetwork.id
ip_address = gcp_compute_address.psc_ilb_consumer_address.id
}
resource "gcp_compute_forwardingrule" "psc_ilb_target_service" {
name = "producer-forwarding-rule"
region = "us-west2"
load_balancing_scheme = "INTERNAL"
backend_service = gcp_compute_regionbackendservice.producer_service_backend.id
all_ports = true
network = gcp_compute_network.psc_ilb_network.name
subnetwork = gcp_compute_subnetwork.psc_ilb_producer_subnetwork.name
}
resource "gcp_compute_regionbackendservice" "producer_service_backend" {
name = "producer-service"
region = "us-west2"
health_checks = gcp_compute_healthcheck.producer_service_health_check.id
}
resource "gcp_compute_healthcheck" "producer_service_health_check" {
name = "producer-service-health-check"
check_interval_sec = 1
timeout_sec = 1
tcp_health_check = {
port = "80"
}
}
resource "gcp_compute_network" "psc_ilb_network" {
name = "psc-ilb-network"
auto_create_subnetworks = false
}
resource "gcp_compute_subnetwork" "psc_ilb_producer_subnetwork" {
name = "psc-ilb-producer-subnetwork"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
ip_cidr_range = "10.0.0.0/16"
}
resource "gcp_compute_subnetwork" "psc_ilb_nat" {
name = "psc-ilb-nat"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
purpose = "PRIVATE_SERVICE_CONNECT"
ip_cidr_range = "10.1.0.0/16"
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.HealthCheck;
import com.pulumi.gcp.compute.HealthCheckArgs;
import com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;
import com.pulumi.gcp.compute.RegionBackendService;
import com.pulumi.gcp.compute.RegionBackendServiceArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.ForwardingRule;
import com.pulumi.gcp.compute.ForwardingRuleArgs;
import com.pulumi.gcp.compute.ServiceAttachment;
import com.pulumi.gcp.compute.ServiceAttachmentArgs;
import com.pulumi.gcp.compute.inputs.ServiceAttachmentConsumerAcceptListArgs;
import com.pulumi.gcp.compute.Address;
import com.pulumi.gcp.compute.AddressArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var pscIlbConsumerNetwork = new Network("pscIlbConsumerNetwork", NetworkArgs.builder()
.name("psc-ilb-consumer-network")
.autoCreateSubnetworks(false)
.build());
var producerServiceHealthCheck = new HealthCheck("producerServiceHealthCheck", HealthCheckArgs.builder()
.name("producer-service-health-check")
.checkIntervalSec(1)
.timeoutSec(1)
.tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()
.port(80)
.build())
.build());
var producerServiceBackend = new RegionBackendService("producerServiceBackend", RegionBackendServiceArgs.builder()
.name("producer-service")
.region("us-west2")
.healthChecks(producerServiceHealthCheck.id())
.build());
var pscIlbNetwork = new Network("pscIlbNetwork", NetworkArgs.builder()
.name("psc-ilb-network")
.autoCreateSubnetworks(false)
.build());
var pscIlbProducerSubnetwork = new Subnetwork("pscIlbProducerSubnetwork", SubnetworkArgs.builder()
.name("psc-ilb-producer-subnetwork")
.region("us-west2")
.network(pscIlbNetwork.id())
.ipCidrRange("10.0.0.0/16")
.build());
var pscIlbTargetService = new ForwardingRule("pscIlbTargetService", ForwardingRuleArgs.builder()
.name("producer-forwarding-rule")
.region("us-west2")
.loadBalancingScheme("INTERNAL")
.backendService(producerServiceBackend.id())
.allPorts(true)
.network(pscIlbNetwork.name())
.subnetwork(pscIlbProducerSubnetwork.name())
.build());
var pscIlbNat = new Subnetwork("pscIlbNat", SubnetworkArgs.builder()
.name("psc-ilb-nat")
.region("us-west2")
.network(pscIlbNetwork.id())
.purpose("PRIVATE_SERVICE_CONNECT")
.ipCidrRange("10.1.0.0/16")
.build());
var pscIlbServiceAttachment = new ServiceAttachment("pscIlbServiceAttachment", ServiceAttachmentArgs.builder()
.name("my-psc-ilb")
.region("us-west2")
.description("A service attachment configured with Terraform")
.enableProxyProtocol(false)
.connectionPreference("ACCEPT_MANUAL")
.natSubnets(pscIlbNat.id())
.targetService(pscIlbTargetService.id())
.consumerAcceptLists(ServiceAttachmentConsumerAcceptListArgs.builder()
.networkUrl(pscIlbConsumerNetwork.selfLink())
.connectionLimit(1)
.build())
.build());
var pscIlbConsumerSubnetwork = new Subnetwork("pscIlbConsumerSubnetwork", SubnetworkArgs.builder()
.name("psc-ilb-consumer-network")
.ipCidrRange("10.0.0.0/16")
.region("us-west2")
.network(pscIlbConsumerNetwork.id())
.build());
var pscIlbConsumerAddress = new Address("pscIlbConsumerAddress", AddressArgs.builder()
.name("psc-ilb-consumer-address")
.region("us-west2")
.subnetwork(pscIlbConsumerSubnetwork.id())
.addressType("INTERNAL")
.build());
var pscIlbConsumer = new ForwardingRule("pscIlbConsumer", ForwardingRuleArgs.builder()
.name("psc-ilb-consumer-forwarding-rule")
.region("us-west2")
.target(pscIlbServiceAttachment.id())
.loadBalancingScheme("")
.network(pscIlbConsumerNetwork.id())
.subnetwork(pscIlbConsumerSubnetwork.id())
.ipAddress(pscIlbConsumerAddress.id())
.build());
}
}
resources:
pscIlbServiceAttachment:
type: gcp:compute:ServiceAttachment
name: psc_ilb_service_attachment
properties:
name: my-psc-ilb
region: us-west2
description: A service attachment configured with Terraform
enableProxyProtocol: false
connectionPreference: ACCEPT_MANUAL
natSubnets:
- ${pscIlbNat.id}
targetService: ${pscIlbTargetService.id}
consumerAcceptLists:
- networkUrl: ${pscIlbConsumerNetwork.selfLink}
connectionLimit: 1
pscIlbConsumerNetwork:
type: gcp:compute:Network
name: psc_ilb_consumer_network
properties:
name: psc-ilb-consumer-network
autoCreateSubnetworks: false
pscIlbConsumerSubnetwork:
type: gcp:compute:Subnetwork
name: psc_ilb_consumer_subnetwork
properties:
name: psc-ilb-consumer-network
ipCidrRange: 10.0.0.0/16
region: us-west2
network: ${pscIlbConsumerNetwork.id}
pscIlbConsumerAddress:
type: gcp:compute:Address
name: psc_ilb_consumer_address
properties:
name: psc-ilb-consumer-address
region: us-west2
subnetwork: ${pscIlbConsumerSubnetwork.id}
addressType: INTERNAL
pscIlbConsumer:
type: gcp:compute:ForwardingRule
name: psc_ilb_consumer
properties:
name: psc-ilb-consumer-forwarding-rule
region: us-west2
target: ${pscIlbServiceAttachment.id}
loadBalancingScheme: ""
network: ${pscIlbConsumerNetwork.id}
subnetwork: ${pscIlbConsumerSubnetwork.id}
ipAddress: ${pscIlbConsumerAddress.id}
pscIlbTargetService:
type: gcp:compute:ForwardingRule
name: psc_ilb_target_service
properties:
name: producer-forwarding-rule
region: us-west2
loadBalancingScheme: INTERNAL
backendService: ${producerServiceBackend.id}
allPorts: true
network: ${pscIlbNetwork.name}
subnetwork: ${pscIlbProducerSubnetwork.name}
producerServiceBackend:
type: gcp:compute:RegionBackendService
name: producer_service_backend
properties:
name: producer-service
region: us-west2
healthChecks: ${producerServiceHealthCheck.id}
producerServiceHealthCheck:
type: gcp:compute:HealthCheck
name: producer_service_health_check
properties:
name: producer-service-health-check
checkIntervalSec: 1
timeoutSec: 1
tcpHealthCheck:
port: '80'
pscIlbNetwork:
type: gcp:compute:Network
name: psc_ilb_network
properties:
name: psc-ilb-network
autoCreateSubnetworks: false
pscIlbProducerSubnetwork:
type: gcp:compute:Subnetwork
name: psc_ilb_producer_subnetwork
properties:
name: psc-ilb-producer-subnetwork
region: us-west2
network: ${pscIlbNetwork.id}
ipCidrRange: 10.0.0.0/16
pscIlbNat:
type: gcp:compute:Subnetwork
name: psc_ilb_nat
properties:
name: psc-ilb-nat
region: us-west2
network: ${pscIlbNetwork.id}
purpose: PRIVATE_SERVICE_CONNECT
ipCidrRange: 10.1.0.0/16
Service Attachment Reconcile Connections
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const producerServiceHealthCheck = new gcp.compute.HealthCheck("producer_service_health_check", {
name: "producer-service-health-check",
checkIntervalSec: 1,
timeoutSec: 1,
tcpHealthCheck: {
port: 80,
},
});
const producerServiceBackend = new gcp.compute.RegionBackendService("producer_service_backend", {
name: "producer-service",
region: "us-west2",
healthChecks: producerServiceHealthCheck.id,
});
const pscIlbNetwork = new gcp.compute.Network("psc_ilb_network", {
name: "psc-ilb-network",
autoCreateSubnetworks: false,
});
const pscIlbProducerSubnetwork = new gcp.compute.Subnetwork("psc_ilb_producer_subnetwork", {
name: "psc-ilb-producer-subnetwork",
region: "us-west2",
network: pscIlbNetwork.id,
ipCidrRange: "10.0.0.0/16",
});
const pscIlbTargetService = new gcp.compute.ForwardingRule("psc_ilb_target_service", {
name: "producer-forwarding-rule",
region: "us-west2",
loadBalancingScheme: "INTERNAL",
backendService: producerServiceBackend.id,
allPorts: true,
network: pscIlbNetwork.name,
subnetwork: pscIlbProducerSubnetwork.name,
});
const pscIlbNat = new gcp.compute.Subnetwork("psc_ilb_nat", {
name: "psc-ilb-nat",
region: "us-west2",
network: pscIlbNetwork.id,
purpose: "PRIVATE_SERVICE_CONNECT",
ipCidrRange: "10.1.0.0/16",
});
const pscIlbServiceAttachment = new gcp.compute.ServiceAttachment("psc_ilb_service_attachment", {
name: "my-psc-ilb",
region: "us-west2",
description: "A service attachment configured with Terraform",
domainNames: ["gcp.tfacc.hashicorptest.com."],
enableProxyProtocol: true,
connectionPreference: "ACCEPT_MANUAL",
natSubnets: [pscIlbNat.id],
targetService: pscIlbTargetService.id,
consumerRejectLists: [
"673497134629",
"482878270665",
],
consumerAcceptLists: [{
projectIdOrNum: "658859330310",
connectionLimit: 4,
}],
reconcileConnections: false,
});
import pulumi
import pulumi_gcp as gcp
producer_service_health_check = gcp.compute.HealthCheck("producer_service_health_check",
name="producer-service-health-check",
check_interval_sec=1,
timeout_sec=1,
tcp_health_check={
"port": 80,
})
producer_service_backend = gcp.compute.RegionBackendService("producer_service_backend",
name="producer-service",
region="us-west2",
health_checks=producer_service_health_check.id)
psc_ilb_network = gcp.compute.Network("psc_ilb_network",
name="psc-ilb-network",
auto_create_subnetworks=False)
psc_ilb_producer_subnetwork = gcp.compute.Subnetwork("psc_ilb_producer_subnetwork",
name="psc-ilb-producer-subnetwork",
region="us-west2",
network=psc_ilb_network.id,
ip_cidr_range="10.0.0.0/16")
psc_ilb_target_service = gcp.compute.ForwardingRule("psc_ilb_target_service",
name="producer-forwarding-rule",
region="us-west2",
load_balancing_scheme="INTERNAL",
backend_service=producer_service_backend.id,
all_ports=True,
network=psc_ilb_network.name,
subnetwork=psc_ilb_producer_subnetwork.name)
psc_ilb_nat = gcp.compute.Subnetwork("psc_ilb_nat",
name="psc-ilb-nat",
region="us-west2",
network=psc_ilb_network.id,
purpose="PRIVATE_SERVICE_CONNECT",
ip_cidr_range="10.1.0.0/16")
psc_ilb_service_attachment = gcp.compute.ServiceAttachment("psc_ilb_service_attachment",
name="my-psc-ilb",
region="us-west2",
description="A service attachment configured with Terraform",
domain_names=["gcp.tfacc.hashicorptest.com."],
enable_proxy_protocol=True,
connection_preference="ACCEPT_MANUAL",
nat_subnets=[psc_ilb_nat.id],
target_service=psc_ilb_target_service.id,
consumer_reject_lists=[
"673497134629",
"482878270665",
],
consumer_accept_lists=[{
"project_id_or_num": "658859330310",
"connection_limit": 4,
}],
reconcile_connections=False)
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var producerServiceHealthCheck = new Gcp.Compute.HealthCheck("producer_service_health_check", new()
{
Name = "producer-service-health-check",
CheckIntervalSec = 1,
TimeoutSec = 1,
TcpHealthCheck = new Gcp.Compute.Inputs.HealthCheckTcpHealthCheckArgs
{
Port = 80,
},
});
var producerServiceBackend = new Gcp.Compute.RegionBackendService("producer_service_backend", new()
{
Name = "producer-service",
Region = "us-west2",
HealthChecks = producerServiceHealthCheck.Id,
});
var pscIlbNetwork = new Gcp.Compute.Network("psc_ilb_network", new()
{
Name = "psc-ilb-network",
AutoCreateSubnetworks = false,
});
var pscIlbProducerSubnetwork = new Gcp.Compute.Subnetwork("psc_ilb_producer_subnetwork", new()
{
Name = "psc-ilb-producer-subnetwork",
Region = "us-west2",
Network = pscIlbNetwork.Id,
IpCidrRange = "10.0.0.0/16",
});
var pscIlbTargetService = new Gcp.Compute.ForwardingRule("psc_ilb_target_service", new()
{
Name = "producer-forwarding-rule",
Region = "us-west2",
LoadBalancingScheme = "INTERNAL",
BackendService = producerServiceBackend.Id,
AllPorts = true,
Network = pscIlbNetwork.Name,
Subnetwork = pscIlbProducerSubnetwork.Name,
});
var pscIlbNat = new Gcp.Compute.Subnetwork("psc_ilb_nat", new()
{
Name = "psc-ilb-nat",
Region = "us-west2",
Network = pscIlbNetwork.Id,
Purpose = "PRIVATE_SERVICE_CONNECT",
IpCidrRange = "10.1.0.0/16",
});
var pscIlbServiceAttachment = new Gcp.Compute.ServiceAttachment("psc_ilb_service_attachment", new()
{
Name = "my-psc-ilb",
Region = "us-west2",
Description = "A service attachment configured with Terraform",
DomainNames = new[]
{
"gcp.tfacc.hashicorptest.com.",
},
EnableProxyProtocol = true,
ConnectionPreference = "ACCEPT_MANUAL",
NatSubnets = new[]
{
pscIlbNat.Id,
},
TargetService = pscIlbTargetService.Id,
ConsumerRejectLists = new[]
{
"673497134629",
"482878270665",
},
ConsumerAcceptLists = new[]
{
new Gcp.Compute.Inputs.ServiceAttachmentConsumerAcceptListArgs
{
ProjectIdOrNum = "658859330310",
ConnectionLimit = 4,
},
},
ReconcileConnections = false,
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
producerServiceHealthCheck, err := compute.NewHealthCheck(ctx, "producer_service_health_check", &compute.HealthCheckArgs{
Name: pulumi.String("producer-service-health-check"),
CheckIntervalSec: pulumi.Int(1),
TimeoutSec: pulumi.Int(1),
TcpHealthCheck: &compute.HealthCheckTcpHealthCheckArgs{
Port: pulumi.Int(80),
},
})
if err != nil {
return err
}
producerServiceBackend, err := compute.NewRegionBackendService(ctx, "producer_service_backend", &compute.RegionBackendServiceArgs{
Name: pulumi.String("producer-service"),
Region: pulumi.String("us-west2"),
HealthChecks: producerServiceHealthCheck.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
pscIlbNetwork, err := compute.NewNetwork(ctx, "psc_ilb_network", &compute.NetworkArgs{
Name: pulumi.String("psc-ilb-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
pscIlbProducerSubnetwork, err := compute.NewSubnetwork(ctx, "psc_ilb_producer_subnetwork", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-producer-subnetwork"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
IpCidrRange: pulumi.String("10.0.0.0/16"),
})
if err != nil {
return err
}
pscIlbTargetService, err := compute.NewForwardingRule(ctx, "psc_ilb_target_service", &compute.ForwardingRuleArgs{
Name: pulumi.String("producer-forwarding-rule"),
Region: pulumi.String("us-west2"),
LoadBalancingScheme: pulumi.String("INTERNAL"),
BackendService: producerServiceBackend.ID().ToIDOutput().ToStringOutput(),
AllPorts: pulumi.Bool(true),
Network: pscIlbNetwork.Name,
Subnetwork: pscIlbProducerSubnetwork.Name,
})
if err != nil {
return err
}
pscIlbNat, err := compute.NewSubnetwork(ctx, "psc_ilb_nat", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-nat"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
Purpose: pulumi.String("PRIVATE_SERVICE_CONNECT"),
IpCidrRange: pulumi.String("10.1.0.0/16"),
})
if err != nil {
return err
}
_, err = compute.NewServiceAttachment(ctx, "psc_ilb_service_attachment", &compute.ServiceAttachmentArgs{
Name: pulumi.String("my-psc-ilb"),
Region: pulumi.String("us-west2"),
Description: pulumi.String("A service attachment configured with Terraform"),
DomainNames: pulumi.StringArray{
pulumi.String("gcp.tfacc.hashicorptest.com."),
},
EnableProxyProtocol: pulumi.Bool(true),
ConnectionPreference: pulumi.String("ACCEPT_MANUAL"),
NatSubnets: pulumi.StringArray{
pscIlbNat.ID().ToIDOutput().ToStringOutput(),
},
TargetService: pscIlbTargetService.ID().ToIDOutput().ToStringOutput(),
ConsumerRejectLists: pulumi.StringArray{
pulumi.String("673497134629"),
pulumi.String("482878270665"),
},
ConsumerAcceptLists: compute.ServiceAttachmentConsumerAcceptListArray{
&compute.ServiceAttachmentConsumerAcceptListArgs{
ProjectIdOrNum: pulumi.String("658859330310"),
ConnectionLimit: pulumi.Int(4),
},
},
ReconcileConnections: pulumi.Bool(false),
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_compute_serviceattachment" "psc_ilb_service_attachment" {
name = "my-psc-ilb"
region = "us-west2"
description = "A service attachment configured with Terraform"
domain_names = ["gcp.tfacc.hashicorptest.com."]
enable_proxy_protocol = true
connection_preference = "ACCEPT_MANUAL"
nat_subnets = [gcp_compute_subnetwork.psc_ilb_nat.id]
target_service = gcp_compute_forwardingrule.psc_ilb_target_service.id
consumer_reject_lists = ["673497134629", "482878270665"]
consumer_accept_lists {
project_id_or_num = "658859330310"
connection_limit = 4
}
reconcile_connections = false
}
resource "gcp_compute_forwardingrule" "psc_ilb_target_service" {
name = "producer-forwarding-rule"
region = "us-west2"
load_balancing_scheme = "INTERNAL"
backend_service = gcp_compute_regionbackendservice.producer_service_backend.id
all_ports = true
network = gcp_compute_network.psc_ilb_network.name
subnetwork = gcp_compute_subnetwork.psc_ilb_producer_subnetwork.name
}
resource "gcp_compute_regionbackendservice" "producer_service_backend" {
name = "producer-service"
region = "us-west2"
health_checks = gcp_compute_healthcheck.producer_service_health_check.id
}
resource "gcp_compute_healthcheck" "producer_service_health_check" {
name = "producer-service-health-check"
check_interval_sec = 1
timeout_sec = 1
tcp_health_check = {
port = "80"
}
}
resource "gcp_compute_network" "psc_ilb_network" {
name = "psc-ilb-network"
auto_create_subnetworks = false
}
resource "gcp_compute_subnetwork" "psc_ilb_producer_subnetwork" {
name = "psc-ilb-producer-subnetwork"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
ip_cidr_range = "10.0.0.0/16"
}
resource "gcp_compute_subnetwork" "psc_ilb_nat" {
name = "psc-ilb-nat"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
purpose = "PRIVATE_SERVICE_CONNECT"
ip_cidr_range = "10.1.0.0/16"
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.HealthCheck;
import com.pulumi.gcp.compute.HealthCheckArgs;
import com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;
import com.pulumi.gcp.compute.RegionBackendService;
import com.pulumi.gcp.compute.RegionBackendServiceArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.ForwardingRule;
import com.pulumi.gcp.compute.ForwardingRuleArgs;
import com.pulumi.gcp.compute.ServiceAttachment;
import com.pulumi.gcp.compute.ServiceAttachmentArgs;
import com.pulumi.gcp.compute.inputs.ServiceAttachmentConsumerAcceptListArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var producerServiceHealthCheck = new HealthCheck("producerServiceHealthCheck", HealthCheckArgs.builder()
.name("producer-service-health-check")
.checkIntervalSec(1)
.timeoutSec(1)
.tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()
.port(80)
.build())
.build());
var producerServiceBackend = new RegionBackendService("producerServiceBackend", RegionBackendServiceArgs.builder()
.name("producer-service")
.region("us-west2")
.healthChecks(producerServiceHealthCheck.id())
.build());
var pscIlbNetwork = new Network("pscIlbNetwork", NetworkArgs.builder()
.name("psc-ilb-network")
.autoCreateSubnetworks(false)
.build());
var pscIlbProducerSubnetwork = new Subnetwork("pscIlbProducerSubnetwork", SubnetworkArgs.builder()
.name("psc-ilb-producer-subnetwork")
.region("us-west2")
.network(pscIlbNetwork.id())
.ipCidrRange("10.0.0.0/16")
.build());
var pscIlbTargetService = new ForwardingRule("pscIlbTargetService", ForwardingRuleArgs.builder()
.name("producer-forwarding-rule")
.region("us-west2")
.loadBalancingScheme("INTERNAL")
.backendService(producerServiceBackend.id())
.allPorts(true)
.network(pscIlbNetwork.name())
.subnetwork(pscIlbProducerSubnetwork.name())
.build());
var pscIlbNat = new Subnetwork("pscIlbNat", SubnetworkArgs.builder()
.name("psc-ilb-nat")
.region("us-west2")
.network(pscIlbNetwork.id())
.purpose("PRIVATE_SERVICE_CONNECT")
.ipCidrRange("10.1.0.0/16")
.build());
var pscIlbServiceAttachment = new ServiceAttachment("pscIlbServiceAttachment", ServiceAttachmentArgs.builder()
.name("my-psc-ilb")
.region("us-west2")
.description("A service attachment configured with Terraform")
.domainNames("gcp.tfacc.hashicorptest.com.")
.enableProxyProtocol(true)
.connectionPreference("ACCEPT_MANUAL")
.natSubnets(pscIlbNat.id())
.targetService(pscIlbTargetService.id())
.consumerRejectLists(
"673497134629",
"482878270665")
.consumerAcceptLists(ServiceAttachmentConsumerAcceptListArgs.builder()
.projectIdOrNum("658859330310")
.connectionLimit(4)
.build())
.reconcileConnections(false)
.build());
}
}
resources:
pscIlbServiceAttachment:
type: gcp:compute:ServiceAttachment
name: psc_ilb_service_attachment
properties:
name: my-psc-ilb
region: us-west2
description: A service attachment configured with Terraform
domainNames:
- gcp.tfacc.hashicorptest.com.
enableProxyProtocol: true
connectionPreference: ACCEPT_MANUAL
natSubnets:
- ${pscIlbNat.id}
targetService: ${pscIlbTargetService.id}
consumerRejectLists:
- '673497134629'
- '482878270665'
consumerAcceptLists:
- projectIdOrNum: '658859330310'
connectionLimit: 4
reconcileConnections: false
pscIlbTargetService:
type: gcp:compute:ForwardingRule
name: psc_ilb_target_service
properties:
name: producer-forwarding-rule
region: us-west2
loadBalancingScheme: INTERNAL
backendService: ${producerServiceBackend.id}
allPorts: true
network: ${pscIlbNetwork.name}
subnetwork: ${pscIlbProducerSubnetwork.name}
producerServiceBackend:
type: gcp:compute:RegionBackendService
name: producer_service_backend
properties:
name: producer-service
region: us-west2
healthChecks: ${producerServiceHealthCheck.id}
producerServiceHealthCheck:
type: gcp:compute:HealthCheck
name: producer_service_health_check
properties:
name: producer-service-health-check
checkIntervalSec: 1
timeoutSec: 1
tcpHealthCheck:
port: '80'
pscIlbNetwork:
type: gcp:compute:Network
name: psc_ilb_network
properties:
name: psc-ilb-network
autoCreateSubnetworks: false
pscIlbProducerSubnetwork:
type: gcp:compute:Subnetwork
name: psc_ilb_producer_subnetwork
properties:
name: psc-ilb-producer-subnetwork
region: us-west2
network: ${pscIlbNetwork.id}
ipCidrRange: 10.0.0.0/16
pscIlbNat:
type: gcp:compute:Subnetwork
name: psc_ilb_nat
properties:
name: psc-ilb-nat
region: us-west2
network: ${pscIlbNetwork.id}
purpose: PRIVATE_SERVICE_CONNECT
ipCidrRange: 10.1.0.0/16
Service Attachment Tunneling Config
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const producerServiceHealthCheck = new gcp.compute.HealthCheck("producer_service_health_check", {
name: "producer-service-health-check",
checkIntervalSec: 1,
timeoutSec: 1,
tcpHealthCheck: {
port: 80,
},
});
const producerServiceBackend = new gcp.compute.RegionBackendService("producer_service_backend", {
name: "producer-service",
region: "us-west2",
healthChecks: producerServiceHealthCheck.id,
});
const pscIlbNetwork = new gcp.compute.Network("psc_ilb_network", {
name: "psc-ilb-network",
autoCreateSubnetworks: false,
});
const pscIlbProducerSubnetwork = new gcp.compute.Subnetwork("psc_ilb_producer_subnetwork", {
name: "psc-ilb-producer-subnetwork",
region: "us-west2",
network: pscIlbNetwork.id,
ipCidrRange: "10.0.0.0/16",
});
const pscIlbTargetService = new gcp.compute.ForwardingRule("psc_ilb_target_service", {
name: "producer-forwarding-rule",
region: "us-west2",
loadBalancingScheme: "INTERNAL",
backendService: producerServiceBackend.id,
allPorts: true,
network: pscIlbNetwork.name,
subnetwork: pscIlbProducerSubnetwork.name,
});
const pscIlbNat = new gcp.compute.Subnetwork("psc_ilb_nat", {
name: "psc-ilb-nat",
region: "us-west2",
network: pscIlbNetwork.id,
purpose: "PRIVATE_SERVICE_CONNECT",
ipCidrRange: "10.1.0.0/16",
});
const pscIlbServiceAttachment = new gcp.compute.ServiceAttachment("psc_ilb_service_attachment", {
name: "my-psc-ilb",
region: "us-west2",
description: "A service attachment configured with tunneling",
enableProxyProtocol: false,
connectionPreference: "ACCEPT_AUTOMATIC",
natSubnets: [pscIlbNat.id],
targetService: pscIlbTargetService.id,
tunnelingConfig: {
routingMode: "REGIONAL",
encapsulationProfile: "IPV4",
},
});
import pulumi
import pulumi_gcp as gcp
producer_service_health_check = gcp.compute.HealthCheck("producer_service_health_check",
name="producer-service-health-check",
check_interval_sec=1,
timeout_sec=1,
tcp_health_check={
"port": 80,
})
producer_service_backend = gcp.compute.RegionBackendService("producer_service_backend",
name="producer-service",
region="us-west2",
health_checks=producer_service_health_check.id)
psc_ilb_network = gcp.compute.Network("psc_ilb_network",
name="psc-ilb-network",
auto_create_subnetworks=False)
psc_ilb_producer_subnetwork = gcp.compute.Subnetwork("psc_ilb_producer_subnetwork",
name="psc-ilb-producer-subnetwork",
region="us-west2",
network=psc_ilb_network.id,
ip_cidr_range="10.0.0.0/16")
psc_ilb_target_service = gcp.compute.ForwardingRule("psc_ilb_target_service",
name="producer-forwarding-rule",
region="us-west2",
load_balancing_scheme="INTERNAL",
backend_service=producer_service_backend.id,
all_ports=True,
network=psc_ilb_network.name,
subnetwork=psc_ilb_producer_subnetwork.name)
psc_ilb_nat = gcp.compute.Subnetwork("psc_ilb_nat",
name="psc-ilb-nat",
region="us-west2",
network=psc_ilb_network.id,
purpose="PRIVATE_SERVICE_CONNECT",
ip_cidr_range="10.1.0.0/16")
psc_ilb_service_attachment = gcp.compute.ServiceAttachment("psc_ilb_service_attachment",
name="my-psc-ilb",
region="us-west2",
description="A service attachment configured with tunneling",
enable_proxy_protocol=False,
connection_preference="ACCEPT_AUTOMATIC",
nat_subnets=[psc_ilb_nat.id],
target_service=psc_ilb_target_service.id,
tunneling_config={
"routing_mode": "REGIONAL",
"encapsulation_profile": "IPV4",
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var producerServiceHealthCheck = new Gcp.Compute.HealthCheck("producer_service_health_check", new()
{
Name = "producer-service-health-check",
CheckIntervalSec = 1,
TimeoutSec = 1,
TcpHealthCheck = new Gcp.Compute.Inputs.HealthCheckTcpHealthCheckArgs
{
Port = 80,
},
});
var producerServiceBackend = new Gcp.Compute.RegionBackendService("producer_service_backend", new()
{
Name = "producer-service",
Region = "us-west2",
HealthChecks = producerServiceHealthCheck.Id,
});
var pscIlbNetwork = new Gcp.Compute.Network("psc_ilb_network", new()
{
Name = "psc-ilb-network",
AutoCreateSubnetworks = false,
});
var pscIlbProducerSubnetwork = new Gcp.Compute.Subnetwork("psc_ilb_producer_subnetwork", new()
{
Name = "psc-ilb-producer-subnetwork",
Region = "us-west2",
Network = pscIlbNetwork.Id,
IpCidrRange = "10.0.0.0/16",
});
var pscIlbTargetService = new Gcp.Compute.ForwardingRule("psc_ilb_target_service", new()
{
Name = "producer-forwarding-rule",
Region = "us-west2",
LoadBalancingScheme = "INTERNAL",
BackendService = producerServiceBackend.Id,
AllPorts = true,
Network = pscIlbNetwork.Name,
Subnetwork = pscIlbProducerSubnetwork.Name,
});
var pscIlbNat = new Gcp.Compute.Subnetwork("psc_ilb_nat", new()
{
Name = "psc-ilb-nat",
Region = "us-west2",
Network = pscIlbNetwork.Id,
Purpose = "PRIVATE_SERVICE_CONNECT",
IpCidrRange = "10.1.0.0/16",
});
var pscIlbServiceAttachment = new Gcp.Compute.ServiceAttachment("psc_ilb_service_attachment", new()
{
Name = "my-psc-ilb",
Region = "us-west2",
Description = "A service attachment configured with tunneling",
EnableProxyProtocol = false,
ConnectionPreference = "ACCEPT_AUTOMATIC",
NatSubnets = new[]
{
pscIlbNat.Id,
},
TargetService = pscIlbTargetService.Id,
TunnelingConfig = new Gcp.Compute.Inputs.ServiceAttachmentTunnelingConfigArgs
{
RoutingMode = "REGIONAL",
EncapsulationProfile = "IPV4",
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
producerServiceHealthCheck, err := compute.NewHealthCheck(ctx, "producer_service_health_check", &compute.HealthCheckArgs{
Name: pulumi.String("producer-service-health-check"),
CheckIntervalSec: pulumi.Int(1),
TimeoutSec: pulumi.Int(1),
TcpHealthCheck: &compute.HealthCheckTcpHealthCheckArgs{
Port: pulumi.Int(80),
},
})
if err != nil {
return err
}
producerServiceBackend, err := compute.NewRegionBackendService(ctx, "producer_service_backend", &compute.RegionBackendServiceArgs{
Name: pulumi.String("producer-service"),
Region: pulumi.String("us-west2"),
HealthChecks: producerServiceHealthCheck.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
pscIlbNetwork, err := compute.NewNetwork(ctx, "psc_ilb_network", &compute.NetworkArgs{
Name: pulumi.String("psc-ilb-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
pscIlbProducerSubnetwork, err := compute.NewSubnetwork(ctx, "psc_ilb_producer_subnetwork", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-producer-subnetwork"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
IpCidrRange: pulumi.String("10.0.0.0/16"),
})
if err != nil {
return err
}
pscIlbTargetService, err := compute.NewForwardingRule(ctx, "psc_ilb_target_service", &compute.ForwardingRuleArgs{
Name: pulumi.String("producer-forwarding-rule"),
Region: pulumi.String("us-west2"),
LoadBalancingScheme: pulumi.String("INTERNAL"),
BackendService: producerServiceBackend.ID().ToIDOutput().ToStringOutput(),
AllPorts: pulumi.Bool(true),
Network: pscIlbNetwork.Name,
Subnetwork: pscIlbProducerSubnetwork.Name,
})
if err != nil {
return err
}
pscIlbNat, err := compute.NewSubnetwork(ctx, "psc_ilb_nat", &compute.SubnetworkArgs{
Name: pulumi.String("psc-ilb-nat"),
Region: pulumi.String("us-west2"),
Network: pscIlbNetwork.ID().ToIDOutput().ToStringOutput(),
Purpose: pulumi.String("PRIVATE_SERVICE_CONNECT"),
IpCidrRange: pulumi.String("10.1.0.0/16"),
})
if err != nil {
return err
}
_, err = compute.NewServiceAttachment(ctx, "psc_ilb_service_attachment", &compute.ServiceAttachmentArgs{
Name: pulumi.String("my-psc-ilb"),
Region: pulumi.String("us-west2"),
Description: pulumi.String("A service attachment configured with tunneling"),
EnableProxyProtocol: pulumi.Bool(false),
ConnectionPreference: pulumi.String("ACCEPT_AUTOMATIC"),
NatSubnets: pulumi.StringArray{
pscIlbNat.ID().ToIDOutput().ToStringOutput(),
},
TargetService: pscIlbTargetService.ID().ToIDOutput().ToStringOutput(),
TunnelingConfig: &compute.ServiceAttachmentTunnelingConfigArgs{
RoutingMode: pulumi.String("REGIONAL"),
EncapsulationProfile: pulumi.String("IPV4"),
},
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_compute_serviceattachment" "psc_ilb_service_attachment" {
name = "my-psc-ilb"
region = "us-west2"
description = "A service attachment configured with tunneling"
enable_proxy_protocol = false
connection_preference = "ACCEPT_AUTOMATIC"
nat_subnets = [gcp_compute_subnetwork.psc_ilb_nat.id]
target_service = gcp_compute_forwardingrule.psc_ilb_target_service.id
tunneling_config = {
routing_mode = "REGIONAL"
encapsulation_profile = "IPV4"
}
}
resource "gcp_compute_forwardingrule" "psc_ilb_target_service" {
name = "producer-forwarding-rule"
region = "us-west2"
load_balancing_scheme = "INTERNAL"
backend_service = gcp_compute_regionbackendservice.producer_service_backend.id
all_ports = true
network = gcp_compute_network.psc_ilb_network.name
subnetwork = gcp_compute_subnetwork.psc_ilb_producer_subnetwork.name
}
resource "gcp_compute_regionbackendservice" "producer_service_backend" {
name = "producer-service"
region = "us-west2"
health_checks = gcp_compute_healthcheck.producer_service_health_check.id
}
resource "gcp_compute_healthcheck" "producer_service_health_check" {
name = "producer-service-health-check"
check_interval_sec = 1
timeout_sec = 1
tcp_health_check = {
port = "80"
}
}
resource "gcp_compute_network" "psc_ilb_network" {
name = "psc-ilb-network"
auto_create_subnetworks = false
}
resource "gcp_compute_subnetwork" "psc_ilb_producer_subnetwork" {
name = "psc-ilb-producer-subnetwork"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
ip_cidr_range = "10.0.0.0/16"
}
resource "gcp_compute_subnetwork" "psc_ilb_nat" {
name = "psc-ilb-nat"
region = "us-west2"
network = gcp_compute_network.psc_ilb_network.id
purpose = "PRIVATE_SERVICE_CONNECT"
ip_cidr_range = "10.1.0.0/16"
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.HealthCheck;
import com.pulumi.gcp.compute.HealthCheckArgs;
import com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;
import com.pulumi.gcp.compute.RegionBackendService;
import com.pulumi.gcp.compute.RegionBackendServiceArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.ForwardingRule;
import com.pulumi.gcp.compute.ForwardingRuleArgs;
import com.pulumi.gcp.compute.ServiceAttachment;
import com.pulumi.gcp.compute.ServiceAttachmentArgs;
import com.pulumi.gcp.compute.inputs.ServiceAttachmentTunnelingConfigArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var producerServiceHealthCheck = new HealthCheck("producerServiceHealthCheck", HealthCheckArgs.builder()
.name("producer-service-health-check")
.checkIntervalSec(1)
.timeoutSec(1)
.tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()
.port(80)
.build())
.build());
var producerServiceBackend = new RegionBackendService("producerServiceBackend", RegionBackendServiceArgs.builder()
.name("producer-service")
.region("us-west2")
.healthChecks(producerServiceHealthCheck.id())
.build());
var pscIlbNetwork = new Network("pscIlbNetwork", NetworkArgs.builder()
.name("psc-ilb-network")
.autoCreateSubnetworks(false)
.build());
var pscIlbProducerSubnetwork = new Subnetwork("pscIlbProducerSubnetwork", SubnetworkArgs.builder()
.name("psc-ilb-producer-subnetwork")
.region("us-west2")
.network(pscIlbNetwork.id())
.ipCidrRange("10.0.0.0/16")
.build());
var pscIlbTargetService = new ForwardingRule("pscIlbTargetService", ForwardingRuleArgs.builder()
.name("producer-forwarding-rule")
.region("us-west2")
.loadBalancingScheme("INTERNAL")
.backendService(producerServiceBackend.id())
.allPorts(true)
.network(pscIlbNetwork.name())
.subnetwork(pscIlbProducerSubnetwork.name())
.build());
var pscIlbNat = new Subnetwork("pscIlbNat", SubnetworkArgs.builder()
.name("psc-ilb-nat")
.region("us-west2")
.network(pscIlbNetwork.id())
.purpose("PRIVATE_SERVICE_CONNECT")
.ipCidrRange("10.1.0.0/16")
.build());
var pscIlbServiceAttachment = new ServiceAttachment("pscIlbServiceAttachment", ServiceAttachmentArgs.builder()
.name("my-psc-ilb")
.region("us-west2")
.description("A service attachment configured with tunneling")
.enableProxyProtocol(false)
.connectionPreference("ACCEPT_AUTOMATIC")
.natSubnets(pscIlbNat.id())
.targetService(pscIlbTargetService.id())
.tunnelingConfig(ServiceAttachmentTunnelingConfigArgs.builder()
.routingMode("REGIONAL")
.encapsulationProfile("IPV4")
.build())
.build());
}
}
resources:
pscIlbServiceAttachment:
type: gcp:compute:ServiceAttachment
name: psc_ilb_service_attachment
properties:
name: my-psc-ilb
region: us-west2
description: A service attachment configured with tunneling
enableProxyProtocol: false
connectionPreference: ACCEPT_AUTOMATIC
natSubnets:
- ${pscIlbNat.id}
targetService: ${pscIlbTargetService.id}
tunnelingConfig:
routingMode: REGIONAL
encapsulationProfile: IPV4
pscIlbTargetService:
type: gcp:compute:ForwardingRule
name: psc_ilb_target_service
properties:
name: producer-forwarding-rule
region: us-west2
loadBalancingScheme: INTERNAL
backendService: ${producerServiceBackend.id}
allPorts: true
network: ${pscIlbNetwork.name}
subnetwork: ${pscIlbProducerSubnetwork.name}
producerServiceBackend:
type: gcp:compute:RegionBackendService
name: producer_service_backend
properties:
name: producer-service
region: us-west2
healthChecks: ${producerServiceHealthCheck.id}
producerServiceHealthCheck:
type: gcp:compute:HealthCheck
name: producer_service_health_check
properties:
name: producer-service-health-check
checkIntervalSec: 1
timeoutSec: 1
tcpHealthCheck:
port: '80'
pscIlbNetwork:
type: gcp:compute:Network
name: psc_ilb_network
properties:
name: psc-ilb-network
autoCreateSubnetworks: false
pscIlbProducerSubnetwork:
type: gcp:compute:Subnetwork
name: psc_ilb_producer_subnetwork
properties:
name: psc-ilb-producer-subnetwork
region: us-west2
network: ${pscIlbNetwork.id}
ipCidrRange: 10.0.0.0/16
pscIlbNat:
type: gcp:compute:Subnetwork
name: psc_ilb_nat
properties:
name: psc-ilb-nat
region: us-west2
network: ${pscIlbNetwork.id}
purpose: PRIVATE_SERVICE_CONNECT
ipCidrRange: 10.1.0.0/16
Service Attachment Cross Region Ilb
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const healthCheck = new gcp.compute.HealthCheck("health_check", {
name: "sa",
checkIntervalSec: 1,
timeoutSec: 1,
tcpHealthCheck: {
port: 80,
},
});
const backendService = new gcp.compute.BackendService("backend_service", {
name: "sa",
loadBalancingScheme: "INTERNAL_MANAGED",
healthChecks: healthCheck.id,
});
const urlMap = new gcp.compute.URLMap("url_map", {
name: "sa",
description: "Url map.",
defaultService: backendService.id,
});
const httpProxy = new gcp.compute.TargetHttpProxy("http_proxy", {
name: "sa",
description: "a description",
urlMap: urlMap.id,
});
const network = new gcp.compute.Network("network", {
name: "sa",
autoCreateSubnetworks: false,
});
const subnetworkProxy = new gcp.compute.Subnetwork("subnetwork_proxy", {
name: "sa-proxy",
region: "us-central1",
network: network.id,
purpose: "GLOBAL_MANAGED_PROXY",
role: "ACTIVE",
ipCidrRange: "10.2.0.0/16",
});
const subnetwork = new gcp.compute.Subnetwork("subnetwork", {
name: "sa",
region: "us-central1",
network: network.id,
ipCidrRange: "10.0.0.0/16",
});
const forwardingRule = new gcp.compute.GlobalForwardingRule("forwarding_rule", {
name: "sa",
target: httpProxy.id,
network: network.id,
subnetwork: subnetwork.id,
portRange: "80",
loadBalancingScheme: "INTERNAL_MANAGED",
}, {
dependsOn: [subnetworkProxy],
});
const subnetworkPsc = new gcp.compute.Subnetwork("subnetwork_psc", {
name: "sa-psc",
region: "us-central1",
network: network.id,
purpose: "PRIVATE_SERVICE_CONNECT",
ipCidrRange: "10.1.0.0/16",
});
const pscIlbServiceAttachment = new gcp.compute.ServiceAttachment("psc_ilb_service_attachment", {
name: "sa",
region: "us-central1",
description: "A service attachment configured with Terraform",
connectionPreference: "ACCEPT_AUTOMATIC",
enableProxyProtocol: false,
natSubnets: [subnetworkPsc.id],
targetService: forwardingRule.id,
});
import pulumi
import pulumi_gcp as gcp
health_check = gcp.compute.HealthCheck("health_check",
name="sa",
check_interval_sec=1,
timeout_sec=1,
tcp_health_check={
"port": 80,
})
backend_service = gcp.compute.BackendService("backend_service",
name="sa",
load_balancing_scheme="INTERNAL_MANAGED",
health_checks=health_check.id)
url_map = gcp.compute.URLMap("url_map",
name="sa",
description="Url map.",
default_service=backend_service.id)
http_proxy = gcp.compute.TargetHttpProxy("http_proxy",
name="sa",
description="a description",
url_map=url_map.id)
network = gcp.compute.Network("network",
name="sa",
auto_create_subnetworks=False)
subnetwork_proxy = gcp.compute.Subnetwork("subnetwork_proxy",
name="sa-proxy",
region="us-central1",
network=network.id,
purpose="GLOBAL_MANAGED_PROXY",
role="ACTIVE",
ip_cidr_range="10.2.0.0/16")
subnetwork = gcp.compute.Subnetwork("subnetwork",
name="sa",
region="us-central1",
network=network.id,
ip_cidr_range="10.0.0.0/16")
forwarding_rule = gcp.compute.GlobalForwardingRule("forwarding_rule",
name="sa",
target=http_proxy.id,
network=network.id,
subnetwork=subnetwork.id,
port_range="80",
load_balancing_scheme="INTERNAL_MANAGED",
opts = pulumi.ResourceOptions(depends_on=[subnetwork_proxy]))
subnetwork_psc = gcp.compute.Subnetwork("subnetwork_psc",
name="sa-psc",
region="us-central1",
network=network.id,
purpose="PRIVATE_SERVICE_CONNECT",
ip_cidr_range="10.1.0.0/16")
psc_ilb_service_attachment = gcp.compute.ServiceAttachment("psc_ilb_service_attachment",
name="sa",
region="us-central1",
description="A service attachment configured with Terraform",
connection_preference="ACCEPT_AUTOMATIC",
enable_proxy_protocol=False,
nat_subnets=[subnetwork_psc.id],
target_service=forwarding_rule.id)
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var healthCheck = new Gcp.Compute.HealthCheck("health_check", new()
{
Name = "sa",
CheckIntervalSec = 1,
TimeoutSec = 1,
TcpHealthCheck = new Gcp.Compute.Inputs.HealthCheckTcpHealthCheckArgs
{
Port = 80,
},
});
var backendService = new Gcp.Compute.BackendService("backend_service", new()
{
Name = "sa",
LoadBalancingScheme = "INTERNAL_MANAGED",
HealthChecks = healthCheck.Id,
});
var urlMap = new Gcp.Compute.URLMap("url_map", new()
{
Name = "sa",
Description = "Url map.",
DefaultService = backendService.Id,
});
var httpProxy = new Gcp.Compute.TargetHttpProxy("http_proxy", new()
{
Name = "sa",
Description = "a description",
UrlMap = urlMap.Id,
});
var network = new Gcp.Compute.Network("network", new()
{
Name = "sa",
AutoCreateSubnetworks = false,
});
var subnetworkProxy = new Gcp.Compute.Subnetwork("subnetwork_proxy", new()
{
Name = "sa-proxy",
Region = "us-central1",
Network = network.Id,
Purpose = "GLOBAL_MANAGED_PROXY",
Role = "ACTIVE",
IpCidrRange = "10.2.0.0/16",
});
var subnetwork = new Gcp.Compute.Subnetwork("subnetwork", new()
{
Name = "sa",
Region = "us-central1",
Network = network.Id,
IpCidrRange = "10.0.0.0/16",
});
var forwardingRule = new Gcp.Compute.GlobalForwardingRule("forwarding_rule", new()
{
Name = "sa",
Target = httpProxy.Id,
Network = network.Id,
Subnetwork = subnetwork.Id,
PortRange = "80",
LoadBalancingScheme = "INTERNAL_MANAGED",
}, new CustomResourceOptions
{
DependsOn =
{
subnetworkProxy,
},
});
var subnetworkPsc = new Gcp.Compute.Subnetwork("subnetwork_psc", new()
{
Name = "sa-psc",
Region = "us-central1",
Network = network.Id,
Purpose = "PRIVATE_SERVICE_CONNECT",
IpCidrRange = "10.1.0.0/16",
});
var pscIlbServiceAttachment = new Gcp.Compute.ServiceAttachment("psc_ilb_service_attachment", new()
{
Name = "sa",
Region = "us-central1",
Description = "A service attachment configured with Terraform",
ConnectionPreference = "ACCEPT_AUTOMATIC",
EnableProxyProtocol = false,
NatSubnets = new[]
{
subnetworkPsc.Id,
},
TargetService = forwardingRule.Id,
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
healthCheck, err := compute.NewHealthCheck(ctx, "health_check", &compute.HealthCheckArgs{
Name: pulumi.String("sa"),
CheckIntervalSec: pulumi.Int(1),
TimeoutSec: pulumi.Int(1),
TcpHealthCheck: &compute.HealthCheckTcpHealthCheckArgs{
Port: pulumi.Int(80),
},
})
if err != nil {
return err
}
backendService, err := compute.NewBackendService(ctx, "backend_service", &compute.BackendServiceArgs{
Name: pulumi.String("sa"),
LoadBalancingScheme: pulumi.String("INTERNAL_MANAGED"),
HealthChecks: healthCheck.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
urlMap, err := compute.NewURLMap(ctx, "url_map", &compute.URLMapArgs{
Name: pulumi.String("sa"),
Description: pulumi.String("Url map."),
DefaultService: backendService.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
httpProxy, err := compute.NewTargetHttpProxy(ctx, "http_proxy", &compute.TargetHttpProxyArgs{
Name: pulumi.String("sa"),
Description: pulumi.String("a description"),
UrlMap: urlMap.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{
Name: pulumi.String("sa"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
subnetworkProxy, err := compute.NewSubnetwork(ctx, "subnetwork_proxy", &compute.SubnetworkArgs{
Name: pulumi.String("sa-proxy"),
Region: pulumi.String("us-central1"),
Network: network.ID().ToIDOutput().ToStringOutput(),
Purpose: pulumi.String("GLOBAL_MANAGED_PROXY"),
Role: pulumi.String("ACTIVE"),
IpCidrRange: pulumi.String("10.2.0.0/16"),
})
if err != nil {
return err
}
subnetwork, err := compute.NewSubnetwork(ctx, "subnetwork", &compute.SubnetworkArgs{
Name: pulumi.String("sa"),
Region: pulumi.String("us-central1"),
Network: network.ID().ToIDOutput().ToStringOutput(),
IpCidrRange: pulumi.String("10.0.0.0/16"),
})
if err != nil {
return err
}
forwardingRule, err := compute.NewGlobalForwardingRule(ctx, "forwarding_rule", &compute.GlobalForwardingRuleArgs{
Name: pulumi.String("sa"),
Target: httpProxy.ID().ToIDOutput().ToStringOutput(),
Network: network.ID().ToIDOutput().ToStringOutput(),
Subnetwork: subnetwork.ID().ToIDOutput().ToStringOutput(),
PortRange: pulumi.String("80"),
LoadBalancingScheme: pulumi.String("INTERNAL_MANAGED"),
}, pulumi.DependsOn([]pulumi.Resource{
subnetworkProxy,
}))
if err != nil {
return err
}
subnetworkPsc, err := compute.NewSubnetwork(ctx, "subnetwork_psc", &compute.SubnetworkArgs{
Name: pulumi.String("sa-psc"),
Region: pulumi.String("us-central1"),
Network: network.ID().ToIDOutput().ToStringOutput(),
Purpose: pulumi.String("PRIVATE_SERVICE_CONNECT"),
IpCidrRange: pulumi.String("10.1.0.0/16"),
})
if err != nil {
return err
}
_, err = compute.NewServiceAttachment(ctx, "psc_ilb_service_attachment", &compute.ServiceAttachmentArgs{
Name: pulumi.String("sa"),
Region: pulumi.String("us-central1"),
Description: pulumi.String("A service attachment configured with Terraform"),
ConnectionPreference: pulumi.String("ACCEPT_AUTOMATIC"),
EnableProxyProtocol: pulumi.Bool(false),
NatSubnets: pulumi.StringArray{
subnetworkPsc.ID().ToIDOutput().ToStringOutput(),
},
TargetService: forwardingRule.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_compute_serviceattachment" "psc_ilb_service_attachment" {
name = "sa"
region = "us-central1"
description = "A service attachment configured with Terraform"
connection_preference = "ACCEPT_AUTOMATIC"
enable_proxy_protocol = false
nat_subnets = [gcp_compute_subnetwork.subnetwork_psc.id]
target_service = gcp_compute_globalforwardingrule.forwarding_rule.id
}
resource "gcp_compute_globalforwardingrule" "forwarding_rule" {
depends_on = [gcp_compute_subnetwork.subnetwork_proxy]
name = "sa"
target = gcp_compute_targethttpproxy.http_proxy.id
network = gcp_compute_network.network.id
subnetwork = gcp_compute_subnetwork.subnetwork.id
port_range = "80"
load_balancing_scheme = "INTERNAL_MANAGED"
}
resource "gcp_compute_targethttpproxy" "http_proxy" {
name = "sa"
description = "a description"
url_map = gcp_compute_urlmap.url_map.id
}
resource "gcp_compute_urlmap" "url_map" {
name = "sa"
description = "Url map."
default_service = gcp_compute_backendservice.backend_service.id
}
resource "gcp_compute_backendservice" "backend_service" {
name = "sa"
load_balancing_scheme = "INTERNAL_MANAGED"
health_checks = gcp_compute_healthcheck.health_check.id
}
resource "gcp_compute_healthcheck" "health_check" {
name = "sa"
check_interval_sec = 1
timeout_sec = 1
tcp_health_check = {
port = "80"
}
}
resource "gcp_compute_subnetwork" "subnetwork_psc" {
name = "sa-psc"
region = "us-central1"
network = gcp_compute_network.network.id
purpose = "PRIVATE_SERVICE_CONNECT"
ip_cidr_range = "10.1.0.0/16"
}
resource "gcp_compute_subnetwork" "subnetwork_proxy" {
name = "sa-proxy"
region = "us-central1"
network = gcp_compute_network.network.id
purpose = "GLOBAL_MANAGED_PROXY"
role = "ACTIVE"
ip_cidr_range = "10.2.0.0/16"
}
resource "gcp_compute_subnetwork" "subnetwork" {
name = "sa"
region = "us-central1"
network = gcp_compute_network.network.id
ip_cidr_range = "10.0.0.0/16"
}
resource "gcp_compute_network" "network" {
name = "sa"
auto_create_subnetworks = false
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.HealthCheck;
import com.pulumi.gcp.compute.HealthCheckArgs;
import com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;
import com.pulumi.gcp.compute.BackendService;
import com.pulumi.gcp.compute.BackendServiceArgs;
import com.pulumi.gcp.compute.URLMap;
import com.pulumi.gcp.compute.URLMapArgs;
import com.pulumi.gcp.compute.TargetHttpProxy;
import com.pulumi.gcp.compute.TargetHttpProxyArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.GlobalForwardingRule;
import com.pulumi.gcp.compute.GlobalForwardingRuleArgs;
import com.pulumi.gcp.compute.ServiceAttachment;
import com.pulumi.gcp.compute.ServiceAttachmentArgs;
import com.pulumi.resources.CustomResourceOptions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var healthCheck = new HealthCheck("healthCheck", HealthCheckArgs.builder()
.name("sa")
.checkIntervalSec(1)
.timeoutSec(1)
.tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()
.port(80)
.build())
.build());
var backendService = new BackendService("backendService", BackendServiceArgs.builder()
.name("sa")
.loadBalancingScheme("INTERNAL_MANAGED")
.healthChecks(healthCheck.id())
.build());
var urlMap = new URLMap("urlMap", URLMapArgs.builder()
.name("sa")
.description("Url map.")
.defaultService(backendService.id())
.build());
var httpProxy = new TargetHttpProxy("httpProxy", TargetHttpProxyArgs.builder()
.name("sa")
.description("a description")
.urlMap(urlMap.id())
.build());
var network = new Network("network", NetworkArgs.builder()
.name("sa")
.autoCreateSubnetworks(false)
.build());
var subnetworkProxy = new Subnetwork("subnetworkProxy", SubnetworkArgs.builder()
.name("sa-proxy")
.region("us-central1")
.network(network.id())
.purpose("GLOBAL_MANAGED_PROXY")
.role("ACTIVE")
.ipCidrRange("10.2.0.0/16")
.build());
var subnetwork = new Subnetwork("subnetwork", SubnetworkArgs.builder()
.name("sa")
.region("us-central1")
.network(network.id())
.ipCidrRange("10.0.0.0/16")
.build());
var forwardingRule = new GlobalForwardingRule("forwardingRule", GlobalForwardingRuleArgs.builder()
.name("sa")
.target(httpProxy.id())
.network(network.id())
.subnetwork(subnetwork.id())
.portRange("80")
.loadBalancingScheme("INTERNAL_MANAGED")
.build(), CustomResourceOptions.builder()
.dependsOn(subnetworkProxy)
.build());
var subnetworkPsc = new Subnetwork("subnetworkPsc", SubnetworkArgs.builder()
.name("sa-psc")
.region("us-central1")
.network(network.id())
.purpose("PRIVATE_SERVICE_CONNECT")
.ipCidrRange("10.1.0.0/16")
.build());
var pscIlbServiceAttachment = new ServiceAttachment("pscIlbServiceAttachment", ServiceAttachmentArgs.builder()
.name("sa")
.region("us-central1")
.description("A service attachment configured with Terraform")
.connectionPreference("ACCEPT_AUTOMATIC")
.enableProxyProtocol(false)
.natSubnets(subnetworkPsc.id())
.targetService(forwardingRule.id())
.build());
}
}
resources:
pscIlbServiceAttachment:
type: gcp:compute:ServiceAttachment
name: psc_ilb_service_attachment
properties:
name: sa
region: us-central1
description: A service attachment configured with Terraform
connectionPreference: ACCEPT_AUTOMATIC
enableProxyProtocol: false
natSubnets:
- ${subnetworkPsc.id}
targetService: ${forwardingRule.id}
forwardingRule:
type: gcp:compute:GlobalForwardingRule
name: forwarding_rule
properties:
name: sa
target: ${httpProxy.id}
network: ${network.id}
subnetwork: ${subnetwork.id}
portRange: '80'
loadBalancingScheme: INTERNAL_MANAGED
options:
dependsOn:
- ${subnetworkProxy}
httpProxy:
type: gcp:compute:TargetHttpProxy
name: http_proxy
properties:
name: sa
description: a description
urlMap: ${urlMap.id}
urlMap:
type: gcp:compute:URLMap
name: url_map
properties:
name: sa
description: Url map.
defaultService: ${backendService.id}
backendService:
type: gcp:compute:BackendService
name: backend_service
properties:
name: sa
loadBalancingScheme: INTERNAL_MANAGED
healthChecks: ${healthCheck.id}
healthCheck:
type: gcp:compute:HealthCheck
name: health_check
properties:
name: sa
checkIntervalSec: 1
timeoutSec: 1
tcpHealthCheck:
port: '80'
subnetworkPsc:
type: gcp:compute:Subnetwork
name: subnetwork_psc
properties:
name: sa-psc
region: us-central1
network: ${network.id}
purpose: PRIVATE_SERVICE_CONNECT
ipCidrRange: 10.1.0.0/16
subnetworkProxy:
type: gcp:compute:Subnetwork
name: subnetwork_proxy
properties:
name: sa-proxy
region: us-central1
network: ${network.id}
purpose: GLOBAL_MANAGED_PROXY
role: ACTIVE
ipCidrRange: 10.2.0.0/16
subnetwork:
type: gcp:compute:Subnetwork
properties:
name: sa
region: us-central1
network: ${network.id}
ipCidrRange: 10.0.0.0/16
network:
type: gcp:compute:Network
properties:
name: sa
autoCreateSubnetworks: false
Import
ServiceAttachment can be imported using any of these accepted formats:
projects/{{project}}/regions/{{region}}/serviceAttachments/{{name}}{{project}}/{{region}}/{{name}}{{region}}/{{name}}{{name}}
When using the pulumi import command, ServiceAttachment can be imported using one of the formats above. For example:
$ pulumi import gcp:compute/serviceAttachment:ServiceAttachment default projects/{{project}}/regions/{{region}}/serviceAttachments/{{name}}
$ pulumi import gcp:compute/serviceAttachment:ServiceAttachment default {{project}}/{{region}}/{{name}}
$ pulumi import gcp:compute/serviceAttachment:ServiceAttachment default {{region}}/{{name}}
$ pulumi import gcp:compute/serviceAttachment:ServiceAttachment default {{name}}
Constructors
- ServiceAttachment(String name, {ServiceAttachmentArgs? args, CustomResourceOptions? options})
-
Creates a new ServiceAttachment.
nameThe Pulumi resource name.argsArguments used to configure this ServiceAttachment. The set of arguments for ServiceAttachment.optionsResource options controlling this resource's behavior. - ServiceAttachment.reference(String urn)
- Creates a typed reference to an existing ServiceAttachment resource.
Properties
-
childResources
→ Set<
Resource> -
finalinherited
-
completionSources
↔ Map<
String, IOutputCompletionSource> -
latefinalinherited
-
connectedEndpoints
↔ Output<
List< ServiceAttachmentConnectedEndpoint> > -
An array of the consumer forwarding rules connected to this service
attachment.
Structure is documented below.
latefinal
-
connectionPreference
↔ Output<
String> -
The connection preference to use for this service attachment. Valid
values include "ACCEPT_AUTOMATIC", "ACCEPT_MANUAL".
latefinal
-
consumerAcceptLists
↔ Output<
List< ServiceAttachmentConsumerAcceptList> ?> -
An array of projects that are allowed to connect to this service
attachment.
Structure is documented below.
latefinal
-
consumerRejectLists
↔ Output<
List< String> ?> -
An array of projects that are not allowed to connect to this service
attachment.
latefinal
-
deletionPolicy
↔ Output<
String> -
Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
When a 'terraform destroy' or 'pulumi up' would delete the resource,
the command will fail if this field is set to "PREVENT" in Terraform state.
When set to "ABANDON", the command will remove the resource from Terraform
management without updating or deleting the resource in the API.
When set to "DELETE", deleting the resource is allowed.
latefinal
-
description
↔ Output<
String?> -
An optional description of this resource.
latefinal
-
domainNames
↔ Output<
List< String> ?> -
If specified, the domain name will be used during the integration between
the PSC connected endpoints and the Cloud DNS. For example, this is a
valid domain name: "p.mycompany.com.". Current max number of domain names
supported is 1.
latefinal
-
enableProxyProtocol
↔ Output<
bool> -
If true, enable the proxy protocol which is for supplying client TCP/IP
address data in TCP connections that traverse proxies on their way to
destination servers.
latefinal
-
fingerprint
↔ Output<
String> -
Fingerprint of this resource. This field is used internally during
updates of this resource.
latefinal
- hashCode → int
-
The hash code for this object.
no setterinherited
-
id
↔ Output<
String> -
getter/setter pairinherited
- isCustom → bool
-
Returns whether this resource is provider-managed.
no setterinherited
- isProtected → bool
-
Returns whether this resource is protected from deletion.
no setterinherited
- isRemote → bool
-
Whether this resource is registered as remote.
no setterinherited
- isResourceReference → bool
-
Whether this instance represents a resource value returned over RPC.
finalinherited
-
name
↔ Output<
String> -
Name of the resource. The name must be 1-63 characters long, and
comply with RFC1035. Specifically, the name must be 1-63 characters
long and match the regular expression
a-z?which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.latefinal -
natSubnets
↔ Output<
List< String> > -
An array of subnets that is provided for NAT in this service attachment.
latefinal
-
project
↔ Output<
String> -
The ID of the project in which the resource belongs.
If it is not provided, the provider project is used.
latefinal
-
propagatedConnectionLimit
↔ Output<
int> -
The number of consumer spokes that connected Private Service Connect endpoints can be propagated to through Network Connectivity Center.
This limit lets the service producer limit how many propagated Private Service Connect connections can be established to this service attachment from a single consumer.
If the connection preference of the service attachment is ACCEPT_MANUAL, the limit applies to each project or network that is listed in the consumer accept list.
If the connection preference of the service attachment is ACCEPT_AUTOMATIC, the limit applies to each project that contains a connected endpoint.
If unspecified, the default propagated connection limit is 250. To explicitly send a zero value, set
sendPropagatedConnectionLimitIfZero = true.latefinal -
pscServiceAttachmentIds
↔ Output<
List< ServiceAttachmentPscServiceAttachmentId> > -
An 128-bit global unique ID of the PSC service attachment.
Structure is documented below.
latefinal
-
reconcileConnections
↔ Output<
bool> -
This flag determines whether a consumer accept/reject list change can reconcile the statuses of existing ACCEPTED or REJECTED PSC endpoints.
If false, connection policy update will only affect existing PENDING PSC endpoints. Existing ACCEPTED/REJECTED endpoints will remain untouched regardless how the connection policy is modified .
If true, update will affect both PENDING and ACCEPTED/REJECTED PSC endpoints. For example, an ACCEPTED PSC endpoint will be moved to REJECTED if its project is added to the reject list.
latefinal
-
region
↔ Output<
String> -
URL of the region where the resource resides.
latefinal
-
resourceTransforms
→ List<
ResourceTransform> -
Inherited/explicit async transforms.
no setterinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
selfLink
↔ Output<
String> -
The URI of the created resource.
latefinal
-
sendPropagatedConnectionLimitIfZero
↔ Output<
bool?> -
Controls the behavior of propagated_connection_limit.
When false, setting propagatedConnectionLimit to zero causes the provider to use to the API's default value.
When true, the provider will set propagatedConnectionLimit to zero.
Defaults to false.
latefinal
-
showNatIps
↔ Output<
bool?> -
NOTE: This field is temporarily non-functional due to an underlying API issue.
Any value provided here will be ignored until the API issue is resolved, expected around 2026-03.
If true, show NAT IPs of all connected endpoints.latefinal -
targetService
↔ Output<
String> -
The URL of a service serving the endpoint identified by this service attachment.
latefinal
-
transformations
→ List<
ResourceTransformation> -
Inherited/explicit legacy transformations.
no setterinherited
-
tunnelingConfig
↔ Output<
ServiceAttachmentTunnelingConfig?> -
(Optional, Beta)
Tunneling configuration for this service attachment.
Structure is documented below.
latefinal
-
urn
↔ Output<
String> -
latefinalinherited
Methods
-
failId(
Object error) → void -
Completes this resource ID with an error when registration fails.
inherited
-
failOutputs(
Object error) → void -
Completes all output properties with
error.inherited -
failUrn(
Object error) → void -
Completes this resource URN with an error when registration fails.
inherited
-
getProvider(
String moduleMember) → ProviderResource? -
Returns provider for
moduleMember's package, if configured.inherited -
getResourceName(
) → String -
Returns this resource's logical name.
inherited
-
getResourceType(
) → String -
Returns this resource's Pulumi type token.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
registerOutput<
T> (String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output< T> -
Registers a dynamic output property for this resource.
inherited
-
resolveId(
String? value, {required bool isKnown}) → void -
Resolves the provider-assigned ID for this resource.
inherited
-
resolveOutputs(
Struct outputs) → void -
Resolves all output properties from a monitor response payload.
inherited
-
resolveUrn(
String value) → void -
Resolves this resource's URN once assigned by the engine.
inherited
-
serializeProperties(
Map< String, dynamic> properties) → Future<Struct> -
Serializes resource properties for RPC transmission.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
get(
String name, Input< String> id, {ServiceAttachmentState? state, CustomResourceOptions? options}) → ServiceAttachment -
Gets an existing ServiceAttachment resource's state with the given
nameandid.