从后端使 Google Cloud CDN 缓存无效
Invalidate Google Cloud CDN cache from the backend
经过几天的研究和阅读文档,我几乎可以肯定这几乎是不可能的,但我仍然想问:
目标是在不使用该 CDN 的第 3 方后端上按需(由于 headers 更改)使 GCloud CDN 中的所有缓存内容无效。使用gsuite
可以通过以下命令实现:
gcloud compute url-maps invalidate-cdn-cache web --path '/*' --async
但问题是这个命令要求我们使用客户端凭据通过浏览器登录 google 帐户,这使得它毫无价值。
可悲的是,似乎 Google 的其他服务相当丰富 API,但对于 CDN 却没有 API :(
我们的想法是接受用户的凭据并使用它们使缓存失效。有可能吗?
所以,我错了 impossibility
。我找到了相应的 REST API 方法 (https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps/invalidateCache):
POST https://www.googleapis.com/compute/v1/projects/{project}/global/urlMaps/{resourceId}/invalidateCache
这里有一个示例 Ruby 代码,可以使用 official gem:
require 'google/apis/compute_v1'
service = Google::Apis::ComputeV1::ComputeService.new
service.authorization =
Google::Auth::ServiceAccountCredentials
.make_creds(
json_key_io: File.open('/path/to/credentials.json'),
scope: [Google::Apis::ComputeV1::AUTH_COMPUTE]
)
service.invalidate_url_map_cache(
'some-gcloud-project-id',
'some-url-map',
nil,
request_id: SecureRandom.uuid
)
经过几天的研究和阅读文档,我几乎可以肯定这几乎是不可能的,但我仍然想问:
目标是在不使用该 CDN 的第 3 方后端上按需(由于 headers 更改)使 GCloud CDN 中的所有缓存内容无效。使用gsuite
可以通过以下命令实现:
gcloud compute url-maps invalidate-cdn-cache web --path '/*' --async
但问题是这个命令要求我们使用客户端凭据通过浏览器登录 google 帐户,这使得它毫无价值。
可悲的是,似乎 Google 的其他服务相当丰富 API,但对于 CDN 却没有 API :(
我们的想法是接受用户的凭据并使用它们使缓存失效。有可能吗?
所以,我错了 impossibility
。我找到了相应的 REST API 方法 (https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps/invalidateCache):
POST https://www.googleapis.com/compute/v1/projects/{project}/global/urlMaps/{resourceId}/invalidateCache
这里有一个示例 Ruby 代码,可以使用 official gem:
require 'google/apis/compute_v1'
service = Google::Apis::ComputeV1::ComputeService.new
service.authorization =
Google::Auth::ServiceAccountCredentials
.make_creds(
json_key_io: File.open('/path/to/credentials.json'),
scope: [Google::Apis::ComputeV1::AUTH_COMPUTE]
)
service.invalidate_url_map_cache(
'some-gcloud-project-id',
'some-url-map',
nil,
request_id: SecureRandom.uuid
)