gcloud scp не работает внутри функций Google - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть функция Google, которая пытается скопировать сценарий оболочки в один из экземпляров. Он работает нормально в обычном файле python, но в функциях Google выдает следующее сообщение об ошибке:

FileNotFoundError: [Errno 2] No such file or directory: 'gcloud': 'gcloud'

Пример кода

command = "gcloud compute scp --project " + "robotic-century-2524902" + " " + "/tmp/test.sh" + " " + "instance-12" + ":~/" + \
                      " " + "--zone " + "us-central1-a"

status = subprocess.check_output(shlex.split(command))

У меня есть следующие пакеты google-cloud==0.34.0,gcloud==0.18.3 добавлено также в файл require.txt. Любая помощь здесь ??

1 Ответ

3 голосов
/ 30 сентября 2019

формально использование Google gcloud Cloud SDK сбивает с толку.

google-cloud и gcloud (устарело) не предоставляют командной строкиСродни знакомой вам команде gcloud, которая предоставляет, например, gcloud compute scp...

Эти пакеты NPM фактически являются SDK для различных API облачной платформы Google, лежащих в основе командной строки gcloud.

Когда вы запускаете gcloud ... в командной строке, двоичный файл gcloud выполняет API-вызовы к сервисам Google Cloud Platform, а пакеты NPM, на которые вы ссылаетесь, предоставляют JavaScript | Node.JS SDK для этих API-интерфейсов. Вы можете увидеть, какие API-интерфейсы вызываются командами gcloud, добавляя --log-http к любой команде.

В этом случае есть еще один недостаток, потому что gcloud фактически использует установленную команду scp вашего хоста ниже--крышки;gcloud compute scp... - это удобная оболочка для scp, которая также управляет аутентификацией ssh ​​для вас.

Это невозможно (поскольку командная строка gcloud [вероятно] не установлена ​​в экземпляре Cloud Functions). ) и не рекомендуется выполнять команды оболочки из облачных функций.

Когда вы запускаете свой код локально, он запускается под вашими учетными данными (gcloud config get-value account), и у этого пользователя есть разрешение для ssh / scpэкземпляр благодаря рабочим ключам gcloud для пользователя в экземпляре.

Работая как облачная функция, вы, вероятно, захотите дать разрешение облачной функции выступать в качестве учетной записи службы экземпляра Compute Engine. Это может стать запутанным | сложным.

Альтернативой может быть выгрузка сценария в Google Cloud Storage (GCS) из облачной функции, а затем обращение к экземпляру Compute Engine | для получения его из GCS.

Не могли бы вы подробнее рассказать о том, что вы пытаетесь сделать? Я понимаю, что функция хочет сбросить сценарий на экземпляре. Но как функция получает скрипт и что делает скрипт?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...