Especificación de la arquitectura informática en la que ejecutar funciones

Descubra cómo especificar la arquitectura de procesador en la que ejecutar una función con OCI Functions, incluidos los requisitos de arquitectura para funciones basadas en imágenes y funciones de solo código.

Al desplegar una función en OCI Functions, puede especificar la arquitectura del procesador de las instancias informáticas en las que desea ejecutar la función. Puede limitar la función a ejecutarse en una sola arquitectura (como Arm) o puede activar la función para que se ejecute en varias arquitecturas (como Arm y x86).

Los pasos para especificar la arquitectura del procesador dependen del tipo de origen de la función:

Para las funciones basadas en imágenes, puede completar y combinar la unidad de aplicación, la creación de imágenes y los pasos de creación de funciones de varias formas diferentes. Por ejemplo:

  • Puede utilizar la consola para crear una aplicación con la unidad adecuada en primer lugar y, a continuación, utilizar el comando fn deploy de la CLI de Fn Project para crear y desplegar la función (que crea automáticamente una imagen adecuada que contiene las dependencias necesarias).
  • Puede utilizar un comando de Docker para crear primero una imagen que contenga las dependencias necesarias, utilizar la CLI de OCI para crear una aplicación con la unidad adecuada y, a continuación, utilizar la consola para crear una función en la aplicación basada en la imagen.

Selección de una única arquitectura o una forma de aplicación de arquitectura múltiple en la que ejecutar una función

Descubra cómo la selección de la unidad de una aplicación influye en la arquitectura del procesador de las instancias informáticas en las que se ejecutan las funciones con OCI Functions.

Al definir una aplicación en OCI Functions, se selecciona la arquitectura del procesador de las instancias informáticas en las que se desplegarán y ejecutarán funciones en la aplicación. Todas las funciones de la aplicación se despliegan y ejecutan en instancias informáticas con la misma arquitectura.

Para especificar la arquitectura de instancia informática en la que desea ejecutar funciones en una aplicación, seleccione una unidad para la aplicación de la siguiente forma:

  • Si siempre desea que las funciones de la aplicación se ejecuten en instancias informáticas con una arquitectura basada en Arm, seleccione la unidad Generic_ARM. Si selecciona esta unidad de arquitectura única para la aplicación, cada función debe ser compatible con la arquitectura Arm. Para las funciones basadas en imágenes, la imagen de la función debe contener las dependencias necesarias para la arquitectura Arm, ya sea en una imagen de arquitectura única o en una imagen de arquitectura múltiple.
  • Si siempre desea que las funciones de la aplicación se ejecuten en instancias informáticas con una arquitectura basada en x86, seleccione la unidad Generic_X86. Si selecciona esta unidad de arquitectura única para la aplicación, cada función debe ser compatible con la arquitectura x86. Para las funciones basadas en imágenes, la imagen de la función debe contener las dependencias necesarias para la arquitectura x86, ya sea en una imagen de arquitectura única o en una imagen de arquitectura múltiple.
  • Si desea que las funciones se ejecuten en instancias informáticas con cualquier arquitectura que tenga capacidad suficiente, seleccione la unidad Generic_X86_ARM. En este caso, OCI Functions selecciona la arquitectura en la que ejecutar funciones en función de la capacidad disponible. Si selecciona esta unidad de arquitectura múltiple para la aplicación, cada función debe ser compatible con las arquitecturas Arm y x86. Para las funciones basadas en imágenes, la imagen de la función debe contener las dependencias necesarias para ambas arquitecturas, en una imagen de varias arquitecturas.

Al crear una función en una aplicación, la función debe ser compatible con la unidad de la aplicación:

  • Si selecciona una única unidad de arquitectura para la aplicación, la función debe soportar la arquitectura correspondiente.
  • Si selecciona una unidad de arquitectura múltiple para la aplicación, la función debe soportar arquitecturas Arm y x86.

Para las funciones basadas en imágenes, la imagen de la función debe incluir las dependencias necesarias para la unidad de la aplicación. Una función de una aplicación de arquitectura única puede utilizar una imagen de arquitectura única o una imagen de arquitectura múltiple. Una función de una aplicación de arquitectura múltiple debe utilizar una imagen de arquitectura múltiple.

