事件總線EventBridge是阿里云提供的一款無服務器事件總線服務,支持為Knative提供生產級別的事件驅動能力。本文以上傳文件到對象存儲OSS事件為例,介紹如何通過EventBridge觸發(fā)Knative服務消費事件。
前提條件
已部署Knative。具體操作,請參見為ACK集群部署Knative、為ACK Serverless集群部署Knative。
已為Knative部署Eventing和Kafka組件。具體操作,請參見管理Knative組件。
已安裝ossutil。具體操作,請參見安裝ossutil。
背景信息
Knative是一款基于Kubernetes的Serverless框架。其目標是制定云原生、跨平臺的Serverless容器編排標準。Knative通過整合容器構建(或者函數(shù))、工作負載管理(動態(tài)擴縮容)以及事件驅動這三個方面來實現(xiàn)Serverless標準。
事件總線EventBridge支持以標準化、中心化的方式接入阿里云服務、自定義應用、SaaS應用,并能夠以標準化的CloudEvents 1.0協(xié)議在這些應用之間路由事件,幫助您輕松構建松耦合、分布式的事件驅動架構。
技術架構
當前EventBridge支持多種數(shù)據(jù)源接入,通過配置事件總線、事件規(guī)則、事件目標,經過事件過濾、轉換,可以觸發(fā)EventBridge事件驅動Knative服務消費事件,實現(xiàn)資源的按需使用。技術架構圖如下所示。
對象存儲OSS支持作為事件源接入到EventBridge。關于對象存儲OSS作為事件源發(fā)布到事件總線EventBridge的事件類型,請參見對象存儲OSS事件。
步驟一:創(chuàng)建Knative服務
本文以event-display作為Knative服務,該服務會直接記錄接收到的事件內容。
使用以下示例代碼創(chuàng)建Knative Serviceevent-display.yaml。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display namespace: default spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/event-display:20230207194118_3874dbd
執(zhí)行以下命令,部署Knative Service。
kubectl apply -f event-display.yaml
執(zhí)行以下命令,查看Knative Service是否創(chuàng)建成功。
kubectl get ksvc
預期輸出:
NAME URL LATESTCREATED LATESTREADY READY REASON event-display http://event-display.default.example.com event-display-00001 event-display-00001 True
獲取Knative服務訪問域名和訪問網關地址。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在Knative頁面,單擊服務管理頁簽,獲取Knative服務的默認域名和訪問網關地址,以備后續(xù)使用。
步驟二:創(chuàng)建連接配置和API端點
- 登錄事件總線EventBridge控制臺。
在左側導航欄,選擇 ,然后在頂部菜單欄,選擇地域。
單擊連接配置頁簽,單擊創(chuàng)建。
在創(chuàng)建連接配置面板,輸入連接名稱、連接描述,設置鑒權配置為無需配置,網絡選擇為公網,單擊確定。
單擊API 端點頁簽,單擊創(chuàng)建。
在創(chuàng)建 API 端點面板基礎信息區(qū)域,將創(chuàng)建方式設置為自定義創(chuàng)建,輸入API 目標名稱和描述。
在API配置區(qū)域,設置URL為步驟4獲取的訪問網關地址,HTTP Method為POST。
說明如果使用的是ALB網關,則需要將URL設置為ALB的DNS域名。
在連接配置區(qū)域,單擊選擇已有,選擇連接配置名稱,然后單擊確定。
步驟三:創(chuàng)建事件規(guī)則
- 登錄事件總線EventBridge控制臺。
在左側導航欄,單擊事件總線,在右側頁面單擊default事件操作列下的事件規(guī)則。
在事件規(guī)則頁面,單擊創(chuàng)建規(guī)則。
在配置基本信息配置向導,輸入規(guī)則名稱和描述,單擊下一步。
在配置事件模式配置向導,設置事件源為acs.oss,事件類型為oss:ObjectCreated:PutObject,單擊下一步。
在配置事件目標配置向導,設置配置項,然后單擊創(chuàng)建。
步驟四:驗證通過EventBridge觸發(fā)Knative服務消費事件是否成功
在執(zhí)行以下操作前,請確認您已安裝ossutil。
執(zhí)行以下命令,上傳文件到OSS。
說明OSS Bucket需要與Eventbridge處于同一個地域。
ossutil cp <文件名稱> oss://<Bucket名稱>
上傳文件到OSS后,EventBridge將觸發(fā)Knative服務消費事件。
查看事件軌跡。
在左側導航欄,單擊事件總線,在右側頁面單擊default事件操作列下的事件追蹤。
在按時間范圍查詢頁簽下,設置時間范圍為最近1小時,單擊查詢。
選擇事件源為對象存儲OSS,事件類型為上傳文件的事件,單擊該事件操作列下的事件軌跡。
在事件軌跡頁面可以看到事件投遞成功。
驗證Knative服務是否消費事件成功。
執(zhí)行以下命令,查看Knative服務是否消費事件成功。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE event-display-00001-deployment-56cc79****-z2vhv 2/2 Running 0 7s
執(zhí)行以下命令,查看Knative服務是否記錄事件。
kubectl logs event-display-00001-deployment-56cc79****-z2vhv user-container
預期輸出:
Defaulted container "user-container" out of: user-container, queue-proxy { "data":{"eventVersion":"1.0","responseElements":{"requestId":"6524C9F5F326DB333575119B"},"eventSource":"acs:oss","eventTime":"2023-10-10T03:50:13.000Z","requestParameters":{"sourceIPAddress":"101.132.XX.XX"},"eventName":"ObjectCreated:PutObject","userIdentity":{"principalId":"203097492760048007"},"region":"cn-beijing","oss":{"bucket":{"name":"ossutil-demo-liu","arn":"acs:oss:cn-beijing:1159648454668874:ossutil-demo-liu","virtualBucket":"","ownerIdentity":"1159648454668874"},"ossSchemaVersion":"1.0","object":{"size":603050,"objectMeta":{"mimeType":"text/markdown; charset=utf-8"},"deltaSize":0,"eTag":"3298F4DC29D2A0578088FF5810C210B3","key":"RELEASENOTES.md"}}}
上述預期輸出表明Knative服務消費事件成功,并且記錄了上傳文件到OSS的事件。即通過EventBridge觸發(fā)Knative服務消費事件成功。