Google Cloud App Engine - проблема с доступом к gsutil

Мне нужна помощь в устранении неполадок в моем приложении, написанном на Python3 / Flask, для размещения на Google App Engine. Развертывание выполнено успешно, но есть проблемы с App Engine, не имеющим доступа к GCS.

Код выглядит следующим образом:

gs_util_command = "gsutil "
gs_util_command =  gs_util_command + " cp gs://"+ re.match(r"https.//storage.googleapis.com/(.*)",url1).group(1)
gs_util_command = gs_util_command + " "+str(destination_file_path)

Я продолжаю получать сообщение об ошибке, как показано ниже

Сообщения об ошибках: ServiceException: 401 Анонимный вызывающий абонент не имеет доступа storage.objects.get к объекту Google Cloud Storage.

IAM подтверждает, что у службы есть доступ владельца к сегменту хранилища GCS, но он по-прежнему не работает.

Я попытался запустить приведенный ниже оператор внутри кода Python3 и развернуть его в GCP:

  os.system("gsutil version -l")

Я получаю следующее сообщение в журнале оболочки после развертывания и выполнения в облаке:

2021-04-12 01:36:18 по умолчанию [20210412t013030] версия gsutil: 4.61 2021-04-12 01:36:18 по умолчанию [20210412t013030] контрольная сумма: PACKAGED_GSUTIL_INSTALLS_DO_NOT_HAVE_CHECKSUMS (! = 61834ed701606a4fa3e6e06e08e06e08e08e08eb) по умолчанию [20210412t013030] версия boto: 2.49.0 2021-04-12 01:36:18 по умолчанию [20210412t013030] версия python: 3.7.10 (по умолчанию, 23 марта 2021 года, 05:09:08) [GCC 7.5.0] 2021 -04-12 01:36:18 по умолчанию [20210412t013030] ОС: Linux 4.4.0 2021-04-12 01:36:18 по умолчанию [20210412t013030] многопроцессорность доступна: True 2021-04-12 01:36:18 по умолчанию [20210412t013030 ] с использованием облачного SDK: False 2021-04-12 01:36:18 по умолчанию [20210412t013030] передать учетные данные облачного SDK в gsutil: False 2021-04-12 01:36:18 по умолчанию [20210412t013030] Путь (пути) конфигурации: Нет конфигурации нашел

Когда я пытаюсь запустить ту же команду локально через Google Cloud Shell, она работает нормально.

gsutil version -l

Результат:

gsutil version: 4.60 checksum: 4e34e1f62b6d54d4826625581f787044 (OK) boto version: 2.49.0 python version: 3.7.3 (default, Jan 22 2021,

20:04:44) [GCC 8.3.0] ОС: Linux 5.4.89+ доступна многопроцессорная обработка: True с использованием облачного SDK: True передать учетные данные облачного SDK в gsutil: Истинные пути конфигурации: /home/jobsage_sai/.boto gsutil путь: / usr / lib / google-cloud-sdk / bin / gsutil скомпилированный crcmod: False, установленный через диспетчер пакетов: False редактируемая установка: False

Все это в виртуальной среде.

Пожалуйста, предложите.

Арвинд Р.


person user3528338    schedule 12.04.2021    source источник


Ответы (2)


Когда вы развертываете свой код в стандарте App Engine, вы развертываете только свой код. Его забирает Google Cloud, создается контейнер (с Buildpacks), а затем он развертывается.

Когда вы создаете приложение с помощью App Engine, оно уже создает сегмент по умолчанию и подключения к GCS. Вам не нужно ничего настраивать в своем проекте, чтобы иметь возможность использовать

Обратите внимание: контейнер создан Google Cloud. Это означает, что вы не контролируете среду выполнения, то есть то, что присутствует не в базовом образе, ниже вашего собственного кода. Может быть, сегодня установлен gsutil, но в будущем ничего не гарантировано!

Итак, как сказал Дишант, используйте клиентские библиотеки или напрямую API для достижения того, что ты хочешь.


Если вы используете App Engine Flex или Cloud Run, все по-другому. В обоих случаях вы можете развернуть собственный контейнер (с настраиваемой средой выполнения на гибкой платформе App Engine). Таким образом, вы можете полагаться на базовую среду выполнения, потому что вы сами выбираете и управляете ею.

person guillaume blaquiere    schedule 12.04.2021

Используйте облачный клиент Python для хранилища вместо gsutil в App Engine.

person dishant makwana    schedule 12.04.2021