GCP Cloud Function调用update_alert_policy出现意外参数name报错如何解决
错误原因
monitoring_v3客户端的update_alert_policy方法和create_alert_policy的入参规则不同:
- 创建告警时
name参数指代项目资源路径,是独立入参 - 更新告警时不需要单独传
name参数,需要将告警策略的完整资源路径写入AlertPolicy对象的name属性中,同时必须指定update_mask参数声明需要更新的字段,避免未定义的字段被覆盖清空。
修正后代码示例
import json from google.cloud import monitoring_v3 client_alert = monitoring_v3.AlertPolicyServiceClient() # 告警策略的完整资源路径 policy_full_name = 'projects/my_project/alertPolicies/1234555665' filter = "some_filters" alert_policy = { "name": policy_full_name, # 把资源路径写到policy的name字段里 "conditions":[ { "conditionAbsent":{ "duration": "1800s", "filter": '{}'.format(filter) }, "displayName":"test_name" } ], "displayName":"test_name", "combiner":"OR" } policy = monitoring_v3.AlertPolicy.from_json(json.dumps(alert_policy)) # 声明需要更新的字段,多个字段用逗号分隔,使用蛇形命名规则 update_mask = monitoring_v3.types.field_mask_pb2.FieldMask( paths=["display_name", "conditions", "combiner"] ) # 调用更新方法,不需要传name参数,传入policy和update_mask即可 client_alert.update_alert_policy(alert_policy=policy, update_mask=update_mask)
注意事项
update_mask的字段名要使用蛇形命名(比如display_name而不是displayName),和API返回的字段命名规则一致- 如果只需要更新部分字段,只需要把对应字段名加入
paths列表即可,不需要更新的字段不会被覆盖
内容的提问来源于stack exchange,提问作者Simon Breton
相关产品推荐
相关产品推荐