Para las funciones de solo código, el archivo debe tener el diseño y los artefactos compilados necesarios para la arquitectura de aplicación y tiempo de ejecución seleccionada. Consulte Archivos de empaquetado para funciones de solo código.

Para las funciones basadas en imágenes, para utilizar la misma imagen para desplegar y ejecutar una función en varias arquitecturas diferentes, utilice una imagen de varias arquitecturas, también conocida como lista de manifiestos o imagen de varios archivos. Las imágenes de arquitectura múltiple se crean a partir de un único árbol de origen, con una etiqueta de imagen que incluye imágenes para arquitecturas x86 y Arm.

Si utiliza el comando fn -v deploy --app <app-name> de la CLI de Fn Project para crear una función basada en imágenes y sus dependencias como imagen de Docker, la imagen se crea con las dependencias necesarias para la unidad de la aplicación. Si la aplicación tiene una forma de arquitectura múltiple, la imagen de la función se crea como una imagen de arquitectura múltiple. También puede crear imágenes de arquitectura múltiple mediante Docker Buildx y Podman. Si utiliza una herramienta que no sea la CLI de Fn Project para crear una imagen de arquitectura múltiple, es su responsabilidad verificar que la imagen sea compatible con la unidad de la aplicación.

Al seleccionar una unidad de arquitectura múltiple para una aplicación, OCI Functions evalúa la capacidad disponible y determina la arquitectura en la que desplegar y ejecutar funciones. Debido a que una función se puede desplegar en diferentes arquitecturas, asegúrese de que la función sea compatible con arquitecturas Arm y x86.

Para las funciones basadas en imágenes, la función debe basarse en una imagen de varias arquitecturas. Es su responsabilidad verificar que una función basada en una imagen de arquitectura múltiple se puede invocar correctamente en arquitecturas x86 y Arm. Para que pueda hacerlo, le recomendamos que, además de crear una función de este tipo en una aplicación con una unidad de arquitectura múltiple, cree funciones basadas en una imagen de arquitectura múltiple en aplicaciones con unidades de arquitectura únicas. Para facilitar la depuración, Oracle también recomienda que los logs de una función incluyan detalles de la arquitectura de la instancia informática en la que se ejecuta la función.

Una vez creada una aplicación, tenga en cuenta que no puede cambiar posteriormente la unidad de la aplicación. Si desea que una función concreta se ejecute en una arquitectura diferente, cree la función en una aplicación diferente (cree una nueva aplicación si es necesario). Para funciones basadas en imágenes, proporcione la arquitectura única o la imagen de arquitectura múltiple adecuada. Por ejemplo:

  • Si selecciona una única unidad de arquitectura (Arm o x86) para una aplicación, pero desea que una función concreta se ejecute en una arquitectura diferente, cree la función en una aplicación diferente que tenga la unidad de arquitectura adecuada.
  • Si selecciona una unidad de arquitectura múltiple para una aplicación, pero desea que una función concreta se ejecute siempre en una arquitectura específica, cree la función en una aplicación diferente que tenga la unidad de arquitectura única adecuada.
  • Si selecciona una única unidad de arquitectura (Arm o x86) para la aplicación, pero desea que una función concreta se ejecute en cualquier instancia informática independientemente de la arquitectura, cree la función en una aplicación diferente que tenga una unidad de arquitectura múltiple.

Creación de imágenes de arquitectura múltiple (multiarchivo) para funciones basadas en imágenes

Descubra cómo crear imágenes de arquitectura múltiple para funciones basadas en imágenes en aplicaciones que tienen unidades de arquitectura múltiple.

Para funciones basadas en imágenes, puede crear imágenes de múltiples arquitecturas de diferentes maneras, incluidas:

Puede crear funciones basadas en una imagen de arquitectura múltiple tanto en aplicaciones que tienen una forma de arquitectura múltiple como en aplicaciones que tienen una sola unidad de arquitectura, siempre que la imagen de arquitectura múltiple incluya las dependencias necesarias (imágenes secundarias) para la unidad de la aplicación.

Nota

En el entorno de desarrollo de Cloud Shell, OCI Functions no soporta la creación y el despliegue de funciones basadas en imágenes 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 sobre cómo seleccionar la arquitectura de la sesión de Cloud Shell, consulte Arquitectura de Cloud Shell).

