2.16. bucket 通知


作为存储管理员,您可以使用这些 API 为存储桶通知机制提供配置和部署接口。API 主题是命名的对象,其中包含特定端点的定义。bucket 通知将主题与特定 bucket 关联。S3 bucket operations 部分提供有关 bucket 通知的更多详情。

注意

在所有主题操作中,参数都是 URL 编码,并使用 application/x-www-form-urlencoded 内容类型在消息正文中发送。

注意

需要重新创建与这个主题相关联的任何存储桶通知,以使主题更新生效。

2.16.1. 先决条件

  • 在 Ceph 对象网关上创建 bucket 通知。

2.16.2. 存储桶通知概述

bucket 通知提供了一种方式,可以在 bucket 中发生特定事件时从 Ceph 对象网关发送信息。bucket 通知可以发送到 HTTP、AMQP0.9.1 和 Kafka 端点。必须创建一个通知条目,以便为特定存储桶上的事件和特定主题发送存储桶通知。可以在事件类型的子集上创建 bucket 通知,也可以默认为所有事件类型创建 bucket 通知。bucket 通知可以根据键前缀或后缀过滤事件,正则表达式与键匹配,以及附加到对象或对象标签的元数据属性。bucket 通知具有 REST API,用于为 bucket 通知机制提供配置和控制接口。

2.16.3. 持久性通知

持久性通知支持将 Ceph 对象网关中的可靠和异步发送到在主题中配置的端点。常规通知也可靠,因为到端点的交付是在请求期间同步执行的。通过持久通知,Ceph 对象网关会在端点停机或操作过程中出现网络问题时重试通知,如果无法成功传送到端点,也会重试通知。只有在与通知操作成功相关的所有操作后,才会发送通知。如果端点在较长时间内停机,则通知队列将填满,并且为这些端点配置了通知的 S3 操作将失败。

注意

使用 kafka-ack-level=none 时,没有显示消息失败,因此在代理再次启动时不会重试代理时发送的消息。代理再次启动后,只会看到新的通知。

2.16.4. 创建主题

您可以在创建存储桶通知前创建主题。主题是简单通知服务(SNS)实体和所有主题操作,即,创建删除列出并获取 SNS 操作。主题需要具有创建存储桶通知时使用的端点参数。请求成功后,响应中包含稍后可用来在存储桶通知请求中引用此主题的 Amazon Resource Name(ARN)主题。

注意

topic_arn 提供存储桶通知配置,并在创建主题后生成。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 根级别访问权限.
  • 安装 Ceph 对象网关.
  • 用户 access key 和 secret key。
  • 端点参数.

流程

  1. 创建带有请求格式的主题:

    语法

    POST
    Action=CreateTopic
    &Name=TOPIC_NAME
    [&Attributes.entry.1.key=amqp-exchange&Attributes.entry.1.value=EXCHANGE]
    [&Attributes.entry.2.key=amqp-ack-level&Attributes.entry.2.value=none|broker|routable]
    [&Attributes.entry.3.key=verify-ssl&Attributes.entry.3.value=true|false]
    [&Attributes.entry.4.key=kafka-ack-level&Attributes.entry.4.value=none|broker]
    [&Attributes.entry.5.key=use-ssl&Attributes.entry.5.value=true|false]
    [&Attributes.entry.6.key=ca-location&Attributes.entry.6.value=FILE_PATH]
    [&Attributes.entry.7.key=OpaqueData&Attributes.entry.7.value=OPAQUE_DATA]
    [&Attributes.entry.8.key=push-endpoint&Attributes.entry.8.value=ENDPOINT]
    [&Attributes.entry.9.key=persistent&Attributes.entry.9.value=true|false]

    以下是请求参数:

    • 端点 :将通知发送到的端点的 URL。
    • OpaqueData: 不透明数据在主题配置中设置,并添加到该主题触发的所有通知。
    • persistent :指示对此端点的通知是否是持久的,是否为异步的。默认值为 false
    • HTTP 端点:

      • URL: https://FQDN:PORT
      • port defaults to: 分别为 HTTP[S] 使用 80/443。
      • verify-ssl :指示服务器证书是否由客户端验证。默认情况下,它是 true
    • AMQP0.9.1 端点:

      • URL: amqp://USER:PASSWORD@FQDN:PORT[/VHOST].
      • 用户和密码分别默认为: guestguest
      • 应当通过 HTTPS 提供用户和密码详细信息,否则主题创建请求将被拒绝。
      • 端口默认为 5672。
      • vhost 默认为:"/"
      • amqp-exchange :该交换必须存在,并且能够根据主题路由消息。这是用于 AMQP0.9.1 的强制参数。指向同一端点的不同主题必须使用相同的交换。
      • AMQP-ack-level :不需要结束确认,因为消息在代理中可以保留,然后再将它们传送到最终目的地。有三个确认方法:

        • none :当发送到代理,则消息被视为已发送
        • broker: 默认情况下,代理确认信息将被视为 已发送
        • routable :如果代理可路由到使用者,则消息被视为已发送

          注意

          特定参数的键和值不必驻留在同一行中或任何特定顺序,但必须使用相同的索引。属性索引不需要是连续的,或从任何特定值开始。

          注意

          topic-name 用于 AMQP 主题。

    • Kafka 端点:

      • URL: kafka://USER:PASSWORD@FQDN:PORT.
      • use-ssl 默认被设置为 false。如果将 use-ssl 设置为 true,则与代理的连接会使用安全的连接。
      • 如果提供了 ca-location,并且使用安全连接,则会使用指定的 CA 而不是默认的端口来验证代理。
      • 用户和密码只能通过 HTTP[S] 提供。否则,主题创建请求将被拒绝。
      • 用户和密码只能与 use-ssl 一起提供,否则与代理的连接将失败。
      • 端口默认为: 9092。
      • Kafka-ack-level :无需结束确认,因为信息在传送到最终目的地前可能会保留在代理中。存在两个确认方法:

        • none :当发送到代理,则消息被视为已发送
        • broker: 默认情况下,代理确认信息将被视为 已发送

