Common Expression Language (CEL)는 표현식을 평가하는 데 사용할 수 있는 오픈소스 비튜링 완전 언어입니다. Eventarc Advanced의 모든 등록에는 메시지를 평가하고 필터링하는 데 사용되는 CEL로 작성된 조건 표현식이 포함되어 있습니다. CEL을 사용하여 변환 표현식을 작성하여 이벤트 데이터 콘텐츠를 변환할 수도 있습니다.
일반적으로 조건 표현식은 논리 연산자 (&&
, ||
, !
)로 결합된 하나 이상의 문으로 구성됩니다. 각 문은 데이터에 적용되는 속성 기반 규칙을 나타냅니다. 일반적으로 연산자는 변수에 포함된 값을 리터럴 값과 비교하는 데 사용됩니다.
예를 들어 message.type
의 값이 google.cloud.dataflow.job.v1beta3.statusChanged
이면 message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
표현식은 True
로 평가됩니다.
자세한 내용은 다음을 참조하세요.
사용 가능한 속성
모든 이벤트 컨텍스트 속성은 사전 정의된 message
객체를 통해 변수로 액세스할 수 있습니다. 이러한 변수는 런타임 시 이벤트 컨텍스트 속성을 기반으로 값으로 채워집니다. 등록은 변수를 사용하여 지정된 속성을 표현할 수 있습니다. 예를 들어 message.type
는 type
속성의 값을 반환합니다.
다음에 유의하세요.
이벤트는 고유한 이름 (확장 속성이라고도 함)을 가진 맞춤 CloudEvents 속성을 추가로 포함할 수 있으며 등록은 이를 사용할 수 있습니다. 그러나 실제 형식과 관계없이 CEL 표현식에서는
String
유형으로 표시됩니다. CEL 표현식을 사용하여 값을 다른 유형으로 변환할 수 있습니다.이벤트 페이로드 콘텐츠를 기반으로 등록을 평가할 수는 없습니다.
message.data
와message.data_base64
는 모두 예약된 변수이며 표현식에 사용할 수 없습니다. 그러나 이벤트 데이터를 변환할 때는 CEL이 지원되므로 이벤트 페이로드 콘텐츠를 수정할 수 있습니다 (예: 특정 대상의 API 계약을 충족하기 위해).
등록의 조건 표현식을 평가할 때 다음 속성에 액세스할 수 있습니다.
속성 | 속성 유형 | 설명 |
---|---|---|
message.datacontenttype |
String |
data 값의 콘텐츠 유형 |
message.dataschema |
URI |
data 가 준수하는 스키마를 식별합니다. |
message.id |
String |
이벤트를 식별합니다. 제작자는 source + id 가 고유한 이벤트마다 고유해야 합니다. |
message.source |
URI-reference |
이벤트가 발생한 컨텍스트를 식별합니다. |
message.specversion |
String |
이벤트에서 사용하는 CloudEvents 사양 버전입니다. |
message.subject |
String |
이벤트 제작자의 맥락에서 이벤트의 주제를 설명합니다(source 로 식별됨). |
message.time |
Timestamp |
발생 시점의 타임스탬프입니다. CloudEvents 생산자가 다른 시간 (예: 현재 시간)으로 설정할 수 있지만 동일한 source 의 모든 생산자는 일관성이 있어야 합니다. |
message.type |
String |
원래 발생과 관련된 이벤트 유형을 설명합니다. |
연산자 및 함수
연산자와 함수를 사용하여 복잡한 로직 표현식을 빌드할 수 있습니다.
&&
, ||,
, !
와 같은 논리 연산자를 사용하면 조건부 표현식에서 여러 변수를 확인할 수 있습니다. 예를 들어 message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
은 두 개의 문을 결합하며, 전체 결과 True
를 도출하려면 두 문이 모두 True
여야 합니다.
x.contains('y')
와 같은 문자열 조작 연산자는 정의된 문자열 또는 하위 문자열과 일치하며, 가능한 모든 조합을 나열하지 않고도 메시지를 일치시키는 규칙을 개발할 수 있게 해줍니다.
Eventarc Advanced는 데이터를 변환하고 버스에서 수신한 이벤트의 수정을 간소화하는 데 사용할 수 있는 merge
및 flatten
와 같은 확장 함수도 지원합니다.
CEL 사전 정의된 연산자 및 함수 및 CEL 사전 정의된 매크로 목록을 참고하세요.
논리 연산자
다음 표에서는 Eventarc Advanced에서 지원하는 논리 연산자를 설명합니다.
표현식 | 설명 |
---|---|
x == "my_string" |
x 가 상수 문자열 리터럴 인수와 같으면 True 를 반환합니다. |
x == R"my_string\n" |
x 가 이스케이프 문자 시퀀스를 해석하지 않는 지정된 원시 문자열 리터럴과 같으면 True 를 반환합니다. 원시 문자열 리터럴은 정규 표현식이나 프로그램 텍스트와 같이 자체적으로 이스케이프 시퀀스를 사용해야 하는 문자열을 표현하는 데 편리합니다. |
x == y |
x 가 y 와 같으면 True 를 반환합니다. |
x != y |
x 가 y 와 같지 않으면 True 를 반환합니다. |
x && y |
x , y 가 모두 True 이면 True 를 반환합니다. |
x || y |
x , y 또는 둘 다 True 이면 True 를 반환합니다. |
!x |
불리언 값 x 가 False 이면 True 를 반환하고 불리언 값 x 가 True 이면 False 를 반환합니다. |
m['k'] |
키 k 가 있으면 문자열 대 문자열 지도 m 에서 키 k 의 값을 반환합니다. k 키가 없으면 평가 시 규칙이 일치하지 않는 오류가 반환됩니다. |
문자열 조작 연산자
다음 표에서는 Eventarc Advanced에서 지원하는 문자열 조작 연산자를 설명합니다.
표현식 | 설명 |
---|---|
double(x) |
x 의 문자열 결과를 double 유형으로 변환합니다. 변환된 문자열은 부동 소수점 숫자를 > 및 <= 와 같은 표준 산술 연산자와 비교하는 데 사용할 수 있습니다. 이는 부동 소수점 수일 수 있는 값에만 작동합니다. |
int(x) |
x 의 문자열 결과를 int 유형으로 변환합니다. 변환된 문자열은 > 및 <= 같은 표준 산술 연산자를 사용한 정수 비교에 사용할 수 있습니다. 이는 정수가 될 수 있는 값에만 작용합니다. |
x + y |
연결된 문자열 xy 를 반환합니다. |
x.contains(y) |
문자열 x 에 하위 문자열 y 가 포함된 경우 True 를 반환합니다. |
x.endsWith(y) |
문자열 x 가 하위 문자열 y 로 끝나면 True 를 반환합니다. |
x.join() |
문자열 목록의 요소가 연결된 새 문자열을 반환합니다. 결과 문자열의 요소 사이에 배치되는 선택적 구분자를 허용합니다. 예를 들어 다음 표현식은 'hello world' 를 반환합니다.
|
x.lowerAscii() |
모든 ASCII 문자가 소문자인 새 문자열을 반환합니다. |
x.matches(y) |
문자열 RE2 패턴은 유니코드 기능을 사용 중지하는 RE2::Latin1 옵션을 통해 컴파일됩니다. |
x.replace(y,z) |
하위 문자열 y 가 z 로 대체된 새 문자열을 반환합니다. 대체할 횟수를 제한하는 선택적 인수를 허용합니다. 예를 들어 다음 표현식은 'wello hello' 를 반환합니다.
|
x.split(y) |
구분자 y 로 입력에서 분할된 문자열 목록을 반환합니다. 생성할 하위 문자열 수를 제한하는 선택적 인수를 허용합니다. 예를 들어 다음 표현식은 ['hello', 'hello hello'] 를 반환합니다.
|
x.startsWith(y) |
문자열 x 가 하위 문자열 y 로 시작하면 True 를 반환합니다. |
x.upperAscii() |
모든 ASCII 문자가 대문자인 새 문자열을 반환합니다. |
정규 표현식 함수
다음 표에서는 Eventarc Advanced에서 지원하는 정규 표현식 함수를 설명합니다.
표현식 | 설명 |
---|---|
re.capture(target,regex) |
|
re.captureN(target,regex) |
regex 를 사용하여 target 문자열에서 그룹 이름 및 문자열 (이름이 지정된 그룹의 경우)과 그룹 색인 및 문자열 (이름이 지정되지 않은 그룹의 경우)을 캡처하고 키-값 쌍 맵을 반환합니다. 예를 들어 다음 표현식은 {"1": "user", "Username": "testuser", "Domain": "testdomain"} 를 반환합니다.
|
re.extract(target,regex,rewrite) |
regex 를 사용하여 target 문자열에서 일치하는 그룹 값을 추출하고 rewrite 인수를 기반으로 형식이 지정된 추출된 값의 문자열을 반환합니다. 예를 들어 다음 표현식은 "example.com" 를 반환합니다.
|
x.matches(regex) |
문자열 RE2 패턴은 유니코드 기능을 사용 중지하는 RE2::Latin1 옵션을 통해 컴파일됩니다. |
정규 표현식은 RE2 구문을 따릅니다. 정규 표현식 앞에 오는 R
는 이스케이프 처리가 필요하지 않은 원시 문자열을 나타냅니다.
확장 함수
Eventarc Advanced는 버스를 통해 수신된 이벤트 데이터를 변환하는 데 사용할 수 있는 특정 확장 함수를 지원합니다. 자세한 내용과 예시는 수신된 이벤트 변환을 참고하세요.