#google-cloud-platform #google-compute-engine #gcloud #google-iam #google-cloud-source-repos
# #google-cloud-platform #google-compute-engine #gcloud #google-iam #google-cloud-source-репозитории
Вопрос:
Я пытаюсь создать экземпляр виртуальной машины Compute Engine sample
в облаке Google, который имеет связанный сценарий запуска startup_script.sh
. При запуске я хотел бы иметь доступ к файлам, которые я сохранил в репозитории облачных источников. Таким образом, в этом сценарии я клонирую репозиторий с помощью
gcloud source repos clone <repo name> --project=<project name>
Кроме того, startup_script.sh
также выполняются такие команды, как
gcloud iam service-accounts keys create key.json --iam-account <account>
который создает .json
учетные данные и
EXTERNAL_IP = $(gcloud compute instances describe sample --format='get(networkInterfaces[0].accessConfigs[0].natIP)' --zone=us-central1-a)
чтобы получить внешний IP-адрес виртуальной машины внутри виртуальной машины. Чтобы выполнить эти команды без каких-либо ошибок, я обнаружил, что мне нужен частичный или полный доступ к нескольким областям доступа Cloud API.
Если я вручную отредактирую области виртуальной машины после того, как я ее уже создал, чтобы разрешить это, и перезапущу ее, startup_script.sh
все будет нормально, т. Е. Я могу видеть результаты успешного завершения каждой команды. Тем не менее, я хотел бы назначить эти области при создании виртуальной машины и не редактировать области вручную после факта. Я нашел в документации, что для этого я могу запустить
gcloud compute instances create sample --image-family=ubuntu-1804-lts --image-project=ubuntu-os-cloud --metadata-from-file=startup-script=startup_script.sh --zone=us-central1-a --scopes=[cloud-platform, cloud-source-repos, default]
Однако, когда я запускаю эту команду в облачной оболочке, я могу либо добавлять только одну область за раз, т. Е. --scopes=cloud_platform
, Или если я пытаюсь ввести несколько областей, как показано в команде выше, я получаю
ERROR: (gcloud.compute.instances.create) unrecognized arguments:
cloud-source-repos,
default]
Добавление нескольких областей, как указано в документации, похоже, не работает. Я получаю аналогичную ошибку при использовании URI области вместо ее псевдонима.
Какие-либо очевидные причины, по которым это может происходить? Я чувствую, что это может быть связано с учетной записью службы (или ее отсутствием), связанной с sample
виртуальной машиной, но я не совсем знаком с этим.
БОНУС: в идеале я хотел бы запустить команду облачной оболочки создания виртуальной машины в cloudbuild.yaml
файле, который у меня есть как
steps:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: gcloud
args: ['compute', 'instances', 'create', 'sample', '--image-family=ubuntu-1804-lts', '--image-project=ubuntu-os-cloud', '--metadata-from-file=startup-script=startup_sample.sh', '--zone=us-central1-a', '--scopes=[cloud-platform, cloud-source-repos, default]']
Я могу отправить сборку с помощью
gcloud builds submit --config cloudbuild.yaml .
Есть ли какие-либо проблемы с тем, как я это настроил cloudbuild.yaml
?
Комментарии:
1. У вашей учетной записи службы есть надлежащие роли? Кроме того, вы можете попробовать удалить default после облачных репозиториев и посмотреть, изменится ли что-нибудь? В нем указывается ошибка аргумента, поэтому синтаксис неправильный, но для меня это выглядит нормально
2. Совет. Области Compute Engine ограничивают разрешения, назначенные учетной записи службы. Области не увеличивают / не добавляют разрешения. Используйте область «облачная платформа» и управляйте разрешениями с помощью ролей, назначенных проекту для учетной записи службы.
Ответ №1:
Добавление нескольких областей, как указано в документации, похоже, не работает
Пожалуйста, используйте эту команду с --scopes=cloud-platform,cloud-source-reposCreated
, а не --scopes=[cloud-platform, cloud-source-repos, default]
:
gcloud compute instances create sample --image-family=ubuntu-1804-lts --image-project=ubuntu-os-cloud --zone=us-central1-a --scopes=cloud-platform,cloud-source-reposCreated
[https://www.googleapis.com/compute/v1/projects/wave25-vladoi/zones/us-central1-a/instances/sample].
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
sample us-central1-a n1-standard-1 10.128.0.17 35.238.166.75 RUNNING
Также рассмотрите комментарий @John Hanley.