Terraform & GCP: Как провести инвентаризацию текущих дисков?

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

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

Спасибо!

1 ответ

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

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

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

  1. В консоли Google Cloud перейдите на страницу снимков.
  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

С другой стороны, у нас есть Resource: 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
Другие вопросы по тегам