Как я могу перечислить и удалить изображения GCP AppEngine из командной строки?

Я хочу удалить свои старые неиспользуемые образы AppEngine из Google Cloud Platform, чтобы не платить за их хранение.

Я могу вручную перечислить и удалить изображения, созданные для моего проекта GCP AppEngine, по этому URL-адресу: https://console.cloud.google.com/gcr/images/GOOGLE_CLOUD_PROJECT_ID

(Очевидно, замените GOOGLE_CLOUD_PROJECT_ID на соответствующий идентификатор проекта GCP.)

Есть ли способ вывести их список из командной строки? например через gcloud?

Это не работает так, как я ожидал:

$ gcloud compute images list --no-standard-images
Listed 0 items.

И этого не делает:

$ gcloud container images list 
Listed 0 items.
Only listing images in gcr.io/GOOGLE_CLOUD_PROJECT_ID. Use --repository to list images in other repositories.

Немного болезненно зайти и удалить многие из них вручную, поскольку каждое изображение в https://console.cloud.google.com/gcr/images/GOOGLE_CLOUD_PROJECT_ID/US/appengine находится в отдельном каталоге, который мне нужно сначала щелкнуть, чтобы выбрать изображение, а затем нажать кнопку удаления, и затем вернитесь в каталог appengine и снова запустите процесс для любых других изображений.


person Rohan Talip    schedule 14.11.2018    source источник
comment
Я не являюсь пользователем гибкой среды env, но, возможно, попытаюсь проверить, не gcloud app versions < / a> list|delete и / или gcloud app services list|delete могут делать то, что вы хочу как побочный эффект удаления версий / сервисов.   -  person Dan Cornilescu    schedule 14.11.2018
comment
@DanCornilescu, спасибо, эти команды соответствуют тому, что я вижу на странице console.cloud.google.com/appengine/ версии, но когда я удаляю старую версию (через веб-сайт), соответствующее изображение не удаляется автоматически.   -  person Rohan Talip    schedule 14.11.2018


Ответы (2)


Ссылка на консоль разработчика, которую вы предоставили, относится к Реестру контейнеров, где находится ваш хранятся образы контейнеров, в том числе созданные во время развертывания App Engine Flexible.

Вы можете перечислить эти изображения по местоположению, используя следующую команду gcloud:

gcloud container images list --repository=[HOSTNAME]/[PROJECT-ID]

где [HOSTNAME] - один из четырех вариантов: gcr.io, us.gcr.io, eu.gcr.io или asia.gcr.io.

Затем вы можете удалить изображения с помощью следующей команды:

gcloud container images delete [HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]

Подробную информацию об этом вы найдете в интерактивной документации.

person LundinCast    schedule 14.11.2018
comment
Спасибо, я пропустил, что были другие варианты имени хоста. В моем случае мне нужно было использовать us.gcr.io. Мне нужно было сделать еще немного; Я поставлю это в отдельный ответ. - person Rohan Talip; 14.11.2018

Листинг изображений

Благодаря ответу LundinCast я использовал us.gcr.io в качестве имени хоста, и мне удалось это сделать:

$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID
NAME
us.gcr.io/GCP_PROJECT_ID/appengine

Судя по всему, AppEngine использует вложенный репозиторий:

$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID/appengine
NAME
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t162317
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181113t132223
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181113t150454
us.gcr.io/GCP_PROJECT_ID/appengine/default.20181108t184629
us.gcr.io/GCP_PROJECT_ID/appengine/default.20181108t205831
us.gcr.io/GCP_PROJECT_ID/appengine/DEF.20181113t163644

Однако это не сработало, как я ожидал:

$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Listed 0 items.

Вместо этого мне пришлось сделать:

$ gcloud container images list-tags us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425 
DIGEST        TAGS    TIMESTAMP
c8e3797d36b2  latest  2018-11-10T12:57:58

Удаление изображений

Согласно документации по удалению изображений, удаление можно. ..

  • Изображение, идентифицированное по его дайджесту
  • Изображение, идентифицированное его тегом, и у него есть несколько тегов

Удаление изображений по (неявному) тегу

Когда я попытался удалить одну версию / тег, мне было показано приглашение:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425 
WARNING: Implicit ":latest" tag specified: us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181
  Associated tags:
 - latest
Tags:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest
This operation will delete the tags and images identified by the 
digests above.

Do you want to continue (Y/n)?  n

ERROR: (gcloud.container.images.delete) Aborted by user.

Это немного проблематично для написания сценария или программы, которая может автоматически удалять старые изображения (хотя я мог бы передать yes в команду gcloud container images delete IMAGE); к счастью, есть --quiet аргумент, который можно использовать:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425 --quiet
WARNING: Implicit ":latest" tag specified: us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181
  Associated tags:
 - latest
Tags:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest].
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181].

Итак, это сработало.

Удаление изображений по дайджесту

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

$ gcloud container images list-tags us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726
DIGEST        TAGS    TIMESTAMP
4d860e73f85f  latest  2018-11-10T15:50:55

Сюрприз! Вы не можете просто использовать дайджест, как указано:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@4d860e73f85f
ERROR: (gcloud.container.images.delete) [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@4d860e73f85f] digest must be of the form "sha256:<digest>".

Это было немного странно (есть только один тег, «последний», и он даже не отображается в ошибке):

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f
ERROR: Tags:
ERROR: (gcloud.container.images.delete) This operation will implicitly delete the tags listed above. Please manually remove with the `untag` command or re-run with --force-delete-tags to confirm.

Хорошо, давайте использовать --force-delete-tags:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f --force-delete-tags
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542
  Associated tags:
 - latest
This operation will delete the tags and images identified by the digests above.

Do you want to continue (Y/n)?  n

ERROR: (gcloud.container.images.delete) Aborted by user.

Как и раньше, давайте воспользуемся --quiet, чтобы не показывать подсказку:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f --force-delete-tags --quiet
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542
  Associated tags:
 - latest
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726:latest].
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542].

Таким образом, для удаления с помощью дайджеста требуется более подробная командная строка.

person Rohan Talip    schedule 14.11.2018