forked from googleapis/google-cloudevents
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata.proto
More file actions
1165 lines (1004 loc) · 46.9 KB
/
data.proto
File metadata and controls
1165 lines (1004 loc) · 46.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.events.cloud.eventarc.v1;
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
import "google/rpc/code.proto";
option csharp_namespace = "Google.Events.Protobuf.Cloud.Eventarc.V1";
option php_namespace = "Google\\Events\\Cloud\\Eventarc\\V1";
option ruby_package = "Google::Events::Cloud::Eventarc::V1";
// A representation of the Channel resource.
// A Channel is a resource on which event providers publish their events.
// The published events are delivered through the transport associated with the
// channel. Note that a channel is associated with exactly one event provider.
message Channel {
// State lists all the possible states of a Channel
enum State {
// Default value. This value is unused.
STATE_UNSPECIFIED = 0;
// The PENDING state indicates that a Channel has been created successfully
// and there is a new activation token available for the subscriber to use
// to convey the Channel to the provider in order to create a Connection.
PENDING = 1;
// The ACTIVE state indicates that a Channel has been successfully
// connected with the event provider.
// An ACTIVE Channel is ready to receive and route events from the
// event provider.
ACTIVE = 2;
// The INACTIVE state indicates that the Channel cannot receive events
// permanently. There are two possible cases this state can happen:
//
// 1. The SaaS provider disconnected from this Channel.
// 2. The Channel activation token has expired but the SaaS provider
// wasn't connected.
//
// To re-establish a Connection with a provider, the subscriber
// should create a new Channel and give it to the provider.
INACTIVE = 3;
}
// Required. The resource name of the channel. Must be unique within the
// location on the project and must be in
// `projects/{project}/locations/{location}/channels/{channel_id}` format.
string name = 1;
// Output only. Server assigned unique identifier for the channel. The value
// is a UUID4 string and guaranteed to remain unchanged until the resource is
// deleted.
string uid = 2;
// Output only. The creation time.
google.protobuf.Timestamp create_time = 5;
// Output only. The last-modified time.
google.protobuf.Timestamp update_time = 6;
// The name of the event provider (e.g. Eventarc SaaS partner) associated
// with the channel. This provider will be granted permissions to publish
// events to the channel. Format:
// `projects/{project}/locations/{location}/providers/{provider_id}`.
string provider = 7;
oneof transport {
// Output only. The name of the Pub/Sub topic created and managed by
// Eventarc system as a transport for the event delivery. Format:
// `projects/{project}/topics/{topic_id}`.
string pubsub_topic = 8;
}
// Output only. The state of a Channel.
State state = 9;
// Output only. The activation token for the channel. The token must be used
// by the provider to register the channel for publishing.
string activation_token = 10;
// Optional. Resource name of a KMS crypto key (managed by the user) used to
// encrypt/decrypt their event data.
//
// It must match the pattern
// `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
string crypto_key_name = 11;
// Output only. Whether or not this Channel satisfies the requirements of
// physical zone separation
bool satisfies_pzs = 12;
// Optional. Resource labels.
map<string, string> labels = 13;
}
// A representation of the ChannelConnection resource.
// A ChannelConnection is a resource which event providers create during the
// activation process to establish a connection between the provider and the
// subscriber channel.
message ChannelConnection {
// Required. The name of the connection.
string name = 1;
// Output only. Server assigned ID of the resource.
// The server guarantees uniqueness and immutability until deleted.
string uid = 2;
// Required. The name of the connected subscriber Channel.
// This is a weak reference to avoid cross project and cross accounts
// references. This must be in
// `projects/{project}/location/{location}/channels/{channel_id}` format.
string channel = 5;
// Output only. The creation time.
google.protobuf.Timestamp create_time = 6;
// Output only. The last-modified time.
google.protobuf.Timestamp update_time = 7;
// Optional. Resource labels.
map<string, string> labels = 9;
}
// An enrollment represents a subscription for messages on a particular message
// bus. It defines a matching criteria for messages on the bus and the
// subscriber endpoint where matched messages should be delivered.
message Enrollment {
// Identifier. Resource name of the form
// projects/{project}/locations/{location}/enrollments/{enrollment}
string name = 1;
// Output only. Server assigned unique identifier for the channel. The value
// is a UUID4 string and guaranteed to remain unchanged until the resource is
// deleted.
string uid = 2;
// Output only. This checksum is computed by the server based on the value of
// other fields, and might be sent only on update and delete requests to
// ensure that the client has an up-to-date value before proceeding.
string etag = 3;
// Output only. The creation time.
google.protobuf.Timestamp create_time = 4;
// Output only. The last-modified time.
google.protobuf.Timestamp update_time = 5;
// Optional. Resource labels.
map<string, string> labels = 6;
// Optional. Resource annotations.
map<string, string> annotations = 7;
// Optional. Resource display name.
string display_name = 8;
// Required. A CEL expression identifying which messages this enrollment
// applies to.
string cel_match = 9;
// Required. Immutable. Resource name of the message bus identifying the
// source of the messages. It matches the form
// projects/{project}/locations/{location}/messageBuses/{messageBus}.
string message_bus = 10;
// Required. Destination is the Pipeline that the Enrollment is delivering to.
// It must point to the full resource name of a Pipeline. Format:
// "projects/{PROJECT_ID}/locations/{region}/pipelines/{PIPELINE_ID)"
string destination = 11;
}
// The configuration for Platform Telemetry logging for Eventarc Advanced
// resources.
message LoggingConfig {
// The different severities for logging supported by Eventarc Advanced
// resources.
// This enum is an exhaustive list of log severities and is FROZEN. Do not
// expect new values to be added.
enum LogSeverity {
// Log severity is not specified. This value is treated the same as NONE,
// but is used to distinguish between no update and update to NONE in
// update_masks.
LOG_SEVERITY_UNSPECIFIED = 0;
// Default value at resource creation, presence of this value must be
// treated as no logging/disable logging.
NONE = 1;
// Debug or trace level logging.
DEBUG = 2;
// Routine information, such as ongoing status or performance.
INFO = 3;
// Normal but significant events, such as start up, shut down, or a
// configuration change.
NOTICE = 4;
// Warning events might cause problems.
WARNING = 5;
// Error events are likely to cause problems.
ERROR = 6;
// Critical events cause more severe problems or outages.
CRITICAL = 7;
// A person must take action immediately.
ALERT = 8;
// One or more systems are unusable.
EMERGENCY = 9;
}
// Optional. The minimum severity of logs that will be sent to
// Stackdriver/Platform Telemetry. Logs at severitiy ≥ this value will be
// sent, unless it is NONE.
LogSeverity log_severity = 1;
}
// A GoogleApiSource represents a subscription of 1P events from a MessageBus.
message GoogleApiSource {
// Config to enable subscribing to all events from a list of projects.
message ProjectSubscriptions {
// Required. A list of projects to receive events from.
//
// All the projects must be in the same org. The listed projects should have
// the format project/{identifier} where identifier can be either the
// project id for project number. A single list may contain both formats. At
// most 100 projects can be listed.
repeated string list = 1;
}
// Config to enabled subscribing to events from other projects in the org.
message OrganizationSubscription {
// Required. Enable org level subscription.
bool enabled = 1;
}
// Identifier. Resource name of the form
// projects/{project}/locations/{location}/googleApiSources/{google_api_source}
string name = 1;
// Output only. Server assigned unique identifier for the channel. The value
// is a UUID4 string and guaranteed to remain unchanged until the resource is
// deleted.
string uid = 2;
// Output only. This checksum is computed by the server based on the value of
// other fields, and might be sent only on update and delete requests to
// ensure that the client has an up-to-date value before proceeding.
string etag = 3;
// Output only. The creation time.
google.protobuf.Timestamp create_time = 4;
// Output only. The last-modified time.
google.protobuf.Timestamp update_time = 5;
// Optional. Resource labels.
map<string, string> labels = 6;
// Optional. Resource annotations.
map<string, string> annotations = 7;
// Optional. Resource display name.
string display_name = 8;
// Required. Destination is the message bus that the GoogleApiSource is
// delivering to. It must be point to the full resource name of a MessageBus.
// Format:
// "projects/{PROJECT_ID}/locations/{region}/messagesBuses/{MESSAGE_BUS_ID)
string destination = 9;
// Optional. Resource name of a KMS crypto key (managed by the user) used to
// encrypt/decrypt their event data.
//
// It must match the pattern
// `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
string crypto_key_name = 10;
// Optional. Config to control Platform logging for the GoogleApiSource.
LoggingConfig logging_config = 11;
// Config to enabled subscribing to events from other projects in the org.
//
// Users need the eventarc.googleApiSource.create permission on the entire org
// in order to create a resource with these settings.
oneof wide_scope_subscription {
// Optional. Config to enable subscribing to events from all projects in the
// GoogleApiSource's org.
OrganizationSubscription organization_subscription = 12;
// Optional. Config to enable subscribing to all events from a list of
// projects.
//
// All the projects must be in the same org as the GoogleApiSource.
ProjectSubscriptions project_subscriptions = 13;
}
}
// Network Configuration that can be inherited by other protos.
message NetworkConfig {
// Required. Name of the NetworkAttachment that allows access to the
// customer's VPC. Format:
// `projects/{PROJECT_ID}/regions/{REGION}/networkAttachments/{NETWORK_ATTACHMENT_NAME}`
string network_attachment = 1;
}
// MessageBus for the messages flowing through the system. The admin has
// visibility and control over the messages being published and consumed and can
// restrict publishers and subscribers to only a subset of data available in the
// system by defining authorization policies.
message MessageBus {
// Identifier. Resource name of the form
// projects/{project}/locations/{location}/messageBuses/{message_bus}
string name = 1;
// Output only. Server assigned unique identifier for the channel. The value
// is a UUID4 string and guaranteed to remain unchanged until the resource is
// deleted.
string uid = 2;
// Output only. This checksum is computed by the server based on the value of
// other fields, and might be sent only on update and delete requests to
// ensure that the client has an up-to-date value before proceeding.
string etag = 3;
// Output only. The creation time.
google.protobuf.Timestamp create_time = 4;
// Output only. The last-modified time.
google.protobuf.Timestamp update_time = 5;
// Optional. Resource labels.
map<string, string> labels = 6;
// Optional. Resource annotations.
map<string, string> annotations = 7;
// Optional. Resource display name.
string display_name = 8;
// Optional. Resource name of a KMS crypto key (managed by the user) used to
// encrypt/decrypt their event data.
//
// It must match the pattern
// `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
string crypto_key_name = 10;
// Optional. Config to control Platform logging for the Message Bus. This log
// configuration is applied to the Message Bus itself, and all the Enrollments
// attached to it.
LoggingConfig logging_config = 11;
}
// A representation of the Pipeline resource.
message Pipeline {
// Represents the format of message data.
message MessagePayloadFormat {
// The format of a JSON message payload.
message JsonFormat {}
// The format of a Protobuf message payload.
message ProtobufFormat {
// Optional. The entire schema definition is stored in this field.
string schema_definition = 1;
}
// The format of an AVRO message payload.
message AvroFormat {
// Optional. The entire schema definition is stored in this field.
string schema_definition = 1;
}
// The kind of message format.
// One of Protobuf, Avro, and JSON supported.
// This allows specification of what specific format
// messages are sent and received.
oneof kind {
// Optional. Protobuf format.
ProtobufFormat protobuf = 1;
// Optional. Avro format.
AvroFormat avro = 2;
// Optional. JSON format.
JsonFormat json = 3;
}
}
// Represents a target of an invocation over HTTP.
message Destination {
// Represents a network config to be used for destination resolution and
// connectivity.
message NetworkConfig {
// Required. Name of the NetworkAttachment that allows access to the
// consumer VPC. Format:
// `projects/{PROJECT_ID}/regions/{REGION}/networkAttachments/{NETWORK_ATTACHMENT_NAME}`
string network_attachment = 1;
}
// Represents a HTTP endpoint destination.
message HttpEndpoint {
// Required. The URI of the HTTP endpoint.
//
// The value must be a RFC2396 URI string.
// Examples: `https://svc.us-central1.p.local:8080/route`.
// Only the HTTPS protocol is supported.
string uri = 1;
// Optional. The CEL expression used to modify how the destination-bound
// HTTP request is constructed.
//
// If a binding expression is not specified here, the message
// is treated as a CloudEvent and is mapped to the HTTP request according
// to the CloudEvent HTTP Protocol Binding Binary Content Mode
// (https://github.com/cloudevents/spec/blob/main/cloudevents/bindings/http-protocol-binding.md#31-binary-content-mode).
// In this representation, all fields except the `data` and
// `datacontenttype` field on the message are mapped to HTTP request
// headers with a prefix of `ce-`.
//
// To construct the HTTP request payload and the value of the content-type
// HTTP header, the payload format is defined as follows:
// 1) Use the output_payload_format_type on the Pipeline.Destination if it
// is set, else:
// 2) Use the input_payload_format_type on the Pipeline if it is set,
// else:
// 3) Treat the payload as opaque binary data.
//
// The `data` field of the message is converted to the payload format or
// left as-is for case 3) and then attached as the payload of the HTTP
// request. The `content-type` header on the HTTP request is set to the
// payload format type or left empty for case 3). However, if a mediation
// has updated the `datacontenttype` field on the message so that it is
// not the same as the payload format type but it is still a prefix of the
// payload format type, then the `content-type` header on the HTTP request
// is set to this `datacontenttype` value. For example, if the
// `datacontenttype` is "application/json" and the payload format type is
// "application/json; charset=utf-8", then the `content-type` header on
// the HTTP request is set to "application/json; charset=utf-8".
//
// If a non-empty binding expression is specified then this expression is
// used to modify the default CloudEvent HTTP Protocol Binding Binary
// Content representation.
// The result of the CEL expression must be a map of key/value pairs
// which is used as follows:
// - If a map named `headers` exists on the result of the expression,
// then its key/value pairs are directly mapped to the HTTP request
// headers. The headers values are constructed from the corresponding
// value type's canonical representation. If the `headers` field doesn't
// exist then the resulting HTTP request will be the headers of the
// CloudEvent HTTP Binding Binary Content Mode representation of the final
// message. Note: If the specified binding expression, has updated the
// `datacontenttype` field on the message so that it is not the same as
// the payload format type but it is still a prefix of the payload format
// type, then the `content-type` header in the `headers` map is set to
// this `datacontenttype` value.
// - If a field named `body` exists on the result of the expression then
// its value is directly mapped to the body of the request. If the value
// of the `body` field is of type bytes or string then it is used for
// the HTTP request body as-is, with no conversion. If the body field is
// of any other type then it is converted to a JSON string. If the body
// field does not exist then the resulting payload of the HTTP request
// will be data value of the CloudEvent HTTP Binding Binary Content Mode
// representation of the final message as described earlier.
// - Any other fields in the resulting expression will be ignored.
//
// The CEL expression may access the incoming CloudEvent message in its
// definition, as follows:
// - The `data` field of the incoming CloudEvent message can be accessed
// using the `message.data` value. Subfields of `message.data` may also be
// accessed if an input_payload_format has been specified on the Pipeline.
// - Each attribute of the incoming CloudEvent message can be accessed
// using the `message.<key>` value, where <key> is replaced with the
// name of the attribute.
// - Existing headers can be accessed in the CEL expression using the
// `headers` variable. The `headers` variable defines a map of key/value
// pairs corresponding to the HTTP headers of the CloudEvent HTTP Binding
// Binary Content Mode representation of the final message as described
// earlier. For example, the following CEL expression can be used to
// construct an HTTP request by adding an additional header to the HTTP
// headers of the CloudEvent HTTP Binding Binary Content Mode
// representation of the final message and by overwriting the body of the
// request:
//
// ```
// {
// "headers": headers.merge({"new-header-key": "new-header-value"}),
// "body": "new-body"
// }
// ```
// - The default binding for the message payload can be accessed using the
// `body` variable. It conatins a string representation of the message
// payload in the format specified by the `output_payload_format` field.
// If the `input_payload_format` field is not set, the `body`
// variable contains the same message payload bytes that were published.
//
// Additionally, the following CEL extension functions are provided for
// use in this CEL expression:
// - toBase64Url:
// map.toBase64Url() -> string
// - Converts a CelValue to a base64url encoded string
// - toJsonString: map.toJsonString() -> string
// - Converts a CelValue to a JSON string
// - merge:
// map1.merge(map2) -> map3
// - Merges the passed CEL map with the existing CEL map the
// function is applied to.
// - If the same key exists in both maps, if the key's value is type
// map both maps are merged else the value from the passed map is
// used.
// - denormalize:
// map.denormalize() -> map
// - Denormalizes a CEL map such that every value of type map or key
// in the map is expanded to return a single level map.
// - The resulting keys are "." separated indices of the map keys.
// - For example:
// {
// "a": 1,
// "b": {
// "c": 2,
// "d": 3
// }
// "e": [4, 5]
// }
// .denormalize()
// -> {
// "a": 1,
// "b.c": 2,
// "b.d": 3,
// "e.0": 4,
// "e.1": 5
// }
// - setField:
// map.setField(key, value) -> message
// - Sets the field of the message with the given key to the
// given value.
// - If the field is not present it will be added.
// - If the field is present it will be overwritten.
// - The key can be a dot separated path to set a field in a nested
// message.
// - Key must be of type string.
// - Value may be any valid type.
// - removeFields:
// map.removeFields([key1, key2, ...]) -> message
// - Removes the fields of the map with the given keys.
// - The keys can be a dot separated path to remove a field in a
// nested message.
// - If a key is not found it will be ignored.
// - Keys must be of type string.
// - toMap:
// [map1, map2, ...].toMap() -> map
// - Converts a CEL list of CEL maps to a single CEL map
// - toCloudEventJsonWithPayloadFormat:
// message.toCloudEventJsonWithPayloadFormat() -> map
// - Converts a message to the corresponding structure of JSON
// format for CloudEvents.
// - It converts `data` to destination payload format
// specified in `output_payload_format`. If `output_payload_format` is
// not set, the data will remain unchanged.
// - It also sets the corresponding datacontenttype of
// the CloudEvent, as indicated by
// `output_payload_format`. If no
// `output_payload_format` is set it will use the value of the
// "datacontenttype" attribute on the CloudEvent if present, else
// remove "datacontenttype" attribute.
// - This function expects that the content of the message will
// adhere to the standard CloudEvent format. If it doesn't then this
// function will fail.
// - The result is a CEL map that corresponds to the JSON
// representation of the CloudEvent. To convert that data to a JSON
// string it can be chained with the toJsonString function.
//
// The Pipeline expects that the message it receives adheres to the
// standard CloudEvent format. If it doesn't then the outgoing message
// request may fail with a persistent error.
string message_binding_template = 3;
}
// Represents a config used to authenticate message requests.
message AuthenticationConfig {
// Represents a config used to authenticate with a Google OIDC token using
// a Google Cloud service account. Use this authentication method to
// invoke your Cloud Run and Cloud Functions destinations or HTTP
// endpoints that support Google OIDC.
message OidcToken {
// Required. Service account email used to generate the OIDC Token.
// The principal who calls this API must have
// iam.serviceAccounts.actAs permission in the service account. See
// https://cloud.google.com/iam/docs/understanding-service-accounts
// for more information. Eventarc service agents must have
// roles/roles/iam.serviceAccountTokenCreator role to allow the
// Pipeline to create OpenID tokens for authenticated requests.
string service_account = 1;
// Optional. Audience to be used to generate the OIDC Token. The
// audience claim identifies the recipient that the JWT is intended for.
// If unspecified, the destination URI will be used.
string audience = 2;
}
// Contains information needed for generating an
// [OAuth token](https://developers.google.com/identity/protocols/OAuth2).
// This type of authorization should generally only be used when calling
// Google APIs hosted on *.googleapis.com.
message OAuthToken {
// Required. Service account email used to generate the [OAuth
// token](https://developers.google.com/identity/protocols/OAuth2).
// The principal who calls this API must have
// iam.serviceAccounts.actAs permission in the service account. See
// https://cloud.google.com/iam/docs/understanding-service-accounts
// for more information. Eventarc service agents must have
// roles/roles/iam.serviceAccountTokenCreator role to allow Pipeline
// to create OAuth2 tokens for authenticated requests.
string service_account = 1;
// Optional. OAuth scope to be used for generating OAuth access token.
// If not specified, "https://www.googleapis.com/auth/cloud-platform"
// will be used.
string scope = 2;
}
// The type of authentication method.
oneof authentication_method_descriptor {
// Optional. This authenticate method will apply Google OIDC tokens
// signed by a Google Cloud service account to the requests.
OidcToken google_oidc = 1;
// Optional. If specified, an [OAuth
// token](https://developers.google.com/identity/protocols/OAuth2) will
// be generated and attached as an `Authorization` header in the HTTP
// request.
//
// This type of authorization should generally only be used when calling
// Google APIs hosted on *.googleapis.com.
OAuthToken oauth_token = 2;
}
}
// Optional. Network config is used to configure how Pipeline resolves and
// connects to a destination.
NetworkConfig network_config = 1;
// The destination identifier to which the request should be routed to.
oneof destination_descriptor {
// Optional. An HTTP endpoint destination described by an URI.
// If a DNS FQDN is provided as the endpoint, Pipeline will create a
// peering zone to the consumer VPC and forward DNS requests to the VPC
// specified by network config to resolve the service endpoint. See:
// https://cloud.google.com/dns/docs/zones/zones-overview#peering_zones
HttpEndpoint http_endpoint = 2;
// Optional. The resource name of the Workflow whose Executions are
// triggered by the events. The Workflow resource should be deployed in
// the same project as the Pipeline. Format:
// `projects/{project}/locations/{location}/workflows/{workflow}`
string workflow = 3;
// Optional. The resource name of the Message Bus to which events should
// be published. The Message Bus resource should exist in the same project
// as the Pipeline. Format:
// `projects/{project}/locations/{location}/messageBuses/{message_bus}`
string message_bus = 4;
// Optional. The resource name of the Pub/Sub topic to which events should
// be published. Format:
// `projects/{project}/locations/{location}/topics/{topic}`
string topic = 8;
}
// Optional. An authentication config used to authenticate message requests,
// such that destinations can verify the source. For example, this can be
// used with private Google Cloud destinations that require Google Cloud
// credentials for access like Cloud Run. This field is optional and should
// be set only by users interested in authenticated push.
AuthenticationConfig authentication_config = 5;
// Optional. The message format before it is delivered to the destination.
// If not set, the message will be delivered in the format it was originally
// delivered to the Pipeline. This field can only be set if
// Pipeline.input_payload_format is also set.
MessagePayloadFormat output_payload_format = 6;
}
// Mediation defines different ways to modify the Pipeline.
message Mediation {
// Transformation defines the way to transform an incoming message.
message Transformation {
// Optional. The CEL expression template to apply to transform messages.
// The following CEL extension functions are provided for
// use in this CEL expression:
// - merge:
// map1.merge(map2) -> map3
// - Merges the passed CEL map with the existing CEL map the
// function is applied to.
// - If the same key exists in both maps, if the key's value is type
// map both maps are merged else the value from the passed map is
// used.
// - denormalize:
// map.denormalize() -> map
// - Denormalizes a CEL map such that every value of type map or key
// in the map is expanded to return a single level map.
// - The resulting keys are "." separated indices of the map keys.
// - For example:
// {
// "a": 1,
// "b": {
// "c": 2,
// "d": 3
// }
// "e": [4, 5]
// }
// .denormalize()
// -> {
// "a": 1,
// "b.c": 2,
// "b.d": 3,
// "e.0": 4,
// "e.1": 5
// }
// - setField:
// map.setField(key, value) -> message
// - Sets the field of the message with the given key to the
// given value.
// - If the field is not present it will be added.
// - If the field is present it will be overwritten.
// - The key can be a dot separated path to set a field in a nested
// message.
// - Key must be of type string.
// - Value may be any valid type.
// - removeFields:
// map.removeFields([key1, key2, ...]) -> message
// - Removes the fields of the map with the given keys.
// - The keys can be a dot separated path to remove a field in a
// nested message.
// - If a key is not found it will be ignored.
// - Keys must be of type string.
// - toMap:
// [map1, map2, ...].toMap() -> map
// - Converts a CEL list of CEL maps to a single CEL map
// - toDestinationPayloadFormat():
// message.data.toDestinationPayloadFormat() -> string or bytes
// - Converts the message data to the destination payload format
// specified in Pipeline.Destination.output_payload_format
// - This function is meant to be applied to the message.data field.
// - If the destination payload format is not set, the function will
// return the message data unchanged.
// - toCloudEventJsonWithPayloadFormat:
// message.toCloudEventJsonWithPayloadFormat() -> map
// - Converts a message to the corresponding structure of JSON
// format for CloudEvents
// - This function applies toDestinationPayloadFormat() to the
// message data. It also sets the corresponding datacontenttype of
// the CloudEvent, as indicated by
// Pipeline.Destination.output_payload_format. If no
// output_payload_format is set it will use the existing
// datacontenttype on the CloudEvent if present, else leave
// datacontenttype absent.
// - This function expects that the content of the message will
// adhere to the standard CloudEvent format. If it doesn't then this
// function will fail.
// - The result is a CEL map that corresponds to the JSON
// representation of the CloudEvent. To convert that data to a JSON
// string it can be chained with the toJsonString function.
string transformation_template = 1;
}
// The config of mediation.
oneof mediation_descriptor {
// Optional. How the Pipeline is to transform messages
Transformation transformation = 1;
}
}
// The retry policy configuration for the Pipeline. The pipeline
// exponentially backs off in case the destination is non responsive or
// returns a retryable error code. The default semantics are as follows:
// The backoff starts with a 5 second delay and doubles the
// delay after each failed attempt (10 seconds, 20 seconds, 40 seconds, etc.).
// The delay is capped at 60 seconds by default.
// Please note that if you set the min_retry_delay and max_retry_delay fields
// to the same value this will make the duration between retries constant.
message RetryPolicy {
// Optional. The maximum number of delivery attempts for any message. The
// value must be between 1 and 100. The default value for this field is 5.
int32 max_attempts = 1;
// Optional. The minimum amount of seconds to wait between retry attempts.
// The value must be between 1 and 600. The default value for this field
// is 5.
google.protobuf.Duration min_retry_delay = 2;
// Optional. The maximum amount of seconds to wait between retry attempts.
// The value must be between 1 and 600. The default value for this field
// is 60.
google.protobuf.Duration max_retry_delay = 3;
}
// Identifier. The resource name of the Pipeline. Must be unique within the
// location of the project and must be in
// `projects/{project}/locations/{location}/pipelines/{pipeline}` format.
string name = 1;
// Output only. The creation time.
// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up
// to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and
// "2014-10-02T15:01:23.045123456Z".
google.protobuf.Timestamp create_time = 2;
// Output only. The last-modified time.
// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up
// to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and
// "2014-10-02T15:01:23.045123456Z".
google.protobuf.Timestamp update_time = 3;
// Optional. User labels attached to the Pipeline that can be used to group
// resources. An object containing a list of "key": value pairs. Example: {
// "name": "wrench", "mass": "1.3kg", "count": "3" }.
map<string, string> labels = 4;
// Output only. Server-assigned unique identifier for the Pipeline. The value
// is a UUID4 string and guaranteed to remain unchanged until the resource is
// deleted.
string uid = 5;
// Optional. User-defined annotations. See
// https://google.aip.dev/128#annotations.
map<string, string> annotations = 6;
// Optional. Display name of resource.
string display_name = 7;
// Required. List of destinations to which messages will be forwarded.
// Currently, exactly one destination is supported per Pipeline.
repeated Destination destinations = 8;
// Optional. List of mediation operations to be performed on the message.
// Currently, only one Transformation operation is allowed in each Pipeline.
repeated Mediation mediations = 9;
// Optional. Resource name of a KMS crypto key (managed by the user) used to
// encrypt/decrypt the event data. If not set, an internal Google-owned key
// will be used to encrypt messages. It must match the pattern
// "projects/{project}/locations/{location}/keyRings/{keyring}/cryptoKeys/{key}".
string crypto_key_name = 10;
// Optional. The payload format expected for the messages received by the
// Pipeline. If input_payload_format is set then any messages not matching
// this format will be treated as persistent errors. If input_payload_format
// is not set, then the message data will be treated as an opaque binary and
// no output format can be set on the Pipeline through the
// Pipeline.Destination.output_payload_format field. Any Mediations on the
// Pipeline that involve access to the data field will fail as persistent
// errors.
MessagePayloadFormat input_payload_format = 11;
// Optional. Config to control Platform Logging for Pipelines.
LoggingConfig logging_config = 12;
// Optional. The retry policy to use in the pipeline.
RetryPolicy retry_policy = 13;
// Output only. This checksum is computed by the server based on the value of
// other fields, and might be sent only on create requests to ensure that the
// client has an up-to-date value before proceeding.
string etag = 99;
// Output only. Whether or not this Pipeline satisfies the requirements of
// physical zone separation
bool satisfies_pzs = 14;
}
// A representation of the trigger resource.
message Trigger {
// The retry policy configuration for the Trigger.
//
// Can only be set with Cloud Run destinations.
message RetryPolicy {
// Optional. The maximum number of delivery attempts for any message. The
// only valid value is 1.
int32 max_attempts = 1;
}
// Required. The resource name of the trigger. Must be unique within the
// location of the project and must be in
// `projects/{project}/locations/{location}/triggers/{trigger}` format.
string name = 1;
// Output only. Server-assigned unique identifier for the trigger. The value
// is a UUID4 string and guaranteed to remain unchanged until the resource is
// deleted.
string uid = 2;
// Output only. The creation time.
google.protobuf.Timestamp create_time = 5;
// Output only. The last-modified time.
google.protobuf.Timestamp update_time = 6;
// Required. Unordered list. The list of filters that applies to event
// attributes. Only events that match all the provided filters are sent to the
// destination.
repeated EventFilter event_filters = 8;
// Optional. The IAM service account email associated with the trigger. The
// service account represents the identity of the trigger.
//
// The `iam.serviceAccounts.actAs` permission must be granted on the service
// account to allow a principal to impersonate the service account. For more
// information, see the
// [Roles and permissions](/eventarc/docs/all-roles-permissions) page specific
// to the trigger destination.
string service_account = 9;
// Required. Destination specifies where the events should be sent to.
Destination destination = 10;
// Optional. To deliver messages, Eventarc might use other Google Cloud
// products as a transport intermediary. This field contains a reference to
// that transport intermediary. This information can be used for debugging
// purposes.
Transport transport = 11;
// Optional. User labels attached to the triggers that can be used to group
// resources.
map<string, string> labels = 12;
// Optional. The name of the channel associated with the trigger in
// `projects/{project}/locations/{location}/channels/{channel}` format.
// You must provide a channel to receive events from Eventarc SaaS partners.
string channel = 13;
// Output only. The reason(s) why a trigger is in FAILED state.
map<string, StateCondition> conditions = 15;
// Optional. EventDataContentType specifies the type of payload in MIME
// format that is expected from the CloudEvent data field. This is set to
// `application/json` if the value is not defined.
string event_data_content_type = 16;
// Output only. Whether or not this Trigger satisfies the requirements of
// physical zone separation
bool satisfies_pzs = 19;
// Optional. The retry policy to use in the Trigger.
//
// If unset, event delivery will be retried for up to 24 hours by default:
// https://cloud.google.com/eventarc/docs/retry-events
RetryPolicy retry_policy = 20;
// Output only. This checksum is computed by the server based on the value of
// other fields, and might be sent only on create requests to ensure that the
// client has an up-to-date value before proceeding.
string etag = 99;
}
// Filters events based on exact matches on the CloudEvents attributes.
message EventFilter {
// Required. The name of a CloudEvents attribute. Currently, only a subset of
// attributes are supported for filtering. You can [retrieve a specific
// provider's supported event
// types](/eventarc/docs/list-providers#describe-provider).
//
// All triggers MUST provide a filter for the 'type' attribute.
string attribute = 1;
// Required. The value for the attribute.
string value = 2;
// Optional. The operator used for matching the events with the value of the
// filter. If not specified, only events that have an exact key-value pair
// specified in the filter are matched. The allowed values are `path_pattern`
// and `match-path-pattern`. `path_pattern` is only allowed for GCFv1
// triggers.
string operator = 3;
}
// A condition that is part of the trigger state computation.
message StateCondition {
// The canonical code of the condition.
google.rpc.Code code = 1;
// Human-readable message.
string message = 2;