Problemas al desplegar aplicaciones y funciones
Descubra cómo solucionar problemas al desplegar aplicaciones y funciones con OCI Functions.
Puede que se produzcan estos problemas al desplegar aplicaciones y funciones con OCI Functions.
El despliegue de una aplicación devuelve el mensaje "unauthorized: incorrect username or password"
Al desplegar una aplicación, es posible que vea un mensaje similar al siguiente:
$ fn -v deploy --app acme-app
Deploying go-app to app: acme-app
Bumped to version 0.0.2
Building image phx.ocir.io/ansh81vru1zp/acme-repo/go-app:0.0.2
FN_REGISTRY: phx.ocir.io/ansh81vru1zp/acme-repo
Current Context: acme-functions-compartment
Sending build context to Docker daemon 5.12kB
Step 1/10 : FROM fnproject/go:dev as build-stage
Get https://registry-1.docker.io/v2/fnproject/go/manifests/dev: unauthorized: incorrect username or password
El mensaje indica un intento innecesario o incorrecto de conexión a Docker Hub. Para resolver esta situación, desconéctese de Docker con el siguiente comando:
docker logout
Una vez desconectado de Docker, vuelva a ejecutar el comando para desplegar la aplicación.
El despliegue de una función devuelve un mensaje "error al ejecutar docker push, ¿está conectado a docker?"
Si ve un mensaje similar al siguiente al desplegar una función, vuelva a comprobar que el entorno de desarrollo no tiene la variable de entorno FN_REGISTRY definida en el nombre de usuario de Docker:
The push refers to repository [docker.io. ...
.
.
.
denied: requested access to the resource is denied
Fn: error running docker push, are you logged into docker?: exit status 1
See fn <command> --help’ for more information.
Si ha utilizado la plataforma de Fn Project de código abierto, es posible que haya seguido las instrucciones de la documentación de Fn Project para definir la variable de entorno FN_REGISTRY en el nombre de usuario de Docker a fin de permitir la interacción con el registro oficial de Docker (docker.io).
La variable de entorno FN_REGISTRY sustituye al valor de la opción de registro en el contexto de la CLI de Fn Project.
Para usar la CLI de Fn Project con OCI Functions, realice una de las siguientes acciones:
- Anule la definición de la variable de entorno FN_REGISTRY.
- Sustituya la variable de entorno FN_REGISTRY con la opción global
--registry
cuando introduzca un comando de la CLI de Fn Project que interactúe con Oracle Cloud Infrastructure Registry.
El despliegue de una función devuelve un mensaje ListTriggers y un error 500
Al implementar una función que ha creado previamente con una versión anterior de la CLI de Fn Project, es posible que aparezca un mensaje similar al siguiente:
Fn: [GET /triggers][500] ListTriggers default &{Fields: Message:Internal server error}
Este mensaje indica que el archivo func.yaml de la función contiene una o más definiciones de disparador HTTP. OCI Functions no es compatible actualmente con disparadores HTTP. Para desplegar la función, elimine la sección triggers:
del archivo func.yaml.
Para evitar crear nuevos archivos func.yaml que contengan definiciones de disparador, siga las instrucciones de Instalación de la CLI de Fn Project para actualizar la CLI de Fn Project a la versión más reciente.
El despliegue de una función devuelve un mensaje del siguiente tipo: "La imagen no existe o no tiene acceso para utilizarla"
Al desplegar una función mediante una instancia informática de Oracle Cloud Infrastructure como el entorno de desarrollo de OCI Functions, puede que vea un mensaje similar al siguiente:
Fn: Image phx.ocir.io/ansh81vru1zp/acme-repo/helloworld-func:0.0.2 does not exist or you do not have access to use it.
Este mensaje indica que la instancia informática no tiene acceso a Oracle Cloud Infrastructure Registry.
Vuelva a comprobar que existe una sentencia de política (similar a la que se muestra a continuación) en el compartimento raíz del arrendamiento para permitir que un grupo dinámico que incluya el OCID de la instancia informática pueda acceder a Oracle Cloud Infrastructure Registry:
Allow dynamic-group <dynamic-group-name> to read repos in tenancy
Para obtener más información sobre el uso de una instancia informática de Oracle Cloud Infrastructure como el entorno de desarrollo, consulte Diferentes opciones para los entornos de desarrollo de funciones.
El despliegue de una función en OCI Functions devuelve el mensaje "Fn: Missing subnets annotation"
Al desplegar una función en OCI Functions, es posible que aparezca el siguiente mensaje:
$ fn deploy --app joes-helloworld-app
Deploying helloworld-func to app: joes-helloworld-app
.
.
.
Fn: Missing subnets annotation
Si ve el mensaje Fn: Missing subnets annotation
, confirme que ha introducido el nombre de aplicación correcto. Por ejemplo:
- Es posible que la aplicación no esté en el compartimento especificado actualmente por el contexto de la CLI de Fn Project.
- Es posible que la aplicación ya existiera anteriormente, pero que se haya suprimido posteriormente.
El despliegue de una función en OCI Functions devuelve el mensaje "La arquitectura de imagen de la función 'x86' es incompatible..."
Al desplegar una función en OCI Functions, es posible que aparezca un mensaje similar al siguiente:
$ fn deploy --app joes-helloworld-app
Deploying helloworld-func to app: joes-helloworld-app
.
.
.
Fn: Service error:InvalidParameter. Invalid Invalid image - Function's image architecture 'x86' is incompatible with the application's shape type 'GENERIC_X86_ARM'. http status code: 400. Opc request id:...
Este mensaje indica que la imagen de la función no incluye las dependencias necesarias (imágenes secundarias) para la unidad de la aplicación. Una causa probable del mensaje es el uso de la versión 0.6.24 (o anterior) de la CLI de Fn Project para desplegar una función con una imagen x86 para:
- una aplicación que tiene una unidad de arquitectura múltiple (como Generic_X86_ARM)
- una aplicación que tiene una sola unidad de arquitectura que no es compatible con una imagen x86 (como Generic_ARM)
A partir de la versión 0.6.25 de la CLI de Fn Project, cuando utiliza el comando fn deploy --app <app-name>
para crear una función y desplegarla en OCI Functions, la CLI de Fn Project crea la imagen de Docker de la función con las dependencias necesarias para la unidad de la aplicación. Si la aplicación tiene una unidad de arquitectura múltiple (como Generic_X86_ARM, la unidad de aplicación por defecto desde septiembre de 2023), la CLI de Fn Project crea una imagen de arquitectura múltiple para la función. La imagen de la función y la forma de la aplicación siempre son compatibles.
Sin embargo, la versión 0.6.24 (y anteriores) de la CLI de Fn Project siempre crea imágenes de Docker con las dependencias necesarias para una única arquitectura, la arquitectura x86. Como imagen de arquitectura única, dicha imagen x86 solo es compatible con aplicaciones que tienen la unidad de arquitectura única Generic_X86. La imagen x86 no es compatible con las aplicaciones que tienen:
- una unidad de arquitectura múltiple (como Generic_X86_ARM, la unidad de aplicación por defecto desde septiembre de 2023)
- una unidad de arquitectura única que no sea Generic_X86 (como Generic_ARM)
Para desplegar la función correctamente, debe proporcionar una imagen compatible con la unidad de la aplicación. Realice una de las siguientes acciones:
- Use la versión 0.6.25 o posterior de la CLI de Fn Project (recomendado).
- Despliegue la función en una aplicación diferente que tenga una unidad compatible con la imagen de la función (cree una nueva aplicación si es necesario). Suponiendo que utiliza la versión 0.6.24 o anterior de la CLI de Fn Project, despliegue siempre la función en una aplicación que tenga una unidad Generic_X86.
- Utilice Docker para crear una imagen compatible con la unidad de arquitectura de la aplicación.
Para obtener más información, consulte Especificación de la arquitectura de recursos informáticos en la que ejecutar funciones.
El despliegue de una función en OCI Functions en Cloud Shell devuelve el mensaje "OL8 Cloud Shell no soporta compilaciones cruzadas y compilaciones de funciones de varias archivos..."
Al desplegar una función en OCI Functions en el entorno de desarrollo de Cloud Shell, puede que aparezca un mensaje similar al siguiente:
OL8 CloudShell does not support cross-compilation and multi-arch functions builds. Please ensure the architecture of your App matches the CloudShell architecture.
Este mensaje indica que la función se basa en una imagen de arquitectura múltiple, que la aplicación tiene una unidad de arquitectura múltiple o que la sesión de Cloud Shell y la aplicación tienen una arquitectura diferente.
En el entorno de desarrollo de Cloud Shell, OCI Functions no soporta la creación y el despliegue de funciones basadas en imágenes de arquitectura múltiple ni aplicaciones con unidades de arquitectura múltiple. Además, la arquitectura de la sesión de Cloud Shell debe ser la misma que la arquitectura de la aplicación.
Para obtener más información:
- Acerca de la creación de una función basada en una única imagen de arquitectura, en una aplicación que tenga una única unidad de arquitectura compatible, consulte Especificación de la arquitectura de recursos informáticos en la que ejecutar funciones.
- Acerca de la selección de la arquitectura de la sesión de Cloud Shell, consulte Arquitectura de Cloud Shell.
El despliegue de una función devuelve un manifiesto de imagen "No válido o no soportado. No se ha podido obtener la arquitectura del manifiesto/cabeceras de OCIR..." mensaje
Al desplegar una función en OCI Functions, es posible que aparezca un mensaje similar al siguiente:
$ fn -v deploy --app acme-app
Fn: Service error:InvalidParameter. Invalid or unsupported image manifest. Unable to get architecture from the OCIR Manifest/Headers. http status code: 400.
Hay una serie de posibles causas y soluciones, como se describe en esta sección.
Causa posible: versión incorrecta de Docker
Es posible que la versión de Docker que está utilizando no esté soportada.
Si utiliza Docker para crear imágenes de función, debe utilizar una versión soportada de Docker (en el momento de la escritura, versión 17.10 o posterior).
Para confirmar la versión de Docker que está utilizando, introduzca:
docker version
Si la versión de Docker no está soportada, instale una versión más reciente. Para obtener más información, consulte Instalación de Docker para su uso con OCI Functions.
Causa posible: el manifiesto tiene un formato incorrecto o falta la información necesaria
Es posible que el manifiesto de imagen tenga un formato incorrecto o que no contenga toda la información necesaria. El mensaje de error proporciona detalles adicionales.
Específicamente, la imagen se manifiesta:
- Debe estar en un formato JSON válido.
- Debe incluir un resumen de imagen.
- Debe especificar una arquitectura de imagen válida (
amd64
,arm64
o ambos).
Para inspeccionar el manifiesto de imagen, introduzca:
docker manifest inspect --verbose <image-path>
Por ejemplo:
docker manifest inspect --verbose phx.ocir.io/ansh81vru1zp/acme-repo/acme-func:0.0.3
Verifique que el manifiesto de imagen:
- Está en un formato JSON válido.
- Incluye un campo
digest
. - Incluye un campo
platform
que especifica una arquitectura de imagen válida. En el caso de una sola imagen de arquitectura, el campoplatform
debe especificaramd64
oarm64
. En el caso de una imagen de arquitectura múltiple, el campoplatform
debe especificaramd64
yarm64
. Para obtener más información, consulte Especificación de la arquitectura de recursos informáticos en la que ejecutar funciones.
Si el manifiesto de imagen tiene un formato incorrecto o falta la información requerida, actualice el manifiesto y reconstruya la imagen.
Causa posible: la imagen no es válida
Es posible que la imagen creada a partir del manifiesto de imagen no sea válida (por ejemplo, porque falta información necesaria en el manifiesto de imagen).
En esta situación, debe reconstruir la imagen. La forma de reconstruir la imagen depende de si está reconstruyendo una imagen de arquitectura única o una imagen de arquitectura múltiple, y de la herramienta que desea utilizar.
Reconstrucción de una sola imagen de arquitectura:
Puede reconstruir imágenes de arquitectura única de diferentes maneras, incluyendo:
- Con la CLI de Fn Project (recomendado):
En el directorio de la función, introduzca el siguiente comando de la CLI de Fn Project para crear la función y sus dependencias como una sola imagen de arquitectura, envíe la imagen al registro de Docker especificado y despliegue la función en OCI Functions:
fn deploy --app <your-function-app>
donde
<app-name>
es el nombre de la aplicación con la unidad de arquitectura única, en la que desea crear la función.Para obtener más información, consulte Uso de la CLI de Fn Project para crear una sola imagen de arquitectura.
- Uso del comando de compilación de Docker o del plugin buildx de Docker:
Para crear una imagen para la misma arquitectura que la plataforma actual, utilice el comando
docker build
. Por ejemplo, para crear una imagen para desplegarla en una aplicación conamd64
como unidad de arquitectura única, introduzca:docker build --platform linux/amd64 -t <image-path> .
Para crear una imagen para una arquitectura diferente de la plataforma actual, utilice el comando
docker buildx build
. Por ejemplo, para crear una imagen para desplegarla en una aplicación conamd64
como unidad de arquitectura única, introduzca:docker buildx build --platform linux/amd64 -t <image-path> .
Asegúrese de especificar
amd64
oarm64
, y no especifique ambos. Asegúrese también de no especificar ninguna otra arquitectura.Una vez creada la imagen, introduzca el siguiente comando para transferir la imagen al registro de Docker:
docker push <image-path>
Para obtener más información, consulte Uso del comando de creación de Docker para crear una sola imagen de arquitectura.
Reconstrucción de una imagen de arquitectura múltiple:
Puede reconstruir imágenes de múltiples arquitecturas de diferentes maneras, incluyendo:
- Con la CLI de Fn Project (recomendado):
En el directorio de la función, introduzca el siguiente comando de la CLI de Fn Project para crear la función y sus dependencias como una imagen de arquitectura múltiple, envíe la imagen al registro de Docker especificado y despliegue la función en OCI Functions:
fn deploy --app <your-function-app>
donde
<app-name>
es el nombre de la aplicación con la unidad de arquitectura múltiple, en la que desea crear la función.Para obtener más información, consulte Uso de la CLI de Fn Project para crear una imagen de arquitectura múltiple (recomendado).
- Uso del plugin buildx de Docker:
Para crear una imagen de arquitectura múltiple en la que basar una función para desplegarla en una aplicación con una unidad de arquitectura múltiple, introduzca el siguiente comando
docker buildx build
:docker buildx build --platform linux/amd64,linux/arm64 -t <your-registry>/<your-image>:<tag> --push .
Asegúrese de especificar
amd64
yarm64
, y de no especificar ninguna otra arquitectura.Una vez creada la imagen, introduzca el siguiente comando para transferir la imagen al registro de Docker:
docker push <image-path>
Para obtener más información, consulte Uso del plugin buildx de Docker para crear una imagen de arquitectura múltiple.