Functions: Introducción al uso de Cloud Shell

En este tutorial, utilizará una cuenta de Oracle Cloud Infrastructure para configurar el desarrollo de Oracle Functions con Cloud Shell. A continuación, crea una aplicación de función y una función.

Las tareas clave incluyen cómo:

  • Configurar un token de autenticación.
  • Recopilar la información necesaria.
  • Configurar una VCN.
  • Iniciar sesión en OCI Registry (OCIR).
  • Configurar Cloud Shell para desplegar funciones.
  • Configurar el contexto de Fn.
  • Crear una aplicación para la función de Oracle.
  • Crear una función.
  • Desplegar su función.
  • Probar su función.
En las imágenes se muestran los componentes de OCI utilizados para ejecutar Oracle Functions.

Para obtener información adicional, consulte:

1. Recopilación de la información necesaria

Recopile toda la información necesaria para completar el tutorial.

Recopilación de la información de región y registro

Prepare la información que necesita de la consola de OCI.

  1. Busque el identificador de región y la clave de región en Regiones y dominios de disponibilidad.

    Ejemplo: us-ashburn-1 y iad para Ashburn.

  2. Cree un nombre de proyecto de registro para almacenar las imágenes de función en OCI Registry (OCIR).

    Al publicar una función, se crea una imagen de Docker en OCIR. El nombre de su proyecto de OCIR se antepone a las imágenes de su función para facilitar su búsqueda. Por ejemplo, con:

    • Nombre del proyecto de registro: my-func-prj
    • Nombre de función: node-func

    La imagen de función se almacenará en OCIR en: my-func-prj/node-func

Creación o selección de un compartimento

Para crear un compartimento, consulte Creación de un compartimento. Después de crear el compartimento, guarde el OCID del compartimento.

Para obtener el OCID de compartimento de un compartimento existente:

  1. Abra el menú de navegación y haga clic en Identidad y seguridad. En Identidad, haga clic en Servicios.
  2. Seleccione el compartimento.
  3. Haga clic en el enlace Copiar del campo OCID.
Creación de un token de autorización

Crea un token de autorización para conectarse a OCI Registry. Para crear un token de autorización:

  1. En el menú de navegación , seleccione el menú Perfil Icono de menú de perfil y, a continuación, seleccione Configuración de usuario o Mi perfil, según la opción que vea.
  2. Haga clic en Tokens de autenticación.
  3. Haga clic enGenerar token.
  4. Asígnele una descripción.
  5. Haga clic enGenerar token.
  6. Copy el token y save.
    Nota

    Asegúrese de guardar el token justo después de crearlo. No tendrá acceso a él más adelante.
Recopilación de su información

Recopile toda la información necesaria para completar el tutorial. Copie la siguiente información en el bloc de notas.

  1. Región: <region-identifier>

    Ejemplo: us-ashburn-1.

  2. clave de región: <region-key>

    Ejemplo: iad.

  3. Nombre del proyecto de Registry: <your-project-name>

    Ejemplo: my-func-prj.

  4. ID de compartimento: <compartment-id>

    Ejemplo: ocid1.compartment.oc1.aaaaaaa...

  5. Token de autenticación: <auth-token>

    Ejemplo: ABC.1aBC...

  6. Nombre de arrendamiento: <tenancy-name>

    En su avatar de usuario, ejemplo: mytenancyname

  7. OCID de arrendamiento: <tenancy-ocid>

    En su avatar de usuario, vaya a Arrendamiento: <su arrendamiento> y copie el OCID, ejemplo: ocid1.tenancy.oc1.aaaaaaa...

  8. Usuario: <user-name>

    En su avatar de usuario.

2. Creación de su red virtual en la nube (VCN)

Configure una VCN para conectar su instancia de Linux a Internet.

Configuración de la VCN

