Признать недействительным кеш CDN Google Cloud из серверной части
После нескольких дней изучения и чтения документации я почти уверен, что это почти невозможно, но все же я хотел бы спросить:
Цель состоит в том, чтобы сделать недействительным весь кэшированный контент в GCloud CDN по требованию (из-за изменений заголовков) на стороннем сервере, который не использует этот CDN. С помощью gsuite
это может быть достигнуто с помощью следующей команды:
gcloud compute url-maps invalidate-cdn-cache web --path '/*' --async
Но проблема в том, что эта команда требует от нас входа в учетную запись Google через браузер с учетными данными клиента, что делает его абсолютно бесполезным.
Печальная история заключается в том, что, похоже, Google имеет довольно богатый API для других своих сервисов, но для CDN API нет:(
Идея состоит в том, чтобы принять учетные данные пользователя и аннулировать этот кеш, используя их. Это вообще возможно?
2 ответа
Итак, я был неправ 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 для работы с ним, используя официальный гем:
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
)
Теперь вы можете позвонить:
gcloud compute url-maps list
gcloud compute url-maps invalidate-cdn-cache prod-lb --path='/test/*'
gcloud compute url-maps invalidate-cdn-cache prod-lb --async --path='/test/*'
gcloud compute url-maps list-cdn-cache-invalidations --global prod-lb
Это занимает вечность,--async
&list-cdn-cache-invalidations
твои друзья...
https://cloud.google.com/cdn/docs/invalidating-cached-content