다른 언어로 보기: English.
이 과정에서는 서버리스, 이벤트 중심 아키텍쳐가 어떻게 메시지에 대한 응답으로 코드를 실행하거나 데이터 레코드에 대한 스트림을 처리하는지 보여줍니다.
여기서는 Apache Kafka 기반의 IBM Message Hub에 메시지를 쓰고 읽는 JavaScript로 작성된 두 개의 OpenWhisk 액션을 보여줍니다. 사용 사례는 액션이 데이터 서비스와 함께 동작하는지, 메시지 이벤트에 대응하여 로직을 실행하는지 보여줍니다.
첫 번째 액션은 하나 이상의 데이터 레코드의 메시지 스트림을 수신하며, 이는 OpenWhisk 시퀀스(체인에서 선언적으로 액션을 연결하는 방법)에서 다른 액션으로 연결됩니다. 두 번째 액션은 메시지를 취합하고 변화된 요약 메시지를 다른 토픽에 게시합니다.
- OpenWhisk
- IBM Message Hub (Apache Kafka)
기본적인 OpenWhisk 프로그래밍 모델에 대한 이해가 필요합니다. 만약 그렇지 않다면, 액션, 트리거 그리고 룰에 대한 데모를 먼저 확인 하십시오.
또한, Bluemix 계정과 최신 버젼의 OpenWhisk 명령행 도구(wsk
)를 설치 후 실행 경로(PATH)에 추가해야 합니다.
이 엔드-투-엔드 예제에 대한 대안으로서, 이 샘플의 기본적인 "빌딩 블럭" 버젼도 고려해 볼 수 있습니다.
Bluemix에 로그인 후, 이름을 kafka-broker
로 지정하여 Message Hub 인스턴스를 생성합니다. Message Hub 콘솔의 "Manage"탭에서 다음 두 개의 토픽을 생성합니다: in-topic / out-topic.
template.local.env
파일을 local.env
로 이름을 변경하여 복사하고 KAFKA_INSTANCE
, SRC_TOPIC
및 DEST_TOPIC
의 값이 인스턴스의 정보와 다른 경우 업데이트 합니다.
deploy.sh
는 local.env
에서 환경 변수를 읽고, OpenWhisk 액션을 생성하며, API 매핑을 대신 해 주는 편의를 위한 스크립트 파일입니다. 나중이 이 명령들을 직접 실행하게 됩니다.
./deploy.sh --install
참고: 에러 메시지가 나타나면, 아래 문제 해결 영역을 참고 하기 바랍니다. 또한, 다른 배포 방법을 참고 할 수 있습니다.
로그 폴링을 위해 터미널 윈도를 하나 엽니다:
wsk activation poll
처리 할 이벤트 세트를 메시지로 전송합니다.
# 메시지를 생성하면 액션의 시퀀스를 트리거하게 됩니다
DATA=$( base64 events.json | tr -d '\n' | tr -d '\r' )
wsk action invoke Bluemix_${KAFKA_INSTANCE}_Credentials-1/messageHubProduce \
--param topic $SRC_TOPIC \
--param value "$DATA" \
--param base64DecodeValue true
deploy.sh
을 다시 사용해서 OpenWhisk 액션과 매핑을 제거합니다. 이는 다음 영역에서 하나씩 다시 만들어 볼 수 있습니다.
./deploy.sh --uninstall
이 영역은 deploy.sh
가 어떤 것을 실행하는지 좀 더 깊숙히 들여다봄으로써 OpenWhisk 트리거, 액션, 룰 그리고 패키지가 어떻게 동작하는지 좀 더 상세히 알 수 있게 됩니다.
새로운 메시지를 수신하는 Message Hub 패키지 피드를 이용하여 message-trigger
트리거를 생성하십시오. 패키지를 refresh 하면 Message Hub 서비스 신임 정보와 OpenWhisk로 연결 정보를 생성하게 됩니다.
wsk package refresh
wsk trigger create message-trigger \
--feed Bluemix_${KAFKA_INSTANCE}_Credentials-1/messageHubFeed \
--param isJSONData true \
--param topic ${SRC_TOPIC}
JavaScript 액션으로 receive-consume
액션을 업로드 합니다. 이는 트리거를 통해 메시지가 도착하면 메시지를 다운로드 합니다.
wsk action create receive-consume actions/receive-consume.js
transform-produce
액션을 업로드 하십시오. 이는 위의 액션에서 오는 정보를 통합하며, 또다른 Message Hub 토픽으로 요약된 JSON 문자열을 전송합니다.
wsk action create transform-produce actions/transform-produce.js \
--param topic ${DEST_TOPIC} \
--param kafka ${KAFKA_INSTANCE}
receive-consume
과 transform-produce
사이를 연결하는 시퀀스 의 이름을 message-processing-sequence
로 선언하십시오.
wsk action create message-processing-sequence --sequence receive-consume,transform-produce
message-trigger
트리거를 message-processing-sequence
시퀀스로 연결하는 룰 이름을 message-rule
으로 선언 하십시오.
wsk rule create message-rule message-trigger message-processing-sequence
# 메시지를 생성하면 시퀀스가 트리거 됩니다
DATA=$( base64 events.json | tr -d '\n' | tr -d '\r' )
wsk action invoke Bluemix_${KAFKA_INSTANCE}_Credentials-1/messageHubProduce \
--param topic $SRC_TOPIC \
--param value "$DATA" \
--param base64DecodeValue true
가장 먼저 OpenWhisk 활성화 로그에서 오류를 확인 하십시오. 명령창에서 wsk activation poll
을 이용하여 로그 메시지를 확인하거나 Bluemix의 모니터링 콘솔에서 시각적으로 상세정보를 확인해 보십시오.
오류가 즉각적으로 분명하지 않다면, 최신 버젼의 wsk
CLI가 설치되어 있는지 확인하십시오. 만약 이전 것이라면 다운로드하고 업데이트 하십시오.
wsk property get --cliversion
deploy.sh
은 향후 wskdeploy
로 교체될 예정입니다. wskdeploy
는 선언된 트리거, 액션 및 규칙을 OpenWhisk에 배포하기 위해 manifest를 사용합니다.
또한 다음 버튼을 사용하여 이 저장소의 복사본을 복제하고 DevOps 툴 체인의 일부로 Bluemix에 배포 할 수 있습니다. 딜리버리 파이프 라인 아이콘 아래에서 OpenWhisk 및 MySQL 신임 정보를 제공하고 Create를 클릭 한 후 딜리버리 파이프 라인에 대한 Deploy Stage를 실행하십시오.
이 과정은 이 글의 코드에서 많은 영감을 받았고 이를 재사용했습니다.