Engine Split Traffic Args
data class EngineSplitTrafficArgs(val migrateTraffic: Output<Boolean>? = null, val project: Output<String>? = null, val service: Output<String>? = null, val split: Output<EngineSplitTrafficSplitArgs>? = null) : ConvertibleToJava<EngineSplitTrafficArgs>
Traffic routing configuration for versions within a single service. Traffic splits define how traffic directed to the service is assigned to versions. To get more information about ServiceSplitTraffic, see:
Example Usage
App Engine Service Split Traffic
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const bucket = new gcp.storage.Bucket("bucket", {
name: "appengine-static-content",
location: "US",
});
const object = new gcp.storage.BucketObject("object", {
name: "hello-world.zip",
bucket: bucket.name,
source: new pulumi.asset.FileAsset("./test-fixtures/hello-world.zip"),
});
const liveappV1 = new gcp.appengine.StandardAppVersion("liveapp_v1", {
versionId: "v1",
service: "liveapp",
deleteServiceOnDestroy: true,
runtime: "nodejs20",
entrypoint: {
shell: "node ./app.js",
},
deployment: {
zip: {
sourceUrl: pulumi.interpolate`https://storage.googleapis.com/${bucket.name}/${object.name}`,
},
},
envVariables: {
port: "8080",
},
});
const liveappV2 = new gcp.appengine.StandardAppVersion("liveapp_v2", {
versionId: "v2",
service: "liveapp",
noopOnDestroy: true,
runtime: "nodejs20",
entrypoint: {
shell: "node ./app.js",
},
deployment: {
zip: {
sourceUrl: pulumi.interpolate`https://storage.googleapis.com/${bucket.name}/${object.name}`,
},
},
envVariables: {
port: "8080",
},
});
const liveapp = new gcp.appengine.EngineSplitTraffic("liveapp", {
service: liveappV2.service,
migrateTraffic: false,
split: {
shardBy: "IP",
allocations: pulumi.all([liveappV1.versionId, liveappV2.versionId]).apply(([liveappV1VersionId, liveappV2VersionId]) => {
[liveappV1VersionId]: 0.75,
[liveappV2VersionId]: 0.25,
}),
},
});Content copied to clipboard
import pulumi
import pulumi_gcp as gcp
bucket = gcp.storage.Bucket("bucket",
name="appengine-static-content",
location="US")
object = gcp.storage.BucketObject("object",
name="hello-world.zip",
bucket=bucket.name,
source=pulumi.FileAsset("./test-fixtures/hello-world.zip"))
liveapp_v1 = gcp.appengine.StandardAppVersion("liveapp_v1",
version_id="v1",
service="liveapp",
delete_service_on_destroy=True,
runtime="nodejs20",
entrypoint=gcp.appengine.StandardAppVersionEntrypointArgs(
shell="node ./app.js",
),
deployment=gcp.appengine.StandardAppVersionDeploymentArgs(
zip=gcp.appengine.StandardAppVersionDeploymentZipArgs(
source_url=pulumi.Output.all(bucket.name, object.name).apply(lambda bucketName, objectName: f"https://storage.googleapis.com/{bucket_name}/{object_name}"),
),
),
env_variables={
"port": "8080",
})
liveapp_v2 = gcp.appengine.StandardAppVersion("liveapp_v2",
version_id="v2",
service="liveapp",
noop_on_destroy=True,
runtime="nodejs20",
entrypoint=gcp.appengine.StandardAppVersionEntrypointArgs(
shell="node ./app.js",
),
deployment=gcp.appengine.StandardAppVersionDeploymentArgs(
zip=gcp.appengine.StandardAppVersionDeploymentZipArgs(
source_url=pulumi.Output.all(bucket.name, object.name).apply(lambda bucketName, objectName: f"https://storage.googleapis.com/{bucket_name}/{object_name}"),
),
),
env_variables={
"port": "8080",
})
liveapp = gcp.appengine.EngineSplitTraffic("liveapp",
service=liveapp_v2.service,
migrate_traffic=False,
split=gcp.appengine.EngineSplitTrafficSplitArgs(
shard_by="IP",
allocations=pulumi.Output.all(liveapp_v1.version_id, liveapp_v2.version_id).apply(lambda liveappV1Version_id, liveappV2Version_id: {
liveapp_v1_version_id: 0.75,
liveapp_v2_version_id: 0.25,
}),
))Content copied to clipboard
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var bucket = new Gcp.Storage.Bucket("bucket", new()
{
Name = "appengine-static-content",
Location = "US",
});
var @object = new Gcp.Storage.BucketObject("object", new()
{
Name = "hello-world.zip",
Bucket = bucket.Name,
Source = new FileAsset("./test-fixtures/hello-world.zip"),
});
var liveappV1 = new Gcp.AppEngine.StandardAppVersion("liveapp_v1", new()
{
VersionId = "v1",
Service = "liveapp",
DeleteServiceOnDestroy = true,
Runtime = "nodejs20",
Entrypoint = new Gcp.AppEngine.Inputs.StandardAppVersionEntrypointArgs
{
Shell = "node ./app.js",
},
Deployment = new Gcp.AppEngine.Inputs.StandardAppVersionDeploymentArgs
{
Zip = new Gcp.AppEngine.Inputs.StandardAppVersionDeploymentZipArgs
{
SourceUrl = Output.Tuple(bucket.Name, @object.Name).Apply(values =>
{
var bucketName = values.Item1;
var objectName = values.Item2;
return $"https://storage.googleapis.com/{bucketName}/{objectName}";
}),
},
},
EnvVariables =
{
{ "port", "8080" },
},
});
var liveappV2 = new Gcp.AppEngine.StandardAppVersion("liveapp_v2", new()
{
VersionId = "v2",
Service = "liveapp",
NoopOnDestroy = true,
Runtime = "nodejs20",
Entrypoint = new Gcp.AppEngine.Inputs.StandardAppVersionEntrypointArgs
{
Shell = "node ./app.js",
},
Deployment = new Gcp.AppEngine.Inputs.StandardAppVersionDeploymentArgs
{
Zip = new Gcp.AppEngine.Inputs.StandardAppVersionDeploymentZipArgs
{
SourceUrl = Output.Tuple(bucket.Name, @object.Name).Apply(values =>
{
var bucketName = values.Item1;
var objectName = values.Item2;
return $"https://storage.googleapis.com/{bucketName}/{objectName}";
}),
},
},
EnvVariables =
{
{ "port", "8080" },
},
});
var liveapp = new Gcp.AppEngine.EngineSplitTraffic("liveapp", new()
{
Service = liveappV2.Service,
MigrateTraffic = false,
Split = new Gcp.AppEngine.Inputs.EngineSplitTrafficSplitArgs
{
ShardBy = "IP",
Allocations = Output.Tuple(liveappV1.VersionId, liveappV2.VersionId).Apply(values =>
{
var liveappV1VersionId = values.Item1;
var liveappV2VersionId = values.Item2;
return
{
{ liveappV1VersionId, 0.75 },
{ liveappV2VersionId, 0.25 },
};
}),
},
});
});Content copied to clipboard
resources:
bucket:
type: gcp:storage:Bucket
properties:
name: appengine-static-content
location: US
object:
type: gcp:storage:BucketObject
properties:
name: hello-world.zip
bucket: ${bucket.name}
source:
fn::FileAsset: ./test-fixtures/hello-world.zip
liveappV1:
type: gcp:appengine:StandardAppVersion
name: liveapp_v1
properties:
versionId: v1
service: liveapp
deleteServiceOnDestroy: true
runtime: nodejs20
entrypoint:
shell: node ./app.js
deployment:
zip:
sourceUrl: https://storage.googleapis.com/${bucket.name}/${object.name}
envVariables:
port: '8080'
liveappV2:
type: gcp:appengine:StandardAppVersion
name: liveapp_v2
properties:
versionId: v2
service: liveapp
noopOnDestroy: true
runtime: nodejs20
entrypoint:
shell: node ./app.js
deployment:
zip:
sourceUrl: https://storage.googleapis.com/${bucket.name}/${object.name}
envVariables:
port: '8080'
liveapp:
type: gcp:appengine:EngineSplitTraffic
properties:
service: ${liveappV2.service}
migrateTraffic: false
split:
shardBy: IP
allocations:
${liveappV1.versionId}: 0.75
${liveappV2.versionId}: 0.25Content copied to clipboard
Import
ServiceSplitTraffic can be imported using any of these accepted formats:
apps/{{project}}/services/{{service}}{{project}}/{{service}}{{service}}When using thepulumi importcommand, ServiceSplitTraffic can be imported using one of the formats above. For example:
$ pulumi import gcp:appengine/engineSplitTraffic:EngineSplitTraffic default apps/{{project}}/services/{{service}}Content copied to clipboard
$ pulumi import gcp:appengine/engineSplitTraffic:EngineSplitTraffic default {{project}}/{{service}}Content copied to clipboard
$ pulumi import gcp:appengine/engineSplitTraffic:EngineSplitTraffic default {{service}}Content copied to clipboard
Constructors
Link copied to clipboard
constructor(migrateTraffic: Output<Boolean>? = null, project: Output<String>? = null, service: Output<String>? = null, split: Output<EngineSplitTrafficSplitArgs>? = null)