事件匯流排EventBridge是阿里雲提供的一款無伺服器事件匯流排服務,支援為Knative提供生產層級的事件驅動能力。本文以上傳檔案到Object Storage Service事件為例,介紹如何通過EventBridge觸發Knative服務消費事件。
前提條件
已部署Knative。具體操作,請參見為ACK叢集部署Knative、為ACK Serverless叢集部署Knative。
已為Knative部署Eventing和Kafka組件。具體操作,請參見管理Knative組件。
已安裝ossutil。具體操作,請參見安裝ossutil。
背景資訊
Knative是一款基於Kubernetes的Serverless架構。其目標是制定雲原生、跨平台的Serverless容器編排標準。Knative通過整合容器構建(或者函數)、工作負載管理(動態擴縮容)以及事件驅動這三個方面來實現Serverless標準。
事件匯流排EventBridge支援以標準化、中心化的方式接入阿里雲服務、自訂應用、SaaS應用,並能夠以標準化的CloudEvents 1.0協議在這些應用之間路由事件,協助您輕鬆構建松耦合、分布式的事件驅動架構。
技術架構
當前EventBridge支援多種資料來源接入,通過配置事件匯流排、事件規則、事件目標,經過事件過濾、轉換,可以觸發EventBridge事件驅動Knative服務消費事件,實現資源的按需使用。技術架構圖如下所示。
Object Storage Service支援作為事件來源接入到EventBridge。關於Object Storage Service作為事件來源發布到事件匯流排EventBridge的事件類型,請參見Object Storage Service事件。
步驟一:建立Knative服務
本文以event-display作為Knative服務,該服務會直接記錄接收到的事件內容。
使用以下範例程式碼建立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
執行以下命令,部署Knative Service。
kubectl apply -f event-display.yaml
執行以下命令,查看Knative Service是否建立成功。
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服務訪問網域名稱和訪問網關地址。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Knative頁面,單擊服務管理頁簽,擷取Knative服務的預設網域名稱和訪問網關地址,以備後續使用。
步驟二:建立串連配置和API端點
- 登入事件匯流排EventBridge控制台。
在左側導覽列,選擇 ,然後在頂部功能表列,選擇地區。
單擊串連配置頁簽,單擊建立。
在建立串連配置面板,輸入串連名稱、串連描述,設定鑒權配置為無需配置,網路選擇為公網,單擊確定。
單擊API 端點頁簽,單擊建立。
在建立 API 端點面板基礎資訊地區,將建立方式設定為自訂建立,輸入API 目標名稱和描述。
在API配置地區,設定URL為步驟4擷取的訪問網關地址,HTTP Method為POST。
說明如果使用的是ALB網關,則需要將URL設定為ALB的DNS網域名稱。
在串連配置地區,單擊選擇已有,選擇串連配置名稱,然後單擊確定。
步驟三:建立事件規則
- 登入事件匯流排EventBridge控制台。
在左側導覽列,單擊事件匯流排,在右側頁面單擊default事件操作列下的事件規則。
在事件規則頁面,單擊建立規則。
在配置基本資料設定精靈,輸入規則名稱和描述,單擊下一步。
在配置事件模式設定精靈,設定事件來源為acs.oss,事件類型為oss:ObjectCreated:PutObject,單擊下一步。
在配置事件目標設定精靈,設定配置項,然後單擊建立。
步驟四:驗證通過EventBridge觸發Knative服務消費事件是否成功
在執行以下操作前,請確認您已安裝ossutil。
執行以下命令,上傳檔案到OSS。
說明OSS Bucket需要與Eventbridge處於同一個地區。
ossutil cp <檔案名稱> oss://<Bucket名稱>
上傳檔案到OSS後,EventBridge將觸發Knative服務消費事件。
查看事件軌跡。
在左側導覽列,單擊事件匯流排,在右側頁面單擊default事件操作列下的事件追蹤。
在按時間範圍查詢頁簽下,設定時間範圍為最近1小時,單擊查詢。
選擇事件來源為Object Storage Service,事件類型為上傳檔案的事件,單擊該事件操作列下的事件軌跡。
在事件軌跡頁面可以看到事件投遞成功。
驗證Knative服務是否消費事件成功。
執行以下命令,查看Knative服務是否消費事件成功。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE event-display-00001-deployment-56cc79****-z2vhv 2/2 Running 0 7s
執行以下命令,查看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觸發Knative服務消費事件成功。