#google-cloud-platform
#google-cloud-platform
Вопрос:
У меня есть два проекта GCP, ProjectA и ProjectB. В ProjectB у меня есть образ компьютера B-machine-image. Моей целью было создать копию образа компьютера в ProjectA. Но поскольку невозможно напрямую скопировать образ компьютера из ProjectB в ProjectA, я подумал, что могу создать экземпляр в ProjectA, используя образ компьютера в ProjectB, а затем использовать новый экземпляр в ProjectA для локального создания образа компьютера.
Я нашел документ Google для этого: https://cloud.google.com/compute/docs/machine-images/create-instance-from-machine-image и выполнил шаги, чтобы сначала предоставить учетную запись службы в роли администратора ProjectA образу компьютера B-machine-image в ProjectB, затем запустите команду, чтобы создать экземпляр, подобный:
экземпляры gcloud beta compute создают my-new-instance —project=ProjectA —zone us-central1-b —source-machine-image projects/ProjectB /global/machineImages /B-machine-image —service-account 123456789000-compute@developer.gserviceaccount.com
и я получаю сообщение об ошибке:
ОШИБКА: (gcloud.beta.compute.instances.create) Не удалось получить ресурс:
- Недопустимое значение для поля ‘resource.networkInterfaces [0].network’: ‘projects /123456789000 / global /networks /ProjectB-vpc’. Не удается найти сетевой ресурс, на который ссылается.
В ProjectB у меня есть VPC с именем ProjectB-vpc.
Чего я не понимаю, так это того, что в «projects / 123456789000 / global / networks / ProjectB-vpc» 123456789000, похоже, предназначен для ProjectA, поскольку он является частью электронной почты для учетной записи службы ProjectA, в то время как ProjectB-vpc предназначен для ProjectB. В моей команде у меня есть «projects / ProjectB / ….», почему команда заменила «ProjectB» на 123456789000?
Есть идеи, где я ошибся?
Спасибо, Филипп
Комментарии:
1. Образы компьютеров отличаются от обычных образов вычислительного ядра. Образы компьютеров предварительно настроены для конкретной среды виртуальной машины. Я рекомендую вам создать обычный образ экземпляра compute engine. Для решения этой проблемы попробуйте добавить параметр командной строки
--network=default
и--subnet=default
/ или заменить своими реальными сетевыми именами.2. Возможно, вам придется повторить этот процесс и указать переопределения для каждого значения конфигурации, сохраненного в образе компьютера.
Ответ №1:
В соответствии с документацией GCP вы можете создать виртуальную машину, используя образ компьютера из другого проекта напрямую. Обратите внимание, что при создании виртуальной машины с использованием образа компьютера из другого проекта у вас может не быть доступа к учетной записи службы, прикрепленной к этому исходному проекту. В моих шагах воспроизведения я выполнил следующие шаги:
- Создан мультирегиональный образ компьютера
2. gcloud beta compute machine-images add-iam-policy-binding rhel-machine-image
--project=source-project
--member='serviceAccount:Source-compute@developer.gserviceaccount.com'
--role='roles/compute.admin'
- Добавлена учетная запись службы исходного проекта в целевой проект как iam.serviceAccountUser
4. gcloud beta compute instances create machine-image-vm --project=destination-project --zone us-central1-a --source-machine-image projects/source-project/global/machineImages/rhel-machine-image --service-account Destination-compute@developer.gserviceaccount.com
На последнем шаге я использовал учетную запись службы destination project Compute Engine по умолчанию.
Created [https://www.googleapis.com/compute/beta/projects/destination-project/zones/us-central1-a/instances/machine-image-vm].
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
machine-image-vm us-central1-a e2-medium x0.xxx.0.18 35.2x3.18x.x59 RUNNING
Комментарии:
1. Спасибо, ребята, за предложения. Я обнаружил, что проблема, с которой я столкнулся, заключалась в том, что, как сказал Джон выше, мне нужно специально указать в команде —network и —subnet, поскольку образ компьютера содержит информацию о сети и подсети из исходного проекта, имена которых отличаются от имен в целевом проекте.
2. Я следил за документами, чтобы реализовать это, и это работает. У меня не возникает никаких ошибок, связанных с сетью. Если проблема устранена, отпустите ее.
3. Спасибо. Я полагаю, что в вашем случае вы сохранили сеть и подсеть «по умолчанию» при создании проектов, GCP делает это за вас. Я также считаю, что большинство людей сохранят значение по умолчанию, и именно по этой причине сработала команда из документа Google. Но в моем случае я удалил эти значения по умолчанию и создал свою собственную сеть и подсеть, поэтому мне приходится использовать дополнительные параметры —network и —subnet в команде gcloud, чтобы заставить его работать.
4. Я думаю, вы правы, поскольку я создал образ компьютера в проекте с сетью по умолчанию, и там, где я импортировал, также есть сеть по умолчанию.
Ответ №2:
Я считаю, что если вы сохраняете сеть и подсеть «по умолчанию» при создании проектов, GCP сделает это за вас (я также считаю, что большинство людей сохранят значение по умолчанию), тогда команды из документа Google будут работать. Но в моем случае я удалил эти значения по умолчанию и создал свою собственную сеть и подсеть, поэтому мне приходится использовать дополнительные параметры —network и —subnet в команде gcloud, чтобы заставить его работать.