获取DIS通知策略
功能说明
如果想查询OBS桶上配置的DIS通知策略,可以调用此接口,接口会返回桶上配置的所有策略,一次性返回,不分页。了解更多设置DIS通知策略的相关信息,请参见使用DIS发送OBS事件通知。
融合桶不支持设置DIS通知策略。
接口约束
- OBS支持的Region与Endpoint的对应关系,详细信息请参见地区与终端节点。
- 须知:调用DIS策略相关接口前,需在初始化obsClient时调用obs.WithSignature(obs.SignatureObs)指定协议类型。
授权信息
您必须是桶拥有者或者拥有Tenant Administrator权限,才能调用本接口。配置Tenant Administrator权限,需要使用角色与策略授权(旧版IAM,即IAM v3接口),授权操作请参考使用IAM授权。
方法定义
func (obsClient ObsClient) GetDisPolicy(bucketName string, extensions ...extensionOptions) (output *GetDisPolicyOutput, err error)
请求参数说明
表1 请求参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| bucketName | string | 是 | 桶名 |
响应参数说明
表2 GetDisPolicyOutput参数说明
| 字段 | 类型 | 说明 |
|---|---|---|
| BaseModel | BaseModel | 基础模型,包含 RequestId 等 |
| Rules | []DisPolicyRule | DIS 策略规则列表 |
表3 DisPolicyRule参数说明
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | string | 规则 ID 取值范围: [1, 256],满足“^[a-zA-Z0-9_-]{1, 256}$” |
| Stream | string | DIS服务通道名称。 需要先在DIS服务创建此通道 |
| Project | string | DIS服务通道所属的项目ID |
| Events | []string | OBS事件列表 有效值:长度[0, 1023],值允许为任意字符,支持如下事件类型:
|
| Prefix | string | 对象名前缀,用于指定的对象名关键字,根据定义的前缀,输入需要过滤的对象的关键字信息,字符越长匹配精度越高,最大可支持1024个字符,最小可为空。同时,prefix和suffix加起来长度最大为1024个字符 |
| Suffix | string | 对象名后缀。用于指定的对象名关键字,根据定义的后缀,输入需要过滤的对象的关键字信息,字符越长匹配精度越高,最大可支持1024个字符,最小可为空。同时,prefix和suffix加起来长度最大为1024个字符 |
| Agency | string | IAM委托名,被委托方必须包含OBS服务,赋予的权限必须是DIS服务的DIS Administrator或DIS User |
代码示例
示例-查询桶examplebucket上已经配置的DIS通知策略
package main
import (
"fmt"
"log"
obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs"
)
func main() {
//推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。
//您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html。
ak := os.Getenv("AccessKeyID")
sk := os.Getenv("SecretAccessKey")
// 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。
securityToken := os.Getenv("SecurityToken")
// endpoint填写Bucket对应的Endpoint,这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com"
// 创建客户端
obsClient, err := obs.New(ak, sk, endPoint, obs.WithSecurityToken(securityToken))
if err != nil {
fmt.Printf("Create obsClient error, errMsg: %s", err.Error())
}
// 获取 DIS 策略
output, err := client.GetDisPolicy("my-bucket")
if err != nil {
log.Fatalf("Failed to get DIS policy: %v", err)
}
fmt.Printf("Request ID: %s\n", output.RequestId)
fmt.Printf("Total rules: %d\n\n", len(output.Rules))
for i, rule := range output.Rules {
fmt.Printf("[%d] DIS Rule:\n", i+1)
fmt.Printf(" ID: %s\n", rule.ID)
fmt.Printf(" Stream: %s\n", rule.Stream)
fmt.Printf(" Project: %s\n", rule.Project)
fmt.Printf(" Events: %v\n", rule.Events)
fmt.Printf(" Prefix: %s\n", rule.Prefix)
fmt.Printf(" Suffix: %s\n", rule.Suffix)
fmt.Printf(" Agency: %s\n", rule.Agency)
fmt.Println()
}
}