ServiceAttachmentArgs

data class ServiceAttachmentArgs(val connectionPreference: Output<String>? = null, val consumerAcceptLists: Output<List<ServiceAttachmentConsumerAcceptListArgs>>? = null, val consumerRejectLists: Output<List<String>>? = null, val description: Output<String>? = null, val domainNames: Output<List<String>>? = null, val enableProxyProtocol: Output<Boolean>? = null, val name: Output<String>? = null, val natSubnets: Output<List<String>>? = null, val project: Output<String>? = null, val propagatedConnectionLimit: Output<Int>? = null, val reconcileConnections: Output<Boolean>? = null, val region: Output<String>? = null, val targetService: Output<String>? = null) : ConvertibleToJava<ServiceAttachmentArgs>

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&#46;tfacc&#46;hashicorptest&#46;com&#46;"],
enableProxyProtocol: true,
connectionPreference: "ACCEPT_AUTOMATIC",
natSubnets: [pscIlbNat&#46;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&#46;tfacc&#46;hashicorptest&#46;com&#46;"],
enable_proxy_protocol=True,
connection_preference="ACCEPT_AUTOMATIC",
nat_subnets=[psc_ilb_nat&#46;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/v8/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(),
})
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(),
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(),
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(),
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(),
},
TargetService: pscIlbTargetService.ID(),
})
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(),
LoadBalancingScheme: pulumi.String(""),
Network: pulumi.String("default"),
IpAddress: pscIlbConsumerAddress.ID(),
})
if err != nil {
return err
}
return nil
})
}
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.List;
import java.util.ArrayList;
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&#46;tfacc&#46;hashicorptest&#46;com&#46;"],
enableProxyProtocol: true,
connectionPreference: "ACCEPT_MANUAL",
natSubnets: [pscIlbNat&#46;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&#46;tfacc&#46;hashicorptest&#46;com&#46;"],
enable_proxy_protocol=True,
connection_preference="ACCEPT_MANUAL",
nat_subnets=[psc_ilb_nat&#46;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/v8/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(),
})
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(),
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(),
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(),
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(),
},
TargetService: pscIlbTargetService.ID(),
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(),
LoadBalancingScheme: pulumi.String(""),
Network: pulumi.String("default"),
IpAddress: pscIlbConsumerAddress.ID(),
})
if err != nil {
return err
}
return nil
})
}
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.List;
import java.util.ArrayList;
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&#46;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&#46;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/v8/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(),
})
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(),
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(),
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(),
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(),
},
TargetService: pscIlbTargetService.ID(),
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(),
})
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(),
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(),
LoadBalancingScheme: pulumi.String(""),
Network: pscIlbConsumerNetwork.ID(),
Subnetwork: pscIlbConsumerSubnetwork.ID(),
IpAddress: pscIlbConsumerAddress.ID(),
})
if err != nil {
return err
}
return nil
})
}
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.List;
import java.util.ArrayList;
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&#46;tfacc&#46;hashicorptest&#46;com&#46;"],
enableProxyProtocol: true,
connectionPreference: "ACCEPT_MANUAL",
natSubnets: [pscIlbNat&#46;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&#46;tfacc&#46;hashicorptest&#46;com&#46;"],
enable_proxy_protocol=True,
connection_preference="ACCEPT_MANUAL",
nat_subnets=[psc_ilb_nat&#46;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/v8/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(),
})
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(),
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(),
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(),
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(),
},
TargetService: pscIlbTargetService.ID(),
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
})
}
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.List;
import java.util.ArrayList;
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

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

Link copied to clipboard
constructor(connectionPreference: Output<String>? = null, consumerAcceptLists: Output<List<ServiceAttachmentConsumerAcceptListArgs>>? = null, consumerRejectLists: Output<List<String>>? = null, description: Output<String>? = null, domainNames: Output<List<String>>? = null, enableProxyProtocol: Output<Boolean>? = null, name: Output<String>? = null, natSubnets: Output<List<String>>? = null, project: Output<String>? = null, propagatedConnectionLimit: Output<Int>? = null, reconcileConnections: Output<Boolean>? = null, region: Output<String>? = null, targetService: Output<String>? = null)

Properties

Link copied to clipboard
val connectionPreference: Output<String>? = null

The connection preference to use for this service attachment. Valid values include "ACCEPT_AUTOMATIC", "ACCEPT_MANUAL".

Link copied to clipboard

An array of projects that are allowed to connect to this service attachment. Structure is documented below.

Link copied to clipboard
val consumerRejectLists: Output<List<String>>? = null

An array of projects that are not allowed to connect to this service attachment.

Link copied to clipboard
val description: Output<String>? = null

An optional description of this resource.

Link copied to clipboard
val domainNames: Output<List<String>>? = null

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.

Link copied to clipboard
val enableProxyProtocol: Output<Boolean>? = null

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.

Link copied to clipboard
val name: Output<String>? = null

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.

Link copied to clipboard
val natSubnets: Output<List<String>>? = null

An array of subnets that is provided for NAT in this service attachment.

Link copied to clipboard
val project: Output<String>? = null

The ID of the project in which the resource belongs. If it is not provided, the provider project is used.

Link copied to clipboard
val propagatedConnectionLimit: Output<Int>? = null

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.

Link copied to clipboard
val reconcileConnections: Output<Boolean>? = null

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.

Link copied to clipboard
val region: Output<String>? = null

URL of the region where the resource resides.

Link copied to clipboard
val targetService: Output<String>? = null

The URL of a service serving the endpoint identified by this service attachment.

Functions

Link copied to clipboard
open override fun toJava(): ServiceAttachmentArgs