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:
- Cree una aplicación y seleccione una unidad para la aplicación que soporte la arquitectura en la que desea ejecutar la función. Consulte Selección de una única arquitectura o unidad de aplicación de arquitectura múltiple en la que ejecutar una función.
- Cree una imagen que contenga las dependencias necesarias (imágenes secundarias) para la arquitectura en la que desea ejecutar la función. Consulte Creación de imágenes de arquitectura múltiple (arquitectura múltiple) y Creación de imágenes de arquitectura única.
- Cree la función en función de la imagen que haya creado, en la aplicación con la unidad adecuada. Consulte Creación de funciones.
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:
- con la CLI de Fn Project (para obtener más información, consulte Using the Fn Project CLI to build a multi-architecture image (recommended))
- uso de Docker Buildx (para obtener más información, consulte Uso del plugin buildx de Docker para crear una imagen de arquitectura múltiple)
- uso de Podman
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.
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:
- Conéctese al entorno de desarrollo como desarrollador de funciones.
- 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.
- Si aún no ha inicializado la función, siga las instrucciones de Using Fn Project CLI Commands para inicializar la función ahora.
- 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:
- Conéctese al entorno de desarrollo como desarrollador de funciones.
- En una ventana de terminal, cree un directorio en el que almacenar funciones. Por ejemplo:
mkdir helloworld-python-dir
- Cambie el directorio al directorio creado recientemente. Por ejemplo:
cd helloworld-python-dir
- 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.
- Cree un nuevo archivo denominado
Dockerfile
en el mismo directorio.Tenga en cuenta que debe asignar al archivo el nombre
Dockerfile
. - 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"]
- Guarde el archivo denominado
Dockerfile
. Ahora puede utilizar el archivoDockerfile
como archivo Dockerfile personalizado. - En el archivo func.yaml, cambie el valor del parámetro
runtime:
aruntime: 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
- 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 .
- 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.
- (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
- Al utilizar la consola, especifique
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:
- Con la CLI de Fn Project Consulte Uso de la CLI de Fn Project para crear una sola imagen de arquitectura.
- Uso del comando de creación de Docker. Consulte Uso del comando build de Docker para crear una única imagen de arquitectura.
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:
- Conéctese al entorno de desarrollo como desarrollador de funciones.
- 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.
- Si aún no ha inicializado la función, siga las instrucciones de Using Fn Project CLI Commands para inicializar la función ahora.
- 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.