Изменить класс хранения (существующих) объектов в 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)

Ссылки:

Другие вопросы по тегам