Guía para usar Oracle Cloud Functions (serverless) en proyectos Node.js
Introducción
Oracle Cloud Functions es una plataforma serverless basada en Fn Project que permite ejecutar código en la nube sin preocuparse por la infraestructura subyacente. En esta guía detallada aprenderás a configurar tu entorno, crear, probar y desplegar funciones escritas en Node.js, además de aplicar buenas prácticas de seguridad y optimización de costes.
1. Requisitos Previos
- Cuenta activa en Oracle Cloud.
- Node.js (versión LTS recomendada) instalado localmente.
- OCI CLI (documentación).
- Fn CLI (Fn Project).
- Conocimientos básicos de JavaScript/Node.js y terminal.
2. Configuración del Entorno
2.1. Instalar y configurar OCI CLI
Descarga e instala la OCI CLI siguiendo las instrucciones oficiales. Luego, configura tu perfil:
oci setup config --profile DEFAULT
Completa los datos de tenancy OCID, user OCID, zona (region) y ruta de la clave privada.
2.2. Instalar y configurar Fn CLI
Instala Fn CLI (requiere Go o descarga binario):
brew install fn (macOS con Homebrew)
Luego inicializa tu entorno Fn:
fn init --runtime node myfnapp
3. Estructura de un Proyecto Fn en Node.js
Al inicializar un proyecto Fn obtendrás:
- func.yaml: Definición de la aplicación y funciones.
- package.json: Dependencias y scripts de Node.js.
- index.js: Punto de entrada de la función.
Ejemplo de func.yaml
version: 0.0.1
name: myfnapp
triggers:
http:
type: http
source: /hello
functions:
hello:
image: openfaas/node10-express:latest
annotations:
oracle.com/fn/project: myfnapp
memory: 128Mi
timeout: 30s
4. Despliegue en Oracle Cloud
Antes de desplegar, debes crear un compartment y configurar Fn en OCI:
oci fn application create --application-id --compartment-id --display-name myfnapp
Ahora, despliega tu aplicación y funciones:
| Comando | Descripción |
|---|---|
fn deploy --app myfnapp |
Despliega el servicio y funciones en OCI. |
fn list apps |
Lista aplicaciones registradas. |
5. Pruebas Locales
Puedes ejecutar tu función localmente con Docker:
fn start --app myfnapp
Luego llama a tu endpoint:
curl -X GET http://localhost:8080/t/myfnapp/hello
6. Buenas Prácticas
- Variables de entorno: Usa
fn configpara no incluir credenciales en el código. - Manejo de errores: Captura excepciones y devuelve respuestas claras.
- Modularidad: Separa lógica en módulos para facilitar tests.
- Optimización de paquete: Incluye solo dependencias necesarias, reduce peso de la imagen.
7. Seguridad y Gestión de Secretos
Utiliza OCI Vault para almacenar API keys o credenciales. Luego inyecta secretos con variables de entorno:
fn config myfnapp hello DB_PASSWORD ltsecret_ocidgt
8. Monitoreo y Logs
Activa Logging y Monitoring en tu compartment y consulta métricas desde Oracle Cloud Monitoring. Para ver logs:
oci logging search-log-events --log-group-id ltLOG_GROUP_OCIDgt --query-text fnapp:myfnapp
9. Optimización de Costes
- Configura memoria y timeout ajustados a tus necesidades.
- Utiliza OCI Free Tier si tu carga de trabajo es ligera.
- Apaga entornos de desarrollo cuando no estén en uso.
10. Ejemplo Completo de Función Hello World
// index.js
module.exports = async function (ctx) {
try {
const name = ctx.request.query.name Mundo
ctx.status = 200
ctx.body = { message: ¡Hola, {name}! }
} catch (err) {
ctx.status = 500
ctx.body = { error: Error interno en la función }
}
}
11. Resolución de Problemas Comunes
- Autenticación OCI CLI falla
- Verifica que la clave privada tenga permisos 600 y que los OCIDs sean correctos.
- Fn deploy da timeout
- Aumenta el timeout en func.yaml o revisa conectividad de red.
- Error de dependencias en build
- Revisa versión de Node.js y compatibilidad de módulos nativos.
Conclusión
Oracle Cloud Functions, basado en Fn Project, ofrece una solución potente y escalable para ejecutar funciones Node.js de forma serverless. Con esta guía dispones de un enfoque completo: desde la configuración del entorno local hasta la optimización en producción. Siguiendo estas recomendaciones podrás desarrollar servicios ágiles, seguros y eficientes en costes.
Leave a Reply