Изменить класс хранения (существующих) объектов в Google Cloud Storage
Добрый день!
Недавно я узнал о новых уровнях хранения и сниженных ценах, объявленных на платформе / сервисе Google Cloud Storage.
Поэтому я хотел изменить класс хранения по умолчанию для одного из моих сегментов с Durable Reduced Availability на Coldline, так как это то, что подходит для файлов, которые я архивирую в этом сегменте.
Я получил эту записку, хотя:
Изменение класса хранилища по умолчанию влияет только на объекты, которые вы добавляете в этот сегмент в будущем. Это не меняет класс хранения объектов, которые уже находятся в вашем ведре.
Любые советы / советы о том, как я могу изменить класс всех существующих объектов в корзине (используя облачную консоль или gsutil
)?
Ценить это; Спасибо
Ура!
fynali
5 ответов
Самый простой способ синхронно переместить объекты в другой класс хранения в том же сегменте - использовать перезапись. Например, чтобы сделать это с помощью gsutil, вы можете запустить:
gsutil -m rewrite -s coldline gs://your-bucket/**
Примечание: убедитесь, что gsutil обновлен (версия 4.22 и выше поддерживают -s
флаг с rewrite
).
Кроме того, вы можете использовать новый SetStorageClass
действие функции управления жизненным циклом для асинхронного (обычно занимает около 1 дня) изменения классов хранения объектов на месте (например, с помощью CreatedBefore
условие устанавливается на некоторое время после изменения класса хранилища по умолчанию).
Чтобы изменить класс хранения с NEARLINE на COLDLINE, создайте файл JSON со следующим содержимым:
{
"lifecycle": {
"rule": [
{
"action": {
"type": "SetStorageClass",
"storageClass": "COLDLINE"
},
"condition": {
"matchesStorageClass": [
"NEARLINE"
]
}
}
]
}
}
Назови это
lifecycle.json
или что-то в этом роде, затем запустите это в своей оболочке:
$ gsutil lifecycle set lifecycle.json gs://my-cool-bucket
На внесение изменений может потребоваться до 24 часов. Насколько я знаю, это изменение не требует дополнительных затрат.
Я сделал это:
gsutil -m rewrite -r -s <storage-class> gs://my-bucket-name/
(-r для рекурсии, потому что я хочу, чтобы все объекты в моей корзине были затронуты).
Теперь вы можете использовать "Передачу данных", чтобы изменить класс хранения, переместив объекты корзины в новую корзину.
Доступ к нему из левой панели хранилища.
htt ps:https://stackru.com/images/d72361ffcf8582678ad8b10c5dc6c0c3f20000e5.png
Если вам не удалось получить доступ к консоли gsutil, как в среде Google Cloud Function, потому что на экземплярах сервера Cloud Functions не установлен gsutil. Gsutil работает на вашем локальном компьютере, потому что он там установлен и настроен. Для всех этих случаев я предлагаю вам оценить метод blob update_storage_class() в python. Этот метод вызывается, когда вы извлекаете отдельный большой двоичный объект (другими словами, он относится к вашему конкретному объекту внутри вашего сегмента). Вот пример:
from google.cloud import storage
storage_client = storage.Client()
blobs = storage_client.list_blobs(bucket_name)
for blob in blobs:
print(blob.name)
print(blob.storage_class)
all_classes = ['NEARLINE_STORAGE_CLASS', 'COLDLINE_STORAGE_CLASS', 'ARCHIVE_STORAGE_CLASS', 'STANDARD_STORAGE_CLASS', 'MULTI_REGIONAL_LEGACY_STORAGE_CLASS', 'REGIONAL_LEGACY_STORAGE_CLASS']
new_class = all_classes[my_index]
update_storage_class(new_class)
Ссылки:
- Документация по BLOB-объектам и объектам: https://googleapis.dev/python/storage/latest/blobs.html
- Классы хранения: https://cloud.google.com/storage/docs/storage-classes