以下是响应格式的示例:

示例

<CreateTopicResponse xmlns="https://sns.amazonaws.com/doc/2010-03-31/">
    <CreateTopicResult>
        <TopicArn></TopicArn>
    </CreateTopicResult>
    <ResponseMetadata>
        <RequestId></RequestId>
    </ResponseMetadata>
</CreateTopicResponse>

注意

响应中的 Amazon 资源名称(ARN)具有以下格式: arn:aws:sns:ZONE_GROUP:TENANT:TOPIC

以下是一个 AMQP0.9.1 端点的示例:

示例

client.create_topic(Name='my-topic' , Attributes={'push-endpoint': 'amqp://127.0.0.1:5672', 'amqp-exchange': 'ex1', 'amqp-ack-level': 'broker'}) "

2.16.5. 获取主题信息

返回有关特定主题的信息。如果提供,这可包括端点信息。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 根级别访问权限.
  • 安装 Ceph 对象网关.
  • 用户 access key 和 secret key。
  • 端点参数.

流程

  1. 使用以下请求格式获取主题信息:

    语法

    POST
    Action=GetTopic
    &TopicArn=TOPIC_ARN

    以下是响应格式的示例:

    <GetTopicResponse>
    <GetTopicRersult>
    <Topic>
    <User></User>
    <Name></Name>
    <EndPoint>
    <EndpointAddress></EndpointAddress>
    <EndpointArgs></EndpointArgs>
    <EndpointTopic></EndpointTopic>
    <HasStoredSecret></HasStoredSecret>
    <Persistent></Persistent>
    </EndPoint>
    <TopicArn></TopicArn>
    <OpaqueData></OpaqueData>
    </Topic>
    </GetTopicResult>
    <ResponseMetadata>
    <RequestId></RequestId>
    </ResponseMetadata>
    </GetTopicResponse>

    以下是标签和定义:

    • User :创建该主题的用户的名称。
    • Name :主题的名称.
    • JSON 格式的端点包括:

      • EndpointAddress :端点 URL。如果端点 URL 包含用户和密码信息,则必须通过 HTTPS 进行请求。否则,主题获取请求将被拒绝。

        • EndPointArgs :端点参数。
        • EndpointTopic :发送到端点的主题名称可以与上例主题名称不同。
        • HasStoredSecret:当端点 URL 包含用户和密码信息时为 true
        • Persistent: 当主题是持久的则为 true
    • TopicArn: Topic ARN。
    • OpaqueData :这是在主题上设置的不透明数据。

2.16.6. 列出主题

列出用户已定义的主题。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 根级别访问权限.
  • 安装 Ceph 对象网关.
  • 用户 access key 和 secret key。
  • 端点参数.

