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.

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).

Existen tres pasos para especificar la arquitectura del procesador en la que ejecutar una función:

En función de cómo elija crear funciones con OCI Functions, puede completar y combinar estos pasos 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 desea que las funciones de la aplicación se ejecuten siempre 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, la imagen de cada función debe contener las dependencias necesarias para la arquitectura Arm (en una sola imagen de arquitectura o en una imagen de arquitectura múltiple).
  • Si desea que las funciones de la aplicación se ejecuten siempre 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, la imagen de cada función debe contener las dependencias necesarias para la arquitectura x86 (en una sola imagen de arquitectura o en una imagen de arquitectura múltiple).
  • Si desea que las funciones se ejecuten en instancias informáticas con la arquitectura que tenga capacidad suficiente, seleccione la unidad Generic_X86_ARM. En este caso, OCI Functions selecciona la arquitectura en la que se ejecutan las funciones en función de la capacidad disponible. Si selecciona esta unidad de arquitectura múltiple para la aplicación, la imagen de cada función debe contener las dependencias necesarias tanto para la arquitectura Arm como para la arquitectura x86 (en una imagen de arquitectura múltiple).

Al crear una función en una aplicación, la imagen en la que se basa la función debe incluir las dependencias necesarias para la unidad de la aplicación:

  • Si selecciona una unidad de arquitectura única para la aplicación, la imagen de la función debe contener las dependencias necesarias para la arquitectura correspondiente (en una sola imagen de arquitectura o en una imagen de arquitectura múltiple).
  • Si selecciona una unidad de arquitectura múltiple para la aplicación, la imagen de la función debe contener las dependencias necesarias para ambas arquitecturas (en una imagen de arquitectura múltiple).

Para utilizar la misma imagen para desplegar y ejecutar una función en varias arquitecturas diferentes, se utiliza una imagen de arquitectura múltiple (también conocida como lista de manifiestos o como "imagen de varios archivos"). Puede crear imágenes de arquitectura múltiple a partir de un único árbol de origen, con una etiqueta de imagen que incluya imágenes para las 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 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 las funciones según corresponda. Dado que una función se puede desplegar en diferentes arquitecturas, la función se debe basar en una imagen de arquitectura múltiple. Es su responsabilidad verificar que se pueda llamar correctamente a una función basada en una imagen de arquitectura múltiple en las arquitecturas x86 y Arm. Para que pueda hacerlo, le recomendamos que, además de crear dicha función en una aplicación con una unidad de arquitectura múltiple, también 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) y proporcione la arquitectura única o 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 (archivo múltiple)

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

Puede crear imágenes de arquitectura múltiple de diferentes maneras, entre ellas:

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

Tenga en cuenta que 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 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 en una aplicación con una unidad de arquitectura múltiple:

  1. Conéctese al entorno de desarrollo como desarrollador de funciones.
  2. Si aún no existe una aplicación adecuada con una unidad de arquitectura múltiple en la que crear la función, 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 y sus dependencias como una imagen de arquitectura múltiple de Docker, envíe 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 para desplegarla en una aplicación con una unidad única o de arquitectura múltiple. Para obtener más información sobre el uso del plugin buildx de Docker, consulte la documentación de Docker buildx 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 la 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 obtener información sobre 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 en la imagen de arquitectura múltiple.

  11. (Opcional) Cree una nueva función 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

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

Puede crear imágenes de arquitectura únicas de diferentes maneras, incluidas:

Al crear una función basada en una sola imagen de arquitectura, debe crear la función en una aplicación que tenga una unidad de arquitectura única 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 sola imagen de arquitectura al desplegar una función en una aplicación con una única unidad de arquitectura:

  1. Conéctese al entorno de desarrollo como desarrollador de funciones.
  2. Si aún no existe una aplicación adecuada con una única unidad de arquitectura en la que crear la función, 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 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 -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 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.