Назад | Перейти на главную страницу

Terraform и GCP: как получить инвентарь текущих дисков?

Моя цель - использовать функцию "google_compute_snapshot" terraform (https://www.terraform.io/docs/providers/google/r/compute_snapshot.html), чтобы запланировать ежедневные снимки для всех дисков в проекте.

Мы будем исходить из предположения, что все виртуальные машины будут создаваться с использованием terraform на протяжении всего жизненного цикла проекта. Как мне создать список доступных дисков, чтобы передать этот список аргументу "source_disk"?

Спасибо!

Когда был создан этот пост, в GCP не было функции запланированных снимков, эта функция была реализована в августе 2019 года как GA.

В настоящее время очень легко запланировать моментальный снимок с помощью пользовательского интерфейса или gcloud.

Например, в пользовательском интерфейсе вы можете выполнить следующие шаги:

  1. В Google Cloud Console перейдите в Снимки страница.
  2. Вверху страницы нажмите «Создать расписание снимков».
  3. Введите название расписания.
  4. Выберите регион для расписания моментальных снимков. Ваши постоянные диски должны находиться в зонах, которые находятся в области, содержащей расписание моментальных снимков.
  5. При желании выберите местоположение снимка или примите выбор по умолчанию.
  6. Выберите периодичность расписания.
  7. Введите количество дней, по истечении которых будет выполнено автоматическое удаление снимков.
  8. Выберите правило удаления, чтобы определить, что произойдет со снимками, если исходный диск расписания будет удален.
  9. Выберите количество дней для хранения снимков, созданных по этому расписанию.
  10. Если вы используете Windows, вы можете включить VSS.
  11. При желании укажите любые соответствующие метки, которые вы хотите применить к этим снимкам.
  12. Щелкните Создать, чтобы создать расписание моментальных снимков.

Я следил за следующим документация

Также вы можете использовать compute resource-policies create snapshot-schedule gcloud команда.

  gcloud compute resource-policies create snapshot-schedule [SCHEDULE_NAME] \
      --description "[SCHEDULE_DESCRIPTION]" \
      --max-retention-days [MAX_RETENTION_DAYS] \
      --start-time [START_TIME] \
      --hourly-schedule [SNAPSHOT_INTERVAL] \
      --daily-schedule \
      --weekly-schedule [SNAPSHOT_INTERVAL] \
      --weekly-schedule-from-file [FILE_NAME] \
      --on-source-disk-delete [DELETION_OPTION]

В этом примере расписание моментальных снимков начинается в 22:00 UTC и выполняется каждую неделю во вторник и четверг.

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
    --description "MY WEEKLY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 22:00 \
    --weekly-schedule tuesday,thursday \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

С другой стороны, у нас есть Ресурс: resourcePolicies Вы можете использовать политики ресурсов для планирования действий для некоторых ресурсов Compute Engine.

Например, вы можете использовать их для планирования моментальных снимков постоянного диска.

Представление JSON:

{
  "id": string,
  "creationTimestamp": string,
  "selfLink": string,
  "region": string,
  "description": string,
  "name": string,
  "status": enum,
  "kind": string,

  // Union field policy can be only one of the following:
  "snapshotSchedulePolicy": {
    "schedule": {

      // Union field policy can be only one of the following:
      "hourlySchedule": {
        "hoursInCycle": integer,
        "startTime": string,
        "duration": string
      },
      "dailySchedule": {
        "daysInCycle": integer,
        "startTime": string,
        "duration": string
      },
      "weeklySchedule": {
        "dayOfWeeks": [
          {
            "day": enum,
            "startTime": string,
            "duration": string
          }
        ]
      }
      // End of list of possible types for union field policy.
    },
    "retentionPolicy": {
      "maxRetentionDays": integer,
      "onSourceDiskDelete": enum
    },
    "snapshotProperties": {
      "labels": {
        string: string,
        ...
      },
      "storageLocations": [
        string
      ],
      "guestFlush": boolean,
      "chainName": string
    }
  },
  "groupPlacementPolicy": {
    "vmCount": integer,
    "availabilityDomainCount": integer,
    "collocation": enum
  }
  // End of list of possible types for union field policy.
}

Дополнительно вы можете увидеть следующее Почта где кто-то добавил пример для планировщика снимков GCP

Чтобы сгенерировать список доступных дисков в вашем проекте, вы можете запустить команду gcloud ниже:

gcloud compute disks list --format="csv[no-heading](name,zone)"

Эта команда принесет список в формате csv, включая только имя и зону без заголовка, если вы хотите, чтобы это было как Json или таблицу, это также можно сделать. видеть документация

Если вы хотите поместить информацию в файл, вам нужно просто добавить >> [file name] в конце команды gcloud.

Вы можете увидеть все возможные поля, запустив

gcloud compute disks list --format=flattened