流程

  1. 使用以下请求格式列出主题信息:

    语法

    POST
    Action=ListTopics

    以下是响应格式的示例:

    <ListTopicdResponse xmlns="https://sns.amazonaws.com/doc/2020-03-31/">
    <ListTopicsRersult>
    <Topics>
    <member>
    <User></User>
    <Name></Name>
    <EndPoint>
    <EndpointAddress></EndpointAddress>
    <EndpointArgs></EndpointArgs>
    <EndpointTopic></EndpointTopic>
    </EndPoint>
    <TopicArn></TopicArn>
    <OpaqueData></OpaqueData>
    </member>
    </Topics>
    </ListTopicsResult>
    <ResponseMetadata>
    <RequestId></RequestId>
    </ResponseMetadata>
    </ListTopicsResponse>
    注意

    如果端点 URL 包含用户和密码信息,在任何主题中,则必须通过 HTTPS 进行请求。否则,主题列表请求将被拒绝。

2.16.7. 删除主题

删除已删除的主题会导致不操作,且不是失败。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 根级别访问权限.
  • 安装 Ceph 对象网关.
  • 用户 access key 和 secret key。
  • 端点参数.

流程

  1. 使用以下请求格式删除主题:

    语法

    POST
    Action=DeleteTopic
    &TopicArn=TOPIC_ARN

    以下是响应格式的示例:

    <DeleteTopicResponse xmlns="https://sns.amazonaws.com/doc/2020-03-31/">
    <ResponseMetadata>
    <RequestId></RequestId>
    </ResponseMetadata>
    </DeleteTopicResponse>

2.16.8. 事件记录

事件包含 Ceph 对象网关完成的操作信息,并通过所选端点(如 HTTP、HTTPS、Kafka 或 AMQ0.9.1)作为有效负载发送。事件记录采用 JSON 格式。

示例

{"Records":[
    {
        "eventVersion":"2.1",
        "eventSource":"ceph:s3",
        "awsRegion":"us-east-1",
        "eventTime":"2019-11-22T13:47:35.124724Z",
        "eventName":"ObjectCreated:Put",
        "userIdentity":{
            "principalId":"tester"
        },
        "requestParameters":{
            "sourceIPAddress":""
        },
        "responseElements":{
            "x-amz-request-id":"503a4c37-85eb-47cd-8681-2817e80b4281.5330.903595",
            "x-amz-id-2":"14d2-zone1-zonegroup1"
        },
        "s3":{
            "s3SchemaVersion":"1.0",
            "configurationId":"mynotif1",
            "bucket":{
                "name":"mybucket1",
                "ownerIdentity":{
                    "principalId":"tester"
                },
                "arn":"arn:aws:s3:us-east-1::mybucket1",
                "id":"503a4c37-85eb-47cd-8681-2817e80b4281.5332.38"
            },
            "object":{
                "key":"myimage1.jpg",
                "size":"1024",
                "eTag":"37b51d194a7513e45b56f6524f2d51f2",
                "versionId":"",
                "sequencer": "F7E6D75DC742D108",
                "metadata":[],
                "tags":[]
            }
        },
        "eventId":"",
        "opaqueData":"me@example.com"
    }
]}

以下是事件记录密钥及其定义:

  • awsRegion: Zonegroup。
  • eventTime: 指示触发事件的时间的时间戳。
  • eventName :事件类型。
  • userIdentity.principalId :触发该事件的用户的身份。
  • requestParameters.sourceIPAddress :触发该事件的客户端的 IP 地址。不支持此字段。
  • responseElements.x-amz-request-id :触发事件的请求 ID。
  • responseElements.x_amz_id_2 :触发事件的 Ceph 对象网关的身份。身份格式为 RGWID-ZONE-ZONEGROUP
  • s3.configurationId :创建事件的通知 ID。
  • s3.bucket.name :存储桶的名称。
  • s3.bucket.ownerIdentity.principalId :存储桶的所有者。
  • s3.bucket.arn: bucket 的 Amazon Resource Name(ARN)。
  • s3.bucket.id :存储桶的身份。
  • s3.object.key :对象键。
  • s3.object.size :对象的大小。
  • s3.object.eTag :对象 etag。
  • s3.object.version :版本控制存储桶中的对象版本。
  • s3.object.sequencer :以十六进制格式为每个对象增大更改的标识符。
  • s3.object.metadata :对象上设置的任何元数据,作为 x-amz-meta
  • s3.object.tags :对象上设置的任何标签。
  • s3.eventId :事件的唯一标识。
  • s3.opaqueData: Opaque 数据在主题配置中设置,并添加到该主题触发的所有通知中。

其它资源

2.16.9. 支持的事件类型

支持以下事件类型:

  • s3:ObjectCreated:*
  • s3:ObjectCreated:Put
  • s3:ObjectCreated:Post
  • s3:ObjectCreated:Copy
  • s3:ObjectCreated:CompleteMultipartUpload
  • s3:ObjectRemoved:*
  • s3:ObjectRemoved:Delete
  • s3:ObjectRemoved:DeleteMarkerCreated
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.