通过MnsOss事件源采集OSS事件,然后驱动服务对事件进行处理,可用于人脸识别等场景。本文介绍如何在Knative上使用MnsOss事件源。
前提条件
已安装Knative Serving和Knative Eventing。具体操作,请参见部署Knative。
已在OSS控制台创建Bucket。具体操作,请参见创建存储空间。
已开通MNS服务并完成授权。具体操作,请参见开通消息服务MNS并授权。
步骤一:安装MnsOss事件源
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页签下单击MnsOss操作列的部署。
在部署MnsOSS对话框中单击确定。
步骤二:创建OSS事件通知
登录OSS管理控制台。
在左侧导航栏,单击Bucket列表,然后单击目标Bucket。
在Bucket实例详情页面的左侧导航栏,选择 ,然后单击创建规则。
在创建规则面板配置以下参数:
配置项
说明
规则名称
设置事件通知规则的名称。
相同账号在同一地域下创建的规则名称不能重复。规则名称必须以英文字母开头,只能包含大小写字母、数字和短划线(-),长度不超过85个字符。
事件类型
为目标Object配置事件类型。例如,您希望接收到目标Object通过拷贝操作创建或覆盖文件的事件通知,请将事件类型配置为CopyObject。
您可以为目标Object配置一条事件通知规则,并在规则中指定多个事件类型。您还可以为目标Object配置多条事件通知规则。配置多条规则时,有如下注意事项:
如果多条规则涉及的目标Object相同,则事件类型不允许相同。例如,规则A针对前缀
images
配置了CopyObject事件,如果规则B涉及images
前缀下任意Object时,则事件类型不能包含CopyObject。如果多条规则涉及的目标Object不同,则事件类型可以相同也可以不同。例如,规则A针对前缀为
images
、后缀为.png
的Object配置了PutObject事件,如果规则B涉及的目标Object前缀为log
、后缀为.jpg
,则事件类型可以包含PutObject或者DeleteObject。
重要对开启了版本控制的Bucket执行Object删除操作时,如果您未指定版本ID,不会触发DeleteObject或者DeleteObjects事件通知。原因是未指定版本ID的Object删除行为默认不会删除任意版本Object,而是将当前版本Object转为历史版本Object,并添加删除标记。
有关事件类型对应Object操作的更多信息,请参见事件类型。
资源描述
设置事件通知涉及的目标Object。
通过全名匹配目标Object
如果要匹配Bucket根目录下名为exampleobject.txt的目标Object,则填写为exampleobject.txt。
如果要匹配Bucket根目录下destdir目录中名为myphoto.jpg的目标Object,则填写为destdir/myphoto.jpg。
通过前后缀匹配目标Object
如果要匹配Bucket内的所有Object,则前缀和后缀均置空。
如果要匹配Bucket根目录下examplefolder目录中的所有Object,则前缀填写为examplefolder/,后缀置空。
如果要匹配Bucket内所有JPG格式的Object,则前缀置空,后缀填写为.jpg。
如需匹配Bucket根目录下examplefolder目录中所有MP3格式的Object,则前缀填写为examplefolder/,后缀填写为.mp3。
您可以单击添加按钮,创建最多5条资源描述。
接收终端
设置事件的接收终端,支持HTTP和队列。
HTTP:填写接收事件通知的HttpEndpoint地址,例如
http://198.51.100.1:8080
。搭建HttpEndpoint的具体操作,请参见主题使用手册和HttpEndpoint。队列:填写您在MNS中创建的队列名称。创建队列的具体操作,请参见创建队列。
您可以单击添加按钮,创建最多5个接收终端。
单击确定。
以上步骤配置完成后,事件通知规则约10分钟后生效。OSS事件通知完成后,会在消息服务MNS控制台的主题页面生成一条主题。
步骤三:创建MNS Token
登录消息服务MNS控制台。
在控制台左侧导航栏单击主题列表。
在顶部菜单栏,选择地域。
在主题列表页面单击目标主题。
在主题页面单击获取Endpoint。
在主题详情页面接入点区域复制公网访问链接,以备后续使用。
获取AK和SK信息。具体操作,请参见如何获取AccessKey。
执行以下命令,对获取到的公网访问链接、AK和SK进行Base64编码处理,生成访问Token。
echo '{ "url":"https://xxxx.mns.cn-shanghai.aliyuncs.com/", "accessKeyId":"xxx","accessKeySecret":"xx" }' | base64
创建Secret,用于管理和存储Token。
创建mnsoss-secret.yaml。
apiVersion: v1 kind: Secret metadata: name: mnsoss-secret type: Opaque data: mns: eyAidXJsIjoiaHR0cHM6Ly94eHh4Lm1ucy5jbi1zaGFuZ2hhaS5hbGl5dW5jcy5jb20vIiwgImFjY2Vzc0tleUlkIjoieHh4IiwiYWNjZXNzS2V5U2VjcmV0IjoieHgi****
将
mns
替换成步骤8生成的Token。执行以下命令,创建Secret。
kubectl apply -f mnsoss-secret.yaml
步骤四:创建Service Account和Broker
创建Service Account。
创建mnsoss-sa.yaml。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eventing-sources-mnsoss subjects: - kind: ServiceAccount name: mnsoss-sa namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eventing-sources-mnsoss-controller --- apiVersion: v1 kind: ServiceAccount metadata: name: mnsoss-sa
执行以下命令,创建Service Account。
kubectl apply -f mnsoss-sa.yaml
执行以下命令,创建Broker。
kubectl label namespace default knative-eventing-injection=enabled
步骤五:创建MnsOss事件源
为了接收MnsOss产生的事件, 需要创建MnsOss Source用于接收事件。
创建mnsoss-source.yaml。
apiVersion: sources.eventing.knative.dev/v1alpha1 kind: MnsOssSource metadata: labels: controller-tools.k8s.io: "1.0" name: mnsoss-face spec: # Add fields here serviceAccountName: mnsoss-sa accessToken: secretKeyRef: name: mnsoss-secret key: mns sink: apiVersion: eventing.knative.dev/v1alpha1 kind: Broker name: default topic: mns-en-topics-oss-face-image-2381221888dds9129
topic
:表示MNS主题名称。执行以下命令,创建MnsOss事件源。
kubectl apply -f mnsoss-source.yaml
步骤六:创建Knative Service
为了验证MnsOss Source是否可以正常工作,需要创建Knative Service,以下使用的是event-display示例。
创建service.yaml。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-dispaly namespace: default spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/event-display:1215
执行以下命令,创建Knative Service。
kubectl apply -f service.yaml
步骤七:创建Trigger
创建Trigger, 订阅事件信息。
创建trigger.yaml。
apiVersion: eventing.knative.dev/v1alpha1 kind: Trigger metadata: name: oss-trigger namespace: default spec: subscriber: ref: apiVersion: serving.knative.dev/v1alpha1 kind: Service name: event-dispaly
执行以下命令,创建Trigger。
kubectl apply -f trigger.yaml
执行结果
往OSS上传文件,会在Pod中收到事件通知。
2020/12/16 13:04:19 receive cloudevents.Event:
{"events": [{
"eventName": "ObjectCreated:PostObject",
"eventSource": "acs:oss",
"eventTime": "2019-06-18T06:44:16.000Z",
"eventVersion": "1.0",
"oss": {
"bucket": {
"arn": "acs:oss:cn-beijing:1041208914252405:testjian",
"name": "testjian",
"ownerIdentity": "1041208914252405",
"virtualBucket": ""},
"object": {
"deltaSize": 0,
"eTag": "137138904F2E18D307D04EB38EA44CDA",
"key": "timg.jpg",
"size": 12990},
"ossSchemaVersion": "1.0",
"ruleId": "demo-i****"},
"region": "cn-beijing",
"requestParameters": {"sourceIPAddress": "42.120.7*.***"},
"responseElements": {"requestId": "5D08884070BC12B192C6****"},
"userIdentity": {"principalId": "104120891425****"}}]}