Насколько я понимаю, вы хотите получить в итоге новый экземпляр GCP Compute Engine, работающий под управлением оптимизированной для контейнера ОС (COS), которая запускает Docker, который создает экземпляр контейнера из образа контейнера, размещенного в репозитории. Для достижения этой цели вы также хотите использовать API-интерфейс Node.JS.
Хитрость (для меня) заключается в создании экземпляра Compute Engine вручную через облачную консоль GCP. После этого мы можем войти в экземпляр и получить необработанные метаданные, выполнив:
wget --output-document=- --header="Metadata-Flavor: Google" --quiet http://metadata.google.internal/computeMetadata/v1/?recursive=true
В результате мы получим JSON-представление этих метаданных. Отсюда мы находим, что наша реальная цель в создании желаемого Compute Engine через API - создать этот Compute Engine с использованием стандартного API, а затем определить необходимые метаданные. Похоже, что оптимизированная для контейнера ОС просто имеет скрипт / программу, которая читает метаданные и использует их для запуска Docker.
Когда я исследовал данные для контейнера, работающего в Compute Engine, я обнаружил атрибут с именем:
attribute.gce-container-объявление
Содержит:
"spec:\n containers:\n - name: instance-1\n image: nodered/node-red\n stdin: false\n tty: false\n restartPolicy: Always\n\n# This container declaration format is not public API and may change without notice. Please\n# use gcloud command-line tool or Google Cloud Console to run Containers on Google Compute Engine."
, что является YAML, и если мы отформатируем его красиво, мы найдем:
spec:
containers:
- name: instance-1
image: nodered/node-red
stdin: false
tty: false
restartPolicy: Always
# This container declaration format is not public API and may change without notice. Please
# use gcloud command-line tool or Google Cloud Console to run Containers on Google Compute Engine.
И у нас это есть. Чтобы создать GCP Compute Engine, содержащий образ контейнера, мы должны создать образ контейнера с ОС, оптимизированной для работы с контейнерами (например, «image»: «projects / cos-cloud / global / images / cos-stable-77-12371-114-0 ") и установите метаданные, чтобы определить контейнер для запуска.