Common Expression Language 사용

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.typetype 속성의 값을 반환합니다.

다음에 유의하세요.

  • 이벤트는 고유한 이름 (확장 속성이라고도 함)을 가진 맞춤 CloudEvents 속성을 추가로 포함할 수 있으며 등록은 이를 사용할 수 있습니다. 그러나 실제 형식과 관계없이 CEL 표현식에서는 String 유형으로 표시됩니다. CEL 표현식을 사용하여 값을 다른 유형으로 변환할 수 있습니다.

  • 이벤트 페이로드 콘텐츠를 기반으로 등록을 평가할 수는 없습니다. message.datamessage.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는 데이터를 변환하고 버스에서 수신한 이벤트의 수정을 간소화하는 데 사용할 수 있는 mergeflatten와 같은 확장 함수도 지원합니다.

CEL 사전 정의된 연산자 및 함수CEL 사전 정의된 매크로 목록을 참고하세요.

논리 연산자

다음 표에서는 Eventarc Advanced에서 지원하는 논리 연산자를 설명합니다.

표현식 설명
x == "my_string" x가 상수 문자열 리터럴 인수와 같으면 True를 반환합니다.
x == R"my_string\n" x가 이스케이프 문자 시퀀스를 해석하지 않는 지정된 원시 문자열 리터럴과 같으면 True를 반환합니다. 원시 문자열 리터럴은 정규 표현식이나 프로그램 텍스트와 같이 자체적으로 이스케이프 시퀀스를 사용해야 하는 문자열을 표현하는 데 편리합니다.
x == y xy와 같으면 True를 반환합니다.
x != y xy와 같지 않으면 True를 반환합니다.
x && y x, y가 모두 True이면 True를 반환합니다.
x || y x, y 또는 둘 다 True이면 True를 반환합니다.
!x 불리언 값 xFalse이면 True를 반환하고 불리언 값 xTrue이면 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'를 반환합니다.

['hello', 'world'].join(' ')

x.lowerAscii() 모든 ASCII 문자가 소문자인 새 문자열을 반환합니다.
x.matches(y)

문자열 x가 지정된 RE2 패턴 y와 일치하면 True를 반환합니다.

RE2 패턴은 유니코드 기능을 사용 중지하는 RE2::Latin1 옵션을 통해 컴파일됩니다.

x.replace(y,z) 하위 문자열 yz로 대체된 새 문자열을 반환합니다. 대체할 횟수를 제한하는 선택적 인수를 허용합니다. 예를 들어 다음 표현식은 'wello hello'를 반환합니다.

'hello hello'.replace('he', 'we', 1)

x.split(y) 구분자 y로 입력에서 분할된 문자열 목록을 반환합니다. 생성할 하위 문자열 수를 제한하는 선택적 인수를 허용합니다. 예를 들어 다음 표현식은 ['hello', 'hello hello']를 반환합니다.

'hello hello hello'.split(' ', 2)

x.startsWith(y) 문자열 x가 하위 문자열 y로 시작하면 True를 반환합니다.
x.upperAscii() 모든 ASCII 문자가 대문자인 새 문자열을 반환합니다.

정규 표현식 함수

다음 표에서는 Eventarc Advanced에서 지원하는 정규 표현식 함수를 설명합니다.

표현식 설명
re.capture(target,regex)

regex를 사용하여 target 문자열에서 이름이 지정되지 않았거나 이름이 지정된 첫 번째 그룹 값을 캡처하고 문자열을 반환합니다. 예를 들어 다음 표현식은 "o"를 반환합니다.

re.capture("hello", R"hell(o)")

re.captureN(target,regex) regex를 사용하여 target 문자열에서 그룹 이름 및 문자열 (이름이 지정된 그룹의 경우)과 그룹 색인 및 문자열 (이름이 지정되지 않은 그룹의 경우)을 캡처하고 키-값 쌍 맵을 반환합니다. 예를 들어 다음 표현식은 {"1": "user", "Username": "testuser", "Domain": "testdomain"}를 반환합니다.

re.captureN("The user testuser belongs to testdomain", R"The (user|domain) (?P.*) belongs to (?P.*)")

re.extract(target,regex,rewrite) regex를 사용하여 target 문자열에서 일치하는 그룹 값을 추출하고 rewrite 인수를 기반으로 형식이 지정된 추출된 값의 문자열을 반환합니다. 예를 들어 다음 표현식은 "example.com"를 반환합니다.

re.extract("alex@example.com", "(^.*@)(.*)", "\\2")

x.matches(regex)

문자열 x가 지정된 RE2 패턴 regex와 일치하면 True를 반환합니다.

RE2 패턴은 유니코드 기능을 사용 중지하는 RE2::Latin1 옵션을 통해 컴파일됩니다.

정규 표현식은 RE2 구문을 따릅니다. 정규 표현식 앞에 오는 R는 이스케이프 처리가 필요하지 않은 원시 문자열을 나타냅니다.

확장 함수

Eventarc Advanced는 버스를 통해 수신된 이벤트 데이터를 변환하는 데 사용할 수 있는 특정 확장 함수를 지원합니다. 자세한 내용과 예시는 수신된 이벤트 변환을 참고하세요.

다음 단계