Para configurar la red virtual en la nube, realice los siguientes pasos.

  1. Haga clic en el icono de Oracle Cloud para ir a la página de llegada principal.
    • Haga clic en Iniciar recursos.
    • Seleccione Configurar una red con un asistente.
  2. En el flujo de trabajo del asistente de inicio de VCN, seleccione Create VCN with Internet Connectivity y, a continuación, haga clic en Start VCN Wizard.
  3. En el cuadro de diálogo de configuración, rellene el nombre de la VCN de la VCN. El compartimento ya está definido en el último compartimento en el que estaba trabajando o, si es la primera vez, en su valor por defecto <your-tenancy> (root).
  4. En la sección Configurar VCN y subredes, mantenga los valores por defecto para los bloques CIDR:
    • BLOQUE DE CIDR DE VCN: 10.0.0.0/16
    • BLOQUE DE CIDR DE SUBRED PÚBLICA: 10.0.0.0/24
    • BLOQUE DE CIDR DE SUBRED PRIVADA: 10.0.1.0/24
    Nota

    Tenga en cuenta que las subredes públicas y privadas tienen diferentes direcciones de red.
  5. En Resolución DNS, desmarque Usar los nombres de host de DNS en esta VCN.
  6. Haga clic en Siguiente.

    Se muestra el cuadro de diálogo de configuración Crear una VCN con conexión a Internet (no aquí) para confirmar todos los valores que acaba de introducir.

  7. Haga clic en Crear para crear la VCN.

    Se muestra el cuadro de diálogo Creación de recursos (no se muestra aquí) en el que aparecen todos los componentes de VCN que se están creando.

  8. Haga clic en Ver red virtual en la nube para ver la nueva VCN.

    Se muestra la nueva VCN. Ahora debe agregar una regla de seguridad para permitir conexiones HTTP en el puerto 80, el puerto por defecto para las aplicaciones.

  9. Con la nueva VCN mostrada, haga clic en el enlace de la subred pública.

    La información de subred pública se muestra con las listas de seguridad en la parte inferior de la página. Debe haber un enlace a la lista de seguridad por defecto para su VCN.

  10. Haga clic en el enlace Lista de seguridad por defecto.

    Se muestran las reglas de entrada por defecto para su VCN.

  11. Haga clic en Agregar reglas de entrada.

    Se muestra un cuadro de diálogo Agregar reglas de entrada.

  12. Rellene la regla de entrada con la siguiente información. Una vez introducidos todos los datos, haga clic en Agregar reglas de entrada.

    Rellene la regla de entrada de la siguiente forma:

    • Sin estado: marcada
    • Tipo de origen: CIDR
    • CIDR de origen: 0.0.0.0/0
    • Protocolo IP: TCP
    • Rango de puertos de origen: (déjelo en blanco)
    • Rango de puertos de destino: 80
    • Descripción: VCN para aplicaciones

    Después de hacer clic en Agregar reglas de entrada, se permiten conexiones HTTP a su subred pública.

Nota

Para abrir un puerto diferente, sustituya 80 en el último paso por el número de puerto.
Ha creado correctamente una VCN que hace que sus aplicaciones estén disponibles desde Internet.

3. Conexión a OCI Registry

A continuación, conecte Docker a OCI Registry (OCIR).

Conexión de Docker a OCIR
  1. Obtenga la información que ha recopilado anteriormente.
  2. Abra una ventana de terminal.
  3. Inicie sesión en OCIR:
    docker login <region-key>.ocir.io

    Se le solicita su nombre de inicio de sesión y contraseña.

    • Usuario: <tenancy-name>/<user-name>
    • Contraseña: <auth-token>

Ha conectado su instancia a OCIR.

4. Configuración de Functions

Para utilizar Oracle Functions, debe configurar el contexto de la aplicación Fn. El contexto almacena los valores necesarios para conectarse al servicio Oracle Functions. Los comandos de cliente Fn se utilizan para agregar los datos de configuración necesarios.

Configuración del contexto de Fn para Cloud Shell

Necesita la información que haya recopilado anteriormente. Utilice los comandos del cliente Fn para configurar Fn.

  1. Abra la instancia de Cloud Shell.
  2. Obtenga una lista de contextos de Fn.

    fn list context

    Verá contextos para default y <your-region-identifier>.

  3. Seleccione el contexto denominado <your-region-identifier>.

    Por ejemplo: fn use context us-phoenix-1

  4. Enumere los contextos de Fn para asegurarse de que se ha seleccionado <your-region-identifier>. (Tiene un asterisco junto a él).
  5. Defina el compartimento para Oracle Functions.

    Ejemplo: fn update context oracle.compartment-id ocid1.compartment.oc1..aaaaaaaarvdfa72n...

  6. Defina la URL del repositorio de Registry.

    Comando de ejemplo: fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<registry-project-name>

    Ejemplo: fn update context registry phx.ocir.io/my-tenancy/my-func-prj

