Cómo trabajar con aplicaciones en Code Engine
Una aplicación, o app, ejecuta el código para servir solicitudes HTTP. Además de las solicitudes HTTP tradicionales, IBM Cloud® Code Engine también da soporte a aplicaciones que utilizan WebSockets como protocolo de comunicaciones. El número de instancias en ejecución de una aplicación se amplía o reduce automáticamente (hasta cero) en función de las solicitudes entrantes y de los ajustes de configuración. Una app contiene una o varias revisiones. Una revisión representa una versión inmutable de las propiedades de configuración de la app. Cada actualización de una propiedad de configuración de la app crea una nueva revisión de la app.
Antes de empezar
- Si desea utilizar la consola Code Engine, vaya a Code Engine overview.
- Si desea utilizar la CLI, configure el entorno de la CLI de Code Engine.
- Planifique y elija su enfoque para que el código se ejecute como un componente de aplicación de Code Engine.
- Asegúrese de que la app sigue la metodología de la app de 12 factores.
Para ver las características de seguridad proporcionadas con Code Engine, consulte Code Engine y la seguridad.
Code Engine proporciona métodos de definición de recursos personalizados (CRD - Custom Resource Definition). Para obtener más información, consulte Servicios de métodos CRD.
¿No está seguro de qué tipo de carga de trabajo crear en Code Engine? Consulte Planificación de Code Engine.
¿Cómo puedo hacer que mi código se ejecute como un componente de aplicación de Code Engine?
Tanto si su código existe como fuente en un archivo local o en un repositorio de Git, como si su código es una imagen de contenedor que existe en un registro público o privado, Code Engine le proporciona una forma racionalizada de ejecutar su código como una aplicación.
-
Si dispones de una imagen de contenedor, según el estándar Open Container Initiative(OCI), entonces sólo necesitas proporcionar una referencia a la imagen, que apunte a la ubicación de tu registro de contenedores cuando crees y despliegues tu aplicación. Puede desplegar la app con una imagen en un registro público o registro privado.
-
Si está empezando con un código fuente que reside en un repositorio de Git, puede dejar que Code Engine se encargue de compilar la imagen desde el código fuente y desplegar la aplicación con una única operación. En este caso de ejemplo, Code Engine carga la imagen en IBM Cloud® Container Registry. Para obtener más información, consulte Despliegue de la aplicación a partir del código fuente del repositorio. Si desea tener más control sobre la compilación de la imagen, puede elegir compilar la imagen con Code Engine antes de crear y desplegar la aplicación.
-
Si está empezando con un código fuente que reside en una estación de trabajo local, puede dejar que Code Engine se encargue de compilar la imagen desde el código fuente y desplegar la aplicación con un único mandato de CLI. En este caso de ejemplo, Code Engine carga la imagen en IBM Cloud® Container Registry. Para obtener más información, consulte Despliegue de la aplicación a partir del código fuente local con la CLI. Si desea tener más control sobre la compilación de la imagen, puede elegir compilar la imagen con Code Engine antes de crear y desplegar la aplicación.
Después de desplegar la aplicación, también puede actualizar la aplicación desplegada utilizando cualquier de las formas anteriores, independientemente de cómo haya creado o actualizado previamente la aplicación.
Cuando despliega la aplicación, se descarga y se despliega la última versión de la imagen de contenedor referenciada, a menos que se especifique una etiqueta para la imagen. Si se especifica una etiqueta para la imagen, se utiliza la imagen etiquetada para el despliegue.
La imagen asociada a la revisión específica de la aplicación tiene un resumen único del registro del contenedor y Code Engine utiliza este resumen durante toda la vida de la revisión de la aplicación. Si crea una versión más reciente de una imagen con la misma etiqueta que la imagen original, la imagen original se sobrescribe en el registro de contenedor y se descodifica. La imagen más reciente está etiquetada, y esta imagen más reciente tiene un resumen diferente. Su aplicación Code Engine no utiliza esta imagen más nueva, porque la imagen más nueva tiene un digest diferente al de la imagen a la que hace referencia la revisión de la aplicación. Code Engine puede seguir creando nuevas instancias de la revisión de la aplicación siempre que la imagen no etiquetada, a la que se hacía referencia originalmente, siga existiendo. Para más información, consulte ¿Por qué no puede Code Engine extraer una imagen?
La dirección URL predeterminada para las aplicaciones tiene el formato https://<appname>.<uuid>.<region>.codeengine.appdomain.cloud, donde appname es el nombre de su aplicación, uuid es
el identificador único generado automáticamente y region es la región en la que reside su proyecto Code Engine. La parte UUID de URL de una aplicación tiene el formato aaaabbbbccc. La aplicación generada automáticamente
URL persiste durante el ciclo de vida del proyecto para su aplicación.
Para obtener más información sobre los puntos finales para acceder a las aplicaciones por región, consulte Puntos finales deCode Engine para acceder a las aplicaciones.
¿Qué necesito saber sobre los puertos para apps en Code Engine?
De forma predeterminada, Code Engine presupone que las apps escuchan las conexiones entrantes en el puerto 8080. Además, Code Engine establece la variable de entorno PORT en el valor del puerto en el que se espera que
escuche la aplicación. Si su aplicación necesita escuchar en un puerto distinto del puerto 8080, despliegue su aplicación desde la consola y especifique el puerto correcto o utilice la opción --port en el comando
app create del comando Para obtener información adicional sobre las variables de entorno configuradas por Code Engine, consulte Variables de entorno inyectadas automáticamente.
Los puertos siguientes están reservados por Code Engine: 8022, 8008, 8012, 9090, 9091 y 15090. Solo se puede exponer un puerto como puerto de escucha.
Las conexiones entrantes a Code Engine a través de HTTP en Internet utilizan el puerto 80. Las conexiones entrantes a Code Engine a través de HTTPS en Internet utilizan el puerto 443
Si una exploración de puertos muestra más puertos abiertos, consulte ¿Por qué mi exploración de puertos muestra más puertos abiertos de los esperados?
Consideraciones para el manejo de HTTP
Cuando trabaja con aplicaciones (o trabajos), es útil tener en cuenta el manejo básico de HTTP en Code Engine.
-
Para las conexiones de aplicaciones entrantes que utilizan HTTP, los aspectos de seguridad de capa de transporte (TLS) los gestiona automáticamente Code Engine fuera del código de aplicación. El servidor HTTP de la aplicación debe ocuparse de la conectividad HTTP y no de la conectividad HTTPS. En concreto, Code Engine utiliza Cloud Internet Services (CIS) en IBM Cloud, que se basa en CloudFlare, como sistema de prevención de intrusiones (IPS) para la protección DNS y DDOS en la capa 4. La conexión TCP/IP que se establece en el IPS es propiedad y está gestionada por Cloudflare. Para obtener más información, consulte Documentación de Cloudflare.
-
Las conexiones de Internet que están enlazadas a aplicaciones Code Engine se redireccionan automáticamente a utilizar HTTPS.
-
Las conexiones de salida de las aplicaciones a otras aplicaciones de Code Engine están protegidas automáticamente por TLS. Code Engine gestiona automáticamente esta conectividad, por lo que el protocolo (o URL) que se utiliza es
HTTPy noHTTPS. -
Las conexiones de salida de aplicaciones a aplicaciones que no son de Code Engine, como Internet, utilizan
HTTPoHTTPSsegún el protocolo especificado en el código de aplicación o URL. -
Las conexiones de salida de trabajos por lotes utilizan el protocolo
HTTPoHTTPSque se especifica en el código o URL del trabajo. Este comportamiento incluye las conexiones de trabajos por lotes a aplicaciones de Code Engine.
Opciones para la visibilidad de una aplicación Code Engine
Con Code Engine, puede determinar el nivel adecuado de visibilidad para su aplicación definiendo los puntos finales, o mapeos de dominio del sistema que están disponibles para recibir solicitudes.
Cada aplicación tiene un mapeo interno del dominio del sistema que es visible para todos los componentes dentro del mismo proyecto Code Engine, pero no fuera del proyecto. Además de la correlación interna del dominio del sistema, puede elegir que la aplicación sea visible para Internet público o para la red privada de IBM Cloud.
Para una visibilidad pública o privada, la aplicación se expone en un endpoint HTTPS. Para obtener más información sobre el certificado TLS que se utiliza, consulte Certificados TLS para proyectos Code Engine.
Puede desplegar su aplicación con los siguientes niveles de visibilidad:
| Valor | Descripción |
|---|---|
| interno(proyecto) | Una aplicación con este valor puede recibir solicitudes de componentes en el mismo proyecto de Code Engine. Establecer un punto final interno (del proyecto) significa que su aplicación no es accesible desde la Internet pública y que el acceso a la red sólo es posible desde otros componentes de Code Engine que se estén ejecutando dentro del mismo proyecto Code Engine. Este punto final siempre está habilitado. |
| public | Una aplicación con este valor está expuesta a Internet y a so proyecto de Code Engine. Establecer un punto final público significa que la aplicación puede recibir solicitudes del Internet público o de componentes de su proyecto de Code Engine. Este es el valor predeterminado. |
| private | Una aplicación con este valor está expuesta a la red privada de IBM Cloud y a su proyecto de Code Engine. Configurar un endpoint privado significa que tu aplicación no es accesible desde la Internet pública y que el acceso a la red sólo es posible desde otros servicios de IBM Cloud utilizando Endpoints Privados Virtuales (VPE) o componentes de Code Engine que se ejecuten en el mismo proyecto. |
Puede establecer los valores de punto final para la visibilidad de una aplicación desde la consola o con la CLI al crear y desplegar o actualizar la aplicación.
Despliegue de la aplicación con un punto final público
Cuando se despliega una aplicación, por defecto, la aplicación se despliega de forma que pueda recibir peticiones de la Internet pública o de componentes dentro del mismo proyecto Code Engine. En este caso, la aplicación se despliega con un punto final público.
Despliegue de la app con un punto final privado
Puede establecer la visibilidad de punto final para su aplicación de modo que se despliegue con un punto final privado. Configurar un endpoint privado significa que tu aplicación no es accesible desde la Internet pública y que el acceso a la red sólo es posible desde otros servicios IBM Cloud desde endpoints privados virtuales (VPE) o componentes Code Engine que se estén ejecutando en el mismo proyecto (cluster-local).
Por ejemplo, si la solución consta de un componente que se ejecuta en un clúster Kubernetes de IBM Cloud Kubernetes Service dentro de su propio punto final privado virtual y desea acceder a la aplicación de Code Engine desde la red privada de IBM Cloud, puede establecer la visibilidad de la aplicación como privada. Cuando la visibilidad de la aplicación se establece en privada, la aplicación no es accesible a través de la Internet pública. La aplicación sigue siendo accesible desde otras aplicaciones dentro del proyecto.
Puede desplegar la aplicación con un punto final privado para que la aplicación solo esté expuesta a través de la red privada IBM Cloud y no esté expuesta a Internet externo. La aplicación sigue siendo accesible a través de componentes compartidos desde dentro de la red interna y es necesario proteger el punto final de la aplicación.
Con la CLI, establezca la visibilidad de punto final para la aplicación de forma que se despliegue con un punto final privado utilizando la opción --visibility=private en el mandato app create o app update. Puede obtener los URL disponibles para la aplicación que reflejen la definición de punto final utilizando el mandato
app get.
Desde la consola, establezca la visibilidad de los puntos finales para su aplicación utilizando la configuración Puntos finales al crear su aplicación. Una vez desplegada la app, puede ver y modificar estos valores de correlación de dominio del sistema en la pestaña Correlaciones de dominio de la página de la aplicación.
Para obtener más información sobre la conexión a través de redes privadas, consulte Utilización de puntos finales privados virtuales con Code Engine.
Despliegue de la aplicación con un punto final de proyecto
Puede configurar la visibilidad del endpoint para su aplicación de forma que se despliegue con un endpoint interno (del proyecto). Establecer un punto final sólo para el proyecto significa que su aplicación no es accesible desde la Internet pública y que el acceso a la red sólo es posible desde otros componentes de Code Engine que se estén ejecutando dentro del mismo proyecto Code Engine. Este punto final siempre está habilitado. Las aplicaciones siguen siendo accesibles a través de componentes compartidos y, por lo tanto, deben protegerse.
Por ejemplo, si la solución consta de varias aplicaciones dentro de un proyecto, puede configurar la solución de modo que solo una de esas aplicaciones sea visible desde Internet para que maneje el tráfico entrante. Esta aplicación de cara al público puede delegar el trabajo en otras aplicaciones de la solución de forma que no tengan que ser visibles desde Internet.
Con la CLI, establezca la visibilidad de punto final de la aplicación de forma que se despliegue con un punto final de proyecto utilizando la opción --visibility=project en el mandato app create o app update. Puede obtener los URL disponibles para la aplicación que reflejen la definición de punto final utilizando el mandato
app get.
Desde la consola, establezca la visibilidad de los puntos finales para su aplicación utilizando la configuración Puntos finales al crear su aplicación. Una vez desplegada la app, puede ver y modificar estos valores de correlación de dominio del sistema en la pestaña Correlaciones de dominio de la página de la aplicación.
Opciones de despliegue de una aplicación Code Engine
Obtenga información sobre las opciones que se pueden especificar cuando se despliega la app. Tenga en cuenta que las opciones pueden variar entre la consola y la CLI.
Memoria y CPU
Cuando se despliega la app, es posible especificar la cantidad de memoria y CPU que puede consumir la app. Estas cantidades pueden variar, dependiendo de si la app consumo muchos recursos de cálculo, de memoria o si están equilibradas.
De forma predeterminada, la aplicación tiene asignadas 4 G de memoria y 1 vCPU. Para obtener información adicional sobre la selección de memoria y CPU, consulte Combinaciones de memoria y CPU soportadas.
Despliegue de la app con mandatos y argumentos
Puede definir mandatos y argumentos para que su aplicación los utilice en el tiempo de ejecución.
Defina mandatos y argumentos para la aplicación añadiendo las opciones --cmd y --arg al mandato app create.
ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --cmd /myapp --arg --debug
Para obtener más información sobre el uso de cmd y arg, consulte Definición de mandatos y argumentos para las cargas de trabajo de Code Engine.
Creación y ejecución de la app con variables de entorno
Puede definir y establecer variables de entorno como pares de clave-valor que la aplicación puede utilizar en tiempo de ejecución.
Puede definir variables de entorno al crear la aplicación o al actualizar un trabajo existente desde la consola o con la CLI.
Para obtener más información sobre la definición de variables de entorno, consulte Cómo trabajar con variables de entorno.
Code Engine inyecta automáticamente determinadas variables de entorno en la app. Para obtener información adicional sobre las variables de entorno inyectadas automáticamente, consulte Variables de entorno inyectadas automáticamente.
Creación y ejecución de la app cuando se utilizan secretos y mapas de configuración
En Code Engine, la aplicación puede consumir los secretos y mapas de configuración utilizando variables de entorno.
Tanto los secretos como los mapas de configuración son pares de clave-valor. Cuando se correlacionan con variables de entorno, las relaciones NAME=VALUE se establecen de tal forma que el nombre de la variable de entorno corresponde
a la "clave" de cada entrada de esos mapas, y el valor de la variable de entorno es el "valor" de esa clave.
La aplicación puede utilizar variables de entorno para hacer referencia completa a un mapa de configuración (o secreto) o a claves individuales de referencia en un mapa de configuración (o secreto).
Para obtener más información, consulte cómo hacer referencia a secretos utilizando variables de entorno y cómo hacer referencia a mapas de configuración utilizando variables de entorno.
Consideraciones sobre las cuotas de aplicación
Cuando trabaja con aplicaciones, funciones y trabajos por lotes, estos recursos se ejecutan en el contexto de un proyecto Code Engine. Las cuotas de recursos se definen por proyecto y se aplican límites para aplicaciones, funciones y trabajos por lotes.
Para obtener más información sobre los límites de Code Engine, consulte Límites y cuotas de Code Engine.
Próximos pasos
Ahora que está familiarizado con los conceptos clave de trabajar con aplicaciones de Code Engine, ¿está preparado para desplegar y trabajar con aplicaciones? Véase
- Despliegue de cargas de trabajo de app a partir de imágenes en un registro público.
- Despliegue de cargas de trabajo de app desde imágenes en IBM Cloud Container Registry.
- Despliegue de cargas de trabajo de app a partir de imágenes en un registro privado.
- Despliegue de su aplicación a partir del código fuente del repositorio.
- Despliegue de la app desde el código fuente local.
Para obtener más información sobre el trabajo con aplicaciones, consulte
- Cargas de trabajo de aplicación.
- Configuración del escalado de aplicaciones.
- Configuración de correlaciones de dominio personalizadas para la app.
- Integración de servicios de IBM Cloud con enlaces de servicio.
- Trabajar con variables de entorno, mapas de configuración y secretos.
- Suscripción a generadores de sucesos.
- Resolución de problemas de aplicaciones.