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"
}