Nota

Visualización/edición del contexto

Los archivos de contexto de Fn están en el directorio ~/.fn/contexts. Cada contexto se almacena en un archivo .yaml. Por ejemplo, el archivo us-phoenix-1.yaml puede tener un aspecto similar a:

api-url: https://functions.us-phoenix-1.oci.oraclecloud.com
oracle.compartment-id: ocid1.compartment.oc1..aaaaaaaarvdfa72n...
provider: oraclecs
registry: phx.ocir.io/my-tenancy/my-func-prj
                

Puede editar el archivo directamente con un editor si es necesario.

Para obtener una explicación detallada de cada paso, consulte: Inicio rápido de Oracle Functions en Cloud Shell

Ahora ha configurado el contexto de Fn para su instancia.

5. Creación y despliegue de una función

Con la configuración completa, cree y despliegue una función.

Creación de una aplicación

Una aplicación es el contenedor de almacenamiento principal para las funciones. Cada función debe tener una aplicación para el despliegue. Para crear una aplicación, siga estos pasos.

  1. Abra el menú de navegación y haga clic en Servicios para desarrolladores. En Funciones, haga clic en Aplicaciones.
  2. Haga clic en Crear aplicación.

    Rellene los datos del formulario.

    • Nombre: <nombre-de-su-aplicación>
    • VCN: <su-VCN>
    • Subredes: <subred-pública> o <subred-privada>
    Nota

    Se puede utilizar una subred pública o privada. Seleccione una.
  3. Haga clic en Crear.

Se crea la aplicación.

Selección de un lenguaje

Seleccione uno de los siguientes lenguajes para crear y desplegar una función. Si lo desea, puede realizar las tres acciones.

Creación y despliegue de una función Java

Con la aplicación creada, despliegue una función Java. Realice estos pasos para crear una función "Hello World":

Nota

