Schema Args
A schema is a format that messages must follow, creating a contract between publisher and subscriber that Pub/Sub will enforce. To get more information about Schema, see:
How-to Guides
Example Usage
Pubsub Schema Basic
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const example = new gcp.pubsub.Schema("example", {
name: "example-schema",
type: "AVRO",
definition: `{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "StringField",
"type" : "string"
},
{
"name" : "IntField",
"type" : "int"
}
]
}
`,
});
import pulumi
import pulumi_gcp as gcp
example = gcp.pubsub.Schema("example",
name="example-schema",
type="AVRO",
definition="""{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "StringField",
"type" : "string"
},
{
"name" : "IntField",
"type" : "int"
}
]
}
""")
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var example = new Gcp.PubSub.Schema("example", new()
{
Name = "example-schema",
Type = "AVRO",
Definition = @"{
""type"" : ""record"",
""name"" : ""Avro"",
""fields"" : [
{
""name"" : ""StringField"",
""type"" : ""string""
},
{
""name"" : ""IntField"",
""type"" : ""int""
}
]
}
",
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := pubsub.NewSchema(ctx, "example", &pubsub.SchemaArgs{
Name: pulumi.String("example-schema"),
Type: pulumi.String("AVRO"),
Definition: pulumi.String(`{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "StringField",
"type" : "string"
},
{
"name" : "IntField",
"type" : "int"
}
]
}
`),
})
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.pubsub.Schema;
import com.pulumi.gcp.pubsub.SchemaArgs;
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 example = new Schema("example", SchemaArgs.builder()
.name("example-schema")
.type("AVRO")
.definition("""
{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "StringField",
"type" : "string"
},
{
"name" : "IntField",
"type" : "int"
}
]
}
""")
.build());
}
}
resources:
example:
type: gcp:pubsub:Schema
properties:
name: example-schema
type: AVRO
definition: |
{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "StringField",
"type" : "string"
},
{
"name" : "IntField",
"type" : "int"
}
]
}
Pubsub Schema Protobuf
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const example = new gcp.pubsub.Schema("example", {
name: "example",
type: "PROTOCOL_BUFFER",
definition: `syntax = "proto3";
message Results {
string message_request = 1;
string message_response = 2;
string timestamp_request = 3;
string timestamp_response = 4;
}`,
});
const exampleTopic = new gcp.pubsub.Topic("example", {
name: "example-topic",
schemaSettings: {
schema: "projects/my-project-name/schemas/example",
encoding: "JSON",
},
}, {
dependsOn: [example],
});
import pulumi
import pulumi_gcp as gcp
example = gcp.pubsub.Schema("example",
name="example",
type="PROTOCOL_BUFFER",
definition="""syntax = "proto3";
message Results {
string message_request = 1;
string message_response = 2;
string timestamp_request = 3;
string timestamp_response = 4;
}""")
example_topic = gcp.pubsub.Topic("example",
name="example-topic",
schema_settings={
"schema": "projects/my-project-name/schemas/example",
"encoding": "JSON",
},
opts = pulumi.ResourceOptions(depends_on=[example]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var example = new Gcp.PubSub.Schema("example", new()
{
Name = "example",
Type = "PROTOCOL_BUFFER",
Definition = @"syntax = ""proto3"";
message Results {
string message_request = 1;
string message_response = 2;
string timestamp_request = 3;
string timestamp_response = 4;
}",
});
var exampleTopic = new Gcp.PubSub.Topic("example", new()
{
Name = "example-topic",
SchemaSettings = new Gcp.PubSub.Inputs.TopicSchemaSettingsArgs
{
Schema = "projects/my-project-name/schemas/example",
Encoding = "JSON",
},
}, new CustomResourceOptions
{
DependsOn =
{
example,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
example, err := pubsub.NewSchema(ctx, "example", &pubsub.SchemaArgs{
Name: pulumi.String("example"),
Type: pulumi.String("PROTOCOL_BUFFER"),
Definition: pulumi.String(`syntax = "proto3";
message Results {
string message_request = 1;
string message_response = 2;
string timestamp_request = 3;
string timestamp_response = 4;
}`),
})
if err != nil {
return err
}
_, err = pubsub.NewTopic(ctx, "example", &pubsub.TopicArgs{
Name: pulumi.String("example-topic"),
SchemaSettings: &pubsub.TopicSchemaSettingsArgs{
Schema: pulumi.String("projects/my-project-name/schemas/example"),
Encoding: pulumi.String("JSON"),
},
}, pulumi.DependsOn([]pulumi.Resource{
example,
}))
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.pubsub.Schema;
import com.pulumi.gcp.pubsub.SchemaArgs;
import com.pulumi.gcp.pubsub.Topic;
import com.pulumi.gcp.pubsub.TopicArgs;
import com.pulumi.gcp.pubsub.inputs.TopicSchemaSettingsArgs;
import com.pulumi.resources.CustomResourceOptions;
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 example = new Schema("example", SchemaArgs.builder()
.name("example")
.type("PROTOCOL_BUFFER")
.definition("""
syntax = "proto3";
message Results {
string message_request = 1;
string message_response = 2;
string timestamp_request = 3;
string timestamp_response = 4;
} """)
.build());
var exampleTopic = new Topic("exampleTopic", TopicArgs.builder()
.name("example-topic")
.schemaSettings(TopicSchemaSettingsArgs.builder()
.schema("projects/my-project-name/schemas/example")
.encoding("JSON")
.build())
.build(), CustomResourceOptions.builder()
.dependsOn(example)
.build());
}
}
resources:
example:
type: gcp:pubsub:Schema
properties:
name: example
type: PROTOCOL_BUFFER
definition: |-
syntax = "proto3";
message Results {
string message_request = 1;
string message_response = 2;
string timestamp_request = 3;
string timestamp_response = 4;
}
exampleTopic:
type: gcp:pubsub:Topic
name: example
properties:
name: example-topic
schemaSettings:
schema: projects/my-project-name/schemas/example
encoding: JSON
options:
dependsOn:
- ${example}
Import
Schema can be imported using any of these accepted formats:
projects/{{project}}/schemas/{{name}}
{{project}}/{{name}}
{{name}}
When using thepulumi import
command, Schema can be imported using one of the formats above. For example:
$ pulumi import gcp:pubsub/schema:Schema default projects/{{project}}/schemas/{{name}}
$ pulumi import gcp:pubsub/schema:Schema default {{project}}/{{name}}
$ pulumi import gcp:pubsub/schema:Schema default {{name}}
Properties
The definition of the schema. This should contain a string representing the full definition of the schema that is a valid schema definition of the type specified in type. Changes to the definition commit new schema revisions. A schema can only have up to 20 revisions, so updates that fail with an error indicating that the limit has been reached require manually deleting old revisions.