benthos/Bloblang

[benthos] bloblang - 1. 시작

justbagmeg 2022. 7. 9. 16:12

https://www.benthos.dev/docs/guides/bloblang/walkthrough

 

Bloblang은 다양한 형식의 데이터를 매핑하기 위해 만든 언어라고 한다. 

Benthos 내에서 문서 매핑을 한다.

 

Bloblang은 프로세서로 사용할 수 있고, 함수 안에서 blobl 쿼리를 사용할 수 있다. (blobl 은 bloblang 줄임말)

Bloblang 예제

input:
  label: ""
  http_server:
    address: ""
    path: /post
    allowed_verbs:
      - POST
    timeout: 5s
    rate_limit: ""
    
pipeline:
  processors:
    - bloblang: root = content().uppercase()
    
output:
  stdout: {}

pipeline에 bloblang이 추가됐다.

위 코드에서는 메시지를 uppercase로 변환한다.

curl -XPOST http://localhost:4195/post -d '{"content": "Hello World", "names": ["celine", "dion"]}'

위의 내용으로 요청을 보내면 다음 결과가 나온다.

Bloblang docker로 실행시키기

docker run --rm --name blobl -p 4195:4195 jeffail/benthos blobl server --no-open --host 0.0.0.0

blobl 컨테이너를 띄우고, 호스트 컴퓨터에서 http://localhost:4195에 접속 후 아래처럼 나오면 된다.

왼쪽 상단이 input, 아래 화면이 bloblang 매핑 그리고 오른쪽이 output 화면이다.


https://www.benthos.dev/docs/guides/bloblang/walkthrough#your-first-assignment

Bloblang 은 input으로 들어오는 데이터(도큐먼트)를 사용해 새로운 도큐먼트에 매핑시키는 것이 주요 목적이다. Bloblang은 주로(전통적으로) JSON 도큐먼트를 매핑하고 앞으로의 예제에서도 JSON을 사용한다.

 

root = this

root 키워드는 새로 생기는 도큐먼트고, this는 input 도큐먼트의 루트로 시작하는 매핑 컨텍스트를 참조하는 키워드다. (그냥 input 도큐먼트라고 이해하는 게 쉽다)

{"message": "hello world"}

위와 같은 input이 온다면 output은 아래와 같다.

{
  "content": "hello world"
}

root = this 로 그대로 할당해서 input이랑 다를 게 없다. ㅎ

 

Bloblang에서 만약 input에 없는 필드를 추가한다면, empty객체가 할당된다.

root = this
root.empty.object = "empty..."

위 코드에서는 존재하지 않는 필드 empty.object 를 넣어줬다. 그 결과 아래처럼 나온다.

{
  "empty": {
    "object": "empty..."
  },
  "message": "hello world"
}