Asegúrese de que Java 8+ está instalado para realizar estos pasos.
  1. Abra Cloud Shell.
  2. Cree un directorio para almacenar sus funciones y cambie a ese directorio.
    mkdir my-dir-name
    cd my-dir-name                        
                        
  3. Cree una función "Hello World" de Java con Fn.
    fn init --runtime java my-func-name

    Con este comando se crea un directorio denominado my-func-name con varios archivos incluidos en él.

    • func.yaml: archivo de configuración de la función.
    • pom.xml: archivo de compilación de Maven.
    • src/main/java/com/example/fn/HelloFunction.java: archivo de función real.
  4. Cambie al directorio.
  5. Despliegue la función.
    fn -v deploy --app your-app-name

    Se muestran varios mensajes a medida que se crean las imágenes de Docker, se transfieren a OCIR y, finalmente, se despliegan en Oracle Functions.

  6. Llame a la función.
    fn invoke your-app-name my-func-name

    Devuelve: Hello, world!

  7. Llame a la función con un parámetro.
    echo -n "Bob" | fn invoke your-app-name my-func-name

    Devuelve: Hello, Bob!

  8. Si desea conectarse a la función desde la red, debe obtener el punto final de llamada de la función. Para buscar el punto final de llamada, utilice el comando inspect.
    fn inspect function your-app-name my-func-name
  9. Examine los resultados del comando inspect. Observe que la URL de punto final de llamada se incluye en la sección annotations de los datos JSON devueltos.
    {
        "annotations": {
            "fnproject.io/fn/invokeEndpoint": "https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke",
            "oracle.com/oci/compartmentId": "ocid1.compartment.oc1..aaaaaaaa...",
            "__comment":"Remaining output left out for brevity",
    
  10. Utilice la URL devuelta de inspect para llamar a la función. Debido a que las funciones requieren que se firmen digitalmente las solicitudes, se utiliza el comando oci raw-request para este ejemplo.
    oci raw-request --http-method POST --request-body "" --target-uri https://https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke

    El comando devuelve:

    {
        "data": "Hello, world!",
        "headers": {
            "Content-Length": "13",
            "Content-Type": "text/plain",
            "Date": "Tue, 20 Oct 2020 00:53:08 GMT",
            "Fn-Call-Id": "11111111111",
            "Fn-Fdk-Version": "fdk-java/1.0.111 (jvm=OpenJDK 64-Bit Server VM, jvmv=11.0.8)",
            "Opc-Request-Id": "1111111/11111"
        },
        "status": "200 OK"
    }
    Nota

    Puede conectarse a un punto final de Functions mediante herramientas como curl. Sin embargo, debido a consideraciones de seguridad, el script es complejo. Como alternativa, utilice el comando raw-request de la CLI de OCI. Consulte Llamada a funciones: Envío de una solicitud firmada a una función con raw-request.

Ha desplegado y probado correctamente una función de Java.

Creación y despliegue de una función de Python

Con la aplicación creada, despliegue una función de Python. Siga estos pasos para crear una función "Hello World" de Python.

  1. Abra Cloud Shell.
  2. Cree un directorio para almacenar sus funciones y cambie a ese directorio.
    mkdir my-dir-name
    cd my-dir-name                        
                        
  3. Cree una función "Hello World" de Python con Fn.
    fn init --runtime python my-func-name

    Con este comando se crea un directorio denominado my-func-name con varios archivos incluidos en él.

    • func.yaml: archivo de configuración de la función.
    • requirements.txt: lista de bibliotecas de Python necesarias.
    • func.py: archivo de función real.
  4. Cambie al directorio.
  5. Despliegue la función.
    fn -v deploy --app your-app-name

    Se muestran varios mensajes a medida que se crean las imágenes de Docker, se transfieren a OCIR y, finalmente, se despliegan en Oracle Functions.

  6. Llame a la función.
    fn invoke your-app-name my-func-name

    Devuelve: {"message": "Hello World"}

  7. Llame a la función con un parámetro.
    echo -n '{"name":"Bob"}' | fn invoke your-app-name my-func-name

    Devuelve: {"message": "Hello Bob"}

  8. Si desea conectarse a la función desde la red, debe obtener el punto final de llamada de la función. Para buscar el punto final de llamada, utilice el comando inspect.
    fn inspect function your-app-name my-func-name
  9. Examine los resultados del comando inspect. Observe que la URL de punto final de llamada se incluye en la sección annotations de los datos JSON devueltos.
    {
        "annotations": {
            "fnproject.io/fn/invokeEndpoint": "https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke",
            "oracle.com/oci/compartmentId": "ocid1.compartment.oc1..aaaaaaaa...",
            "__comment":"Remaining output left out for brevity",
    
  10. Utilice la URL devuelta de inspect para llamar a la función. Debido a que las funciones requieren que se firmen digitalmente las solicitudes, se utiliza el comando oci raw-request para este ejemplo.
    oci raw-request --http-method POST --request-body "" --target-uri https://https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke

    El comando devuelve:

    {
        "data": "Hello World",
        "headers": {
            "Content-Length": "24",
            "Content-Type": "application/json",
            "Date": "Tue, 20 Oct 2020 00:53:08 GMT",
            "Fn-Call-Id": "11111111111",
            "Fn-Fdk-Version": "fdk-python/0.1.18",
            "Opc-Request-Id": "1111111/11111"
        },
        "status": "200 OK"
    }
    Nota

    Puede conectarse a un punto final de Functions mediante herramientas como curl. Sin embargo, debido a consideraciones de seguridad, el script es complejo. Como alternativa, utilice el comando raw-request de la CLI de OCI. Consulte Llamada a funciones: Envío de una solicitud firmada a una función con raw-request.

Ha desplegado y probado correctamente una función de Python.

Creación y despliegue de una función de Node

Con la aplicación creada, despliegue una función de Node. Realice estos pasos para crear una función "Hello World" de Node:

Nota

Asegúrese de que Node.js 10+ está instalado para realizar estos pasos.
  1. Abra Cloud Shell.
  2. Cree un directorio para almacenar sus funciones y cambie a ese directorio.
    mkdir my-dir-name
    cd my-dir-name                        
                        
  3. Cree una función "Hello World" de Node con Fn.
    fn init --runtime node my-func-name

    Con este comando se crea un directorio denominado my-func-name con varios archivos incluidos en él.

    • func.yaml: archivo de configuración de la función.
    • package.json: archivo de compilación de NPM.
    • func.js: archivo de función real.
  4. Cambie al directorio.
  5. Despliegue la función.
    fn -v deploy --app your-app-name

    Se muestran varios mensajes a medida que se crean las imágenes de Docker, se transfieren a OCIR y, finalmente, se despliegan en Oracle Functions.

  6. Llame a la función.
    fn invoke your-app-name my-func-name

    Devuelve: {"message":"Hello World"}

  7. Llame a la función con un parámetro.
    echo -n '{"name":"Bob"}' | fn invoke your-app-name my-func-name

    Devuelve: {"message":"Hello Bob"}

  8. Si desea conectarse a la función desde la red, debe obtener el punto final de llamada de la función. Para buscar el punto final de llamada, utilice el comando inspect.
    fn inspect function your-app-name my-func-name
  9. Examine los resultados del comando inspect. Observe que la URL de punto final de llamada se incluye en la sección annotations de los datos JSON devueltos.
    {
        "annotations": {
            "fnproject.io/fn/invokeEndpoint": "https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke",
            "oracle.com/oci/compartmentId": "ocid1.compartment.oc1..aaaaaaaa...",
            "__comment":"Remaining output left out for brevity",
    
  10. Utilice la URL devuelta de inspect para llamar a la función. Debido a que las funciones requieren que se firmen digitalmente las solicitudes, se utiliza el comando oci raw-request para este ejemplo.
    oci raw-request --http-method POST --request-body "" --target-uri https://https://aaaaaaaaa.us-ashburn-1.functions.oci.oraclecloud.com/1111111/functions/ocid1.fnfunc.oc1.iad.aaaaaaaaa.../actions/invoke

    El comando devuelve:

    {
        "data": "Hello World",
        "headers": {
            "Content-Length": "23",
            "Content-Type": "application/json",
            "Date": "Tue, 22 Oct 2020 00:53:08 GMT",
            "Fn-Call-Id": "11111111111",
            "Fn-Fdk-Version": "fdk-node/0.1.18 (njsv=v11.15.0)",
            "Opc-Request-Id": "1111111/11111"
        },
        "status": "200 OK"
    }
    Nota

    Puede conectarse a un punto final de Functions mediante herramientas como curl. Sin embargo, debido a consideraciones de seguridad, el script es complejo. Como alternativa, utilice el comando raw-request de la CLI de OCI. Consulte Llamada a funciones: Envío de una solicitud firmada a una función con raw-request.

Ha desplegado y probado correctamente una función de Node.

6. Revisión de la información de la función

Después de ejecutar sus funciones, la información sobre estas está disponible en la consola de OCI.

Visualización de imágenes de función en OCIR

Cuando se despliega, la función se carga y se almacena en OCIR. Puede navegar a OCIR y examinar las imágenes de la función.

  1. Abra el menú de navegación y haga clic en Servicios para desarrolladores. En Contenedores y artefactos, haga clic en Container Registry.
  2. Busque <your-repository-project-name>.
  3. Bajo el nombre del proyecto, puede ver una entrada para cada función desplegada.
  4. Haga clic en el enlace de cada imagen cuya información desea ver.
Visualización de la información de ejecución de la función

Después de ejecutar una función, puede mostrar métricas para esa función.

  1. Abra el menú de navegación y haga clic en Servicios para desarrolladores. En Funciones, haga clic en Aplicaciones. Las aplicaciones aparecen en la página.
  2. Haga clic en el enlace a la aplicación que ha creado.
  3. Haga clic en el enlace a la función que desea examinar.

    Se muestra información de métrica sobre la función.

Activación y visualización de la información de registro

Para activar el registro de una aplicación, siga estos pasos.

  1. Abra el menú de navegación y haga clic en Servicios para desarrolladores. En Funciones, haga clic en Aplicaciones. Las aplicaciones aparecen en la página.
  2. Haga clic en el enlace a la aplicación que ha creado.
  3. En la parte izquierda de la página de la aplicación, haga clic en el enlace Logs.
  4. Haga clic en Desactivado para activar el registro para la aplicación.
  5. Se muestra el cuadro de diálogo Activar log. Rellene la siguiente información:
    • Compartimento: <nombre de su compartimento>
    • Grupo de logs: acepte el valor por defecto Auto-Create a Default Log Group
    • Nombre de log: <take-default>
    • Retención de log: <take-default>
    • Haga clic en Activar log.

      Espere un momento hasta que se cree el log.

Para ver el log, haga clic en el enlace del nombre de log creado en los pasos anteriores.