Uso de la CLI de Fn Project para crear una imagen de arquitectura múltiple (recomendado)

Puede utilizar la CLI de Fn Project para crear una imagen de arquitectura múltiple al desplegar una función basada en imágenes en una aplicación con una unidad de arquitectura múltiple:

  1. Conéctese al entorno de desarrollo como desarrollador de funciones.
  2. Si una aplicación adecuada con una forma de arquitectura múltiple en la que crear la función no existe ya, cree una aplicación de este tipo ahora. Consulte Creación de aplicaciones.
  3. Si aún no ha inicializado la función, siga las instrucciones de Using Fn Project CLI Commands para inicializar la función ahora.
  4. En el directorio de la función, introduzca el siguiente comando de la CLI de Fn Project para crear la función basada en imágenes y sus dependencias como una imagen de arquitectura múltiple de Docker, transfiera la imagen al registro de Docker especificado y despliegue la función en OCI Functions:
    fn -v deploy --app <app-name>

    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.

    La imagen de arquitectura múltiple se crea e incluye las dependencias necesarias para las arquitecturas especificadas por la unidad de arquitectura múltiple de la aplicación.

Uso del plugin buildx de Docker para crear una imagen de arquitectura múltiple

Requisito: para poder utilizar el plugin buildx de Docker, debe descargar e instalar el plugin. Para obtener instrucciones de descarga e instalación, consulte la documentación de Docker buildx sobre github.

Una vez descargado e instalado el plugin buildx de Docker, puede utilizar el plugin para crear una imagen de arquitectura múltiple en la que basar una función basada en imágenes que desee desplegar en una aplicación con una unidad de arquitectura única o múltiple. Para obtener más información sobre el uso del plugin buildx de Docker, consulte la documentación buildx de Docker en github.

Por ejemplo, puede crear una imagen de arquitectura múltiple para una imagen hello-world de Python de la siguiente manera:

  1. Conéctese al entorno de desarrollo como desarrollador de funciones.
  2. En una ventana de terminal, cree un directorio en el que almacenar funciones. Por ejemplo:
    mkdir helloworld-python-dir
  3. Cambie el directorio al directorio creado recientemente. Por ejemplo:
    cd helloworld-python-dir
  4. Cree una función Python helloworld introduciendo:
    fn init --runtime python helloworld-func

    Se crea un directorio denominado helloworld-func, que contiene:

    • func.yaml: Archivo de definición de función que contiene la cantidad mínima de información necesaria para crear y ejecutar la función. Consulte la Documentación de Fn Project para conocer los parámetros adicionales que puede incluir en un archivo func.yaml.
    • requirements.txt: lista de bibliotecas de Python necesarias.
    • func.py: archivo de función real.
  5. Cree un nuevo archivo denominado Dockerfile en el mismo directorio.

    Tenga en cuenta que debe asignar al archivo el nombre Dockerfile .

  6. Abra el archivo denominado Dockerfile en un editor de su elección y agregue las siguientes líneas:
    FROM fnproject/python:3.6-dev as build-stage
    WORKDIR /function
    ADD requirements.txt /function/
     
    RUN pip3 install --target /python/  --no-cache --no-cache-dir -r requirements.txt &&\
      rm -fr ~/.cache/pip /tmp* requirements.txt func.yaml Dockerfile .venv &&\
      chmod -R o+r /python
    ADD . /function/
    RUN rm -fr /function/.pip_cache
     
    FROM fnproject/python:3.6
    WORKDIR /function
    COPY --from=build-stage /python /python
    COPY --from=build-stage /function /function
    RUN chmod -R o+r /function
    ENV PYTHONPATH=/function:/python
    ENTRYPOINT ["/python/bin/fdk", "/function/func.py", "handler"]
  7. Guarde el archivo denominado Dockerfile. Ahora puede utilizar el archivo Dockerfile como archivo Dockerfile personalizado.
  8. En el archivo func.yaml, cambie el valor del parámetro runtime: a runtime: docker.

    Por ejemplo, cambie:

    schema_version: 20180708
    name: helloworld-func
    version: 0.0.1
    runtime: python
    build_image: fnproject/python:3.9-dev
    run_image: fnproject/python:3.9
    entrypoint: /python/bin/fdk /function/func.py handler
    memory: 256

    en:

    schema_version: 20180708
    name: helloworld-func
    version: 0.0.1
    runtime: docker
    build_image: fnproject/python:3.9-dev
    run_image: fnproject/python:3.9
    entrypoint: /python/bin/fdk /function/func.py handler
    memory: 256
  9. Utilice el comando docker buildx para crear imágenes basadas en x86 y Arm y generar una imagen de arquitectura múltiple a partir de ellas, introduciendo:
    docker buildx build --push --platform <platform1,platform2,..> --tag <manifest_name> <dockerfile_path>

    Por ejemplo:

    docker buildx build --push --platform linux/arm64/v8,linux/amd64 --tag my-manifest-name:1.0.0-SNAPSHOT-X86-ARM .
  10. Transfiera la imagen de varias arquitecturas a Oracle Cloud Infrastructure Registry. Por ejemplo, introduzca:
    docker manifest push my-manifest-name:1.0.0-SNAPSHOT-X86-ARM

    Ahora puede basar una función basada en imágenes en la imagen de arquitectura múltiple.

  11. (Opcional) Cree una nueva función basada en imágenes y defina la propiedad Image de la función en el nombre de la imagen de arquitectura múltiple. Por ejemplo:
    • Al utilizar la consola, especifique my-manifest-name:1.0.0-SNAPSHOT-X86-ARM en el campo Imagen.
    • Al utilizar la CLI de Fn Project, especifique my-manifest-name:1.0.0-SNAPSHOT-X86-ARM como valor del argumento de imagen. Por ejemplo:
      fn create function acmeapp acme-func phx.ocir.io/ansh81vru1zp/acme-repo/my-manifest-name:1.0.0-SNAPSHOT-X86-ARM

Creación de imágenes de arquitectura única para funciones basadas en imágenes

Descubra cómo crear imágenes de arquitectura única para funciones basadas en imágenes en aplicaciones que tengan unidades de arquitectura únicas.

Para las funciones basadas en imágenes, puede crear imágenes de arquitectura única de diferentes maneras, incluidas:

Al crear una función basada en imágenes basada en una única imagen de arquitectura, debe crear la función en una aplicación que tenga una única unidad de arquitectura compatible.

Uso de la CLI de Fn Project para crear una única imagen de arquitectura

Puede utilizar la CLI de Fn Project para crear una única imagen de arquitectura al desplegar una función basada en imágenes en una aplicación con una única unidad de arquitectura:

  1. Conéctese al entorno de desarrollo como desarrollador de funciones.
  2. Si una aplicación adecuada con una única unidad de arquitectura en la que crear la función no existe, cree una aplicación de este tipo ahora. Consulte Creación de aplicaciones.
  3. Si aún no ha inicializado la función, siga las instrucciones de Using Fn Project CLI Commands para inicializar la función ahora.
  4. En el directorio de la función, introduzca el siguiente comando de Fn Project para crear la función basada en imágenes y sus dependencias como una única imagen de arquitectura, transfiera la imagen al registro de Docker especificado y despliegue la función en OCI Functions:
    fn -v deploy --app <app-name>

    donde <app-name> es el nombre de la aplicación con la unidad de arquitectura única, en la que desea crear la función.

    Se crea la imagen de arquitectura única e incluye las dependencias necesarias para la arquitectura especificada por la unidad de arquitectura única de la aplicación.

Uso del comando de creación de Docker para crear una única imagen de arquitectura

Puede utilizar el comando de creación de Docker para crear una única imagen de arquitectura en la que basar una función basada en imágenes que desee desplegar en una aplicación con una única unidad de arquitectura. Para obtener más información, consulte el comando de compilación de Docker en la documentación de Docker.

Tenga en cuenta que al utilizar el comando build de Docker para crear una imagen, la imagen incluye las dependencias necesarias para la arquitectura de la plataforma actual en la que se ejecuta el comando. Por lo tanto, si ejecuta el comando build de Docker en una plataforma AMD (arquitectura x86), la imagen incluye las dependencias necesarias para la arquitectura x86. Si desea crear una imagen de arquitectura única para una arquitectura diferente a la plataforma actual, utilice el plugin buildx de Docker y especifique la arquitectura de destino único como valor del argumento --platform. Consulte Uso del plugin buildx de Docker para crear una imagen de arquitectura múltiple.