Как установить версию времени выполнения в пакетах Google Cloud Buildpacks при использовании Functions Framework для Python?

#python #google-cloud-platform #google-cloud-functions

#python #google-cloud-platform #google-cloud-функции

Вопрос:

Я пытаюсь использовать Functions Framework для создания своей функции pack .

 $ls -lah .
total 40
drwxr-xr-x  9 viroos  staff   288B Oct 18 02:54 .
drwxr-xr-x  9 viroos  staff   288B Oct 11 03:20 ..
-rw-r--r--  1 viroos  staff    44B Oct 17 19:37 .gitignore
-rw-r--r--  1 viroos  staff     6B Oct 18 02:24 .python-version
drwxr-xr-x  3 viroos  staff    96B Oct 17 22:44 __pycache__
-rw-r--r--  1 viroos  staff    32B Oct 18 02:54 main.py
-rw-r--r--  1 viroos  staff   259B Oct 18 02:54 project.toml
-rw-r--r--  1 viroos  staff    75B Oct 18 02:20 requirements.txt
drwxr-xr-x  6 viroos  staff   192B Oct 17 19:35 venv
  
 $ cat project.toml 
[[build.env]]
name =  "GOOGLE_RUNTIME_VERSION"
value = "python38"
[[build.env]]
name = "GOOGLE_FUNCTION_TARGET"
value = "foo"
[[build.env]]
name = "GOOGLE_FUNCTION_SIGNATURE_TYPE"
value = "event"
[[build.env]]
name = "GOOGLE_FUNCTION_SOURCE"
  
 $ cat .python-version 
3.8.6
  

При попытке создать функцию я получаю следующую ошибку:

 $ pack build foo --builder gcr.io/buildpacks/builder:v1v1: Pulling from buildpacks/builder
Digest: sha256:75f77739e5f8b6e06ff24ca56382de6ef44fce4d5def89dbde04fff5f8c95567
Status: Image is up to date for gcr.io/buildpacks/builder:v1
v1: Pulling from buildpacks/gcp/run
Digest: sha256:5c9214c1500035542b066d9fe8e4b5643c9b52388f52f543e91f55b8ebb27bc9
Status: Image is up to date for gcr.io/buildpacks/gcp/run:v1
===> DETECTING
4 of 5 buildpacks participating
google.python.runtime             0.9.1
google.python.functions-framework 0.9.1
google.python.pip                 0.9.1
google.utils.label                0.0.1
===> ANALYZING
Previous image with name "foo" not found
===> RESTORING
===> BUILDING
=== Python - Runtime (google.python.runtime@0.9.1) ===
Using runtime version from GOOGLE_RUNTIME_VERSION: python38
Failure: (ID: d1f5dcf5) Runtime version python38 does not exist at https://storage.googleapis.com/gcp-buildpacks/python/python-python38.tar.gz (status 403). You can specify the version with GOOGLE_RUNTIME_VERSION.
--------------------------------------------------------------------------------
Sorry your project couldn't be built.
Our documentation explains ways to configure Buildpacks to better recognise your project:
 -> https://github.com/GoogleCloudPlatform/buildpacks/blob/main/README.md
If you think you've found an issue, please report it:
 -> https://github.com/GoogleCloudPlatform/buildpacks/issues/new
--------------------------------------------------------------------------------
ERROR: failed to build: exit status 1
ERROR: failed to build: executing lifecycle: failed with status code: 145
  

Когда я удаляю

 [[build.env]]
name =  "GOOGLE_RUNTIME_VERSION"
value = "python38"
  

project.toml я получаю следующую ошибку:

 $ pack build foo --builder gcr.io/buildpacks/builder:v1
v1: Pulling from buildpacks/builder
Digest: sha256:75f77739e5f8b6e06ff24ca56382de6ef44fce4d5def89dbde04fff5f8c95567
Status: Image is up to date for gcr.io/buildpacks/builder:v1
v1: Pulling from buildpacks/gcp/run
Digest: sha256:5c9214c1500035542b066d9fe8e4b5643c9b52388f52f543e91f55b8ebb27bc9
Status: Image is up to date for gcr.io/buildpacks/gcp/run:v1
===> DETECTING
4 of 5 buildpacks participating
google.python.runtime             0.9.1
google.python.functions-framework 0.9.1
google.python.pip                 0.9.1
google.utils.label                0.0.1
===> ANALYZING
Previous image with name "foo" not found
===> RESTORING
===> BUILDING
=== Python - Runtime (google.python.runtime@0.9.1) ===
Using runtime version from .python-version: 3.8.6
Failure: (ID: 8d3064d0) Runtime version 3.8.6 does not exist at https://storage.googleapis.com/gcp-buildpacks/python/python-3.8.6.tar.gz (status 403). You can specify the version with GOOGLE_RUNTIME_VERSION.
--------------------------------------------------------------------------------
Sorry your project couldn't be built.
Our documentation explains ways to configure Buildpacks to better recognise your project:
 -> https://github.com/GoogleCloudPlatform/buildpacks/blob/main/README.md
If you think you've found an issue, please report it:
 -> https://github.com/GoogleCloudPlatform/buildpacks/issues/new
--------------------------------------------------------------------------------
ERROR: failed to build: exit status 1
ERROR: failed to build: executing lifecycle: failed with status code: 145
  

Вопросы:

  1. Каков правильный / самый простой / рекомендуемый способ управления версией среды выполнения python в этом сценарии?
  2. Для чего нужно правильное значение GOOGLE_RUNTIME_VERSION ?
  3. Есть ли какое-нибудь место, где я могу найти список всех версий среды выполнения?

Ответ №1:

Я смог воспроизвести ошибки, с которыми вы столкнулись, и вот что я заметил:


Как советовал Дастин, для использования Python 3.8.6 должно быть достаточно указать его в .python-version файле:

 3.8.6
  

Однако project.toml вы также можете указать ее следующим образом:

 [[build.env]]
name =  "GOOGLE_RUNTIME_VERSION"
value = "3.8.6"
  

Что касается доступных версий, buildpacks поддерживают Python 3.7 , хотя 3.8.6 , по-видимому, это самая высокая поддерживаемая версия.

Я также протестировал его с версиями 3.8.4 , 3.8.0 , 3.7.7 , 3.7.2 и 3.7.0 , чтобы подтвердить это, и для меня это было успешным, в то время 3.9.0 как версии и ниже 3.7.0 приводили к той же ошибке: «Версия времени выполнения не существует».


Другая ошибка, с которой вы столкнулись («Извините, ваш проект не удалось собрать») при удалении GOOGLE_RUNTIME_VERSION , project.toml похоже, связана с вашими GOOGLE_FUNCTION_SOURCE настройками, поскольку вы не указали для нее значение:

 [[build.env]]
name = "GOOGLE_FUNCTION_SOURCE"
  

Ошибка исчезла, как только я добавил значение. Например.

 [[build.env]]
name = "GOOGLE_FUNCTION_SOURCE"
value = "main.py"
  

Ответ №2:

Доступность данной среды выполнения немного отстает от версии Python, которой она соответствует. Вы должны обнаружить, что 3.8.6 теперь доступен.

Каков правильный / самый простой / рекомендуемый способ управления версией среды выполнения python в этом сценарии?

.python-version Рекомендуемый способ — установить значение like 3.8.6 .

Какое правильное значение для GOOGLE_RUNTIME_VERSION ?

Это будет то же самое, что и то, что вы бы ввели .python-version , но будет иметь приоритет над ним.

Есть ли какое-нибудь место, где я могу найти список всех версий среды выполнения?

К сожалению, в данный момент нет, но вы можете сообщить о проблеме по адресу https://github.com/GoogleCloudPlatform/buildpacks чтобы запросить это.