我正在使用Python客户端库跨多个项目创建一些GCP云防护策略,并使用.set_security_policy()
方法将它们附加到几个后端服务
-
我知道你可以使用console/gcloud来完成,但是我需要在Python中自动完成
-
我已经尝试了
.update()
方法在谷歌云计算,但没有工作
from google.cloud import compute, compute_v1
client = compute.BackendServicesClient()
backend_service_resource = compute_v1.types.BackendService(security_policy="")
client.update(project='project_id',
backend_service='backend_service',
backend_service_resource=backend_service_resource)
运行上述代码时,我得到的错误是
google.api_core.exceptions.BadRequest: 400 PUT https://compute.googleapis.com/compute/v1/projects/<project-id>/global/backendServices/<backend-name>: Invalid value for field 'resource.loadBalancingScheme': 'INVALID_LOAD_BALANCING_SCHEME'. Cannot change load balancing scheme.
当我指定loadBalancingScheme
时,同样的错误发生在另一个资源值上。在运行时,我将没有后端服务的所有元数据的信息,并且一些元数据可能没有在第一时间初始化。
这是写给将来有类似问题的人的。我最初打算通过python使用os.system()
作为@giles-roberts推荐的gcloud命令,但后来我偶然发现了一个正确的方法来使用客户端库
来做到这一点您只需首先使用相同的.set_security_policy()
来设置安全策略,但这次将策略设置为None
。这不是很明显,因为安全策略的名称必须是文档中的字符串,而且它也不接受空字符串。
from google.cloud import compute, compute_v1
client = compute.BackendServicesClient()
resource = compute_v1.types.SecurityPolicyReference(security_policy=None)
error = client.set_security_policy(project='<project_id>',
backend_service='<backend_service>',
security_policy_reference_resource=resource)