Ampliación de las plataformas Linux de Elastic Beanstalk - AWS Elastic Beanstalk

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ampliación de las plataformas Linux de Elastic Beanstalk

Las plataformas Linux de AWS Elastic Beanstalk cuentan con muchas funcionalidades listas para usar diseñadas para desarrollar y ejecutar la aplicación. Si es necesario, puede ampliar las plataformas de diferentes maneras para configurar opciones, instalar software, agregar archivos y comandos de inicio, proporcionar instrucciones de compilación y ejecución, e incorporar scripts de inicialización que se ejecuten en varias etapas de aprovisionamiento de instancias de Amazon Elastic Compute Cloud (Amazon EC2) del entorno.

Algunas plataformas permiten personalizar el modo en que se crea o prepara la aplicación y permiten especificar los procesos que ejecutan la aplicación. Cada tema individual de la plataforma menciona específicamente Buildfile y/o Procfile si la plataforma es compatible. Busque su plataforma específica en Plataformas Elastic Beanstalk.

Para todas las plataformas de soporte, la sintaxis y la semántica son idénticas, y son como se describe en esta página. Los temas individuales de la plataforma mencionan el uso específico de estos archivos para crear y ejecutar aplicaciones en sus respectivos idiomas.

Buildfile

Si desea especificar un comando de compilación y configuración personalizado para la aplicación, coloque un archivo llamado Buildfile en el directorio raíz del origen de la aplicación. El nombre de archivo distingue entre mayúsculas y minúsculas. Utilice la siguiente sintaxis con el archivo Buildfile.

<process_name>: <command>

El comando del archivo Buildfile debe ajustarse a la siguiente expresión regular: ^[A-Za-z0-9_-]+:\s*[^\s].*$.

Elastic Beanstalk no monitoriza la aplicación que se ejecuta con un Buildfile. Utilice un archivo Buildfile con comandos que se ejecuten durante cortos periodos de tiempo y terminen después de completar las tareas. En el caso de los procesos de larga duración de la aplicación que no deben terminar, utilice en su lugar el archivo Procfile.

Todas las rutas de Buildfile son rutas relativas que hacen referencia a la raíz del paquete de código fuente. En el siguiente ejemplo de Buildfile, build.sh es un script de shell que se encuentra en la raíz del paquete de código fuente.

ejemplo Buildfile
make: ./build.sh

Si desea incluir pasos de compilación personalizados, le recomendamos que, en lugar de Buildfile, utilice enlaces de plataforma predeploy para todo excepto para los comandos más simples. Los enlaces de plataforma admiten secuencias de comandos más elaboradas y posibilitan una mejor administración de los errores. Los enlaces de plataforma se describen en la siguiente sección.

Procfile

Si desea especificar comandos personalizados para iniciar y ejecutar la aplicación, coloque un archivo llamado Procfile en el directorio raíz del código fuente de la aplicación. El nombre de archivo distingue entre mayúsculas y minúsculas. Utilice la siguiente sintaxis con el archivo Procfile. Puede especificar uno o varios comandos.

<process_name1>: <command1> <process_name2>: <command2> ...

Cada línea del archivo Procfile debe ajustarse a la siguiente expresión regular: ^[A-Za-z0-9_-]+:\s*[^\s].*$.

Utilice un archivo Procfile para procesos de aplicación de larga ejecución que no deberían salir. Elastic Beanstalk espera que los procesos del archivo Procfile se ejecuten de forma continua. Elastic Beanstalk monitoriza estos procesos y reinicia cualquier proceso que finalice. Para los procesos de corta ejecución, utilice Buildfile..

Todas las rutas de Procfile son rutas relativas que hacen referencia a la raíz del paquete de código fuente. En el siguiente ejemplo, Procfile define tres procesos. El primero, llamado web en el ejemplo, es la aplicación web principal.

ejemplo Procfile
web: bin/myserver cache: bin/mycache foo: bin/fooapp

Elastic Beanstalk configura el servidor proxy para reenviar solicitudes a su aplicación web principal en el puerto 5000 y puede configurar este número de puerto. Un uso habitual de Procfile es pasar este número de puerto a su aplicación como un argumento de la línea de comandos. Para obtener más información sobre la configuración del proxy, expanda la sección Configuración del proxy inverso que se encuentra en esta página.

Elastic Beanstalk captura flujos de error y salida estándar de procesos del archivo Procfile en archivos de registro. Elastic Beanstalk nombra los archivos de registro después del proceso y los almacena en /var/log. Por ejemplo, el proceso web del ejemplo anterior genera los logs llamados web-1.log y web-1.error.log para stdout y stderr, respectivamente.

Los enlaces de la plataforma están diseñados específicamente para ampliar la plataforma del entorno. Se trata de scripts personalizados y otros archivos ejecutables que se implementan como parte del código fuente de la aplicación y que Elastic Beanstalk ejecuta durante diversas etapas de aprovisionamiento de instancias.

nota

Los enlaces de la plataforma no son compatibles con las versiones de la plataforma de la AMI de Amazon Linux (anteriores a Amazon Linux 2).

Enlaces de la plataforma de implementación de aplicaciones

Una implementación de aplicación se produce cuando se proporciona un nuevo paquete de origen para la implementación o cuando se realiza un cambio de configuración que requiere la terminación y recreación de todas las instancias del entorno.

Para proporcionar enlaces de la plataforma que se ejecutan durante una implementación de aplicaciones, coloque los archivos en el directorio .platform/hooks del paquete de origen, en uno de los subdirectorios siguientes.

  • prebuild: los archivos de este subdirectorio se ejecutan después de que el motor de la plataforma Elastic Beanstalk se descarga y extrae el paquete de código fuente de la aplicación y antes de que configure la aplicación y el servidor web.

    Los archivos de prebuild se ejecutan después de los comandos que se encuentran en la sección commands de un archivo de configuración y antes de los comandos de Buildfile.

  • predeploy: los archivos de este subdirectorio se ejecutan después de que el motor de la plataforma Elastic Beanstalk se configura y prepara la aplicación y el servidor web, y antes de que los implemente en la ubicación del entorno de ejecución final.

    Los archivos de predeploy se ejecutan después de los comandos que se encuentran en la sección container_commands de un archivo de configuración y antes de que se ejecuten los comandos de Procfile.

  • postdeploy: los archivos de este subdirectorio se ejecutan después de que el motor de la plataforma Elastic Beanstalk implementa la aplicación y el servidor proxy.

    Este es el último paso del flujo de trabajo de implementación.

Enlaces de la plataforma de implementación de configuración

Una implementación de configuración se produce cuando se realizan cambios de configuración que solo actualizan las instancias del entorno sin volver a crearlas. Las siguientes actualizaciones de opciones provocan una actualización de configuración.

Para proporcionar enlaces que se ejecutan durante una implementación de configuración, colóquelos en el directorio .platform/confighooks del paquete de origen. Se aplican los mismos tres subdirectorios que para los enlaces de implementación de aplicaciones.

Más información sobre enlaces de plataforma

Los archivos de enlace pueden ser archivos binarios o archivos de script que comienzan con una línea #! que contiene la ruta del intérprete; por ejemplo #!/bin/bash. Todos los archivos deben tener permiso de ejecución. Utilice chmod +x para configurar el permiso de ejecución de los archivos de enlace. En todas las versiones de la plataforma basadas en Amazon Linux 2023 y Amazon Linux 2 que se lanzaron el 29 de abril de 2022 o en fecha posterior, Elastic Beanstalk concede automáticamente permisos de ejecución a todos los scripts de enlace de plataforma. En este caso, no tiene que otorgar permisos de ejecución manualmente. Para obtener una lista de estas versiones de plataforma, consulte las notas de la versión de Linux del 29 de abril de 2022 en la Guía de notas de la versión de AWS Elastic Beanstalk.

Elastic Beanstalk ejecuta los archivos de cada uno de estos directorios en orden lexicográfico en función del nombre de archivo. Todos los archivos se ejecutan con el usuario root. El directorio de trabajo actual (cwd) de los enlaces de plataforma es el directorio raíz de la aplicación. En los archivos prebuild y predeploy, es el directorio de almacenamiento provisional de la aplicación, mientras que en los archivos postdeploy es el directorio actual de la aplicación. Si se producen errores en uno de los archivos (sale con un código de salida distinto de cero), la implementación se cancela y no se ejecuta correctamente.

El script de texto de enlace de plataforma puede fallar si contiene caracteres de salto de línea Retorno de carro/Avance de línea (CRLF, por sus siglas en inglés) de Windows. Si un archivo se guardó en un host de Windows y luego se transfirió a un servidor de Linux, puede contener saltos de línea CRLF de Windows. Para las plataformas lanzadas a partir del 29 de diciembre de 2022, Elastic Beanstalk convierte de forma automática los  CRLF de Windows en caracteres de avance de línea (LF) de Linux en los archivos de texto de enlace de plataforma. Si la aplicación se ejecuta en cualquier plataforma de Amazon Linux 2 que se haya lanzado antes de esta fecha, tendrá que convertir los caracteres CRLF de Windows en caracteres LF de Linux. Un modo de lograrlo es crear y guardar el archivo de script en un host de Linux. Las herramientas que convierten estos caracteres también están disponibles en Internet.

Los archivos de enlace tienen acceso a todas las propiedades de entorno definidas en las opciones de la aplicación y a las variables de entorno del sistema HOME, PATH y PORT.

Para obtener valores de variables de entorno y otras opciones de configuración en los scripts de enlace de plataforma, puede utilizar la utilidad get-config que Elastic Beanstalk proporciona en las instancias de entorno. Para obtener más información, consulte Herramientas de script de plataforma.

Puede añadir archivos de configuración al directorio .ebextensions del código fuente de la aplicación para configurar diferentes aspectos del entorno de Elastic Beanstalk. Entre otras cosas, los archivos de configuración le permiten personalizar el software y otros archivos de las instancias del entorno, así como ejecutar comandos de inicialización en las instancias. Para obtener más información, consulte Personalización de software en servidores Linux.

También puede definir opciones de configuración utilizando archivos de configuración. Muchas de las opciones controlan el comportamiento de la plataforma y algunas de estas opciones son específicas de la plataforma.

En las plataformas basadas en Amazon Linux 2 y Amazon Linux 2023, se recomienda utilizar Buildfile, Procfile y enlaces de plataforma para configurar y ejecutar código personalizado en las instancias de su entorno durante el aprovisionamiento de instancias. Estos mecanismos se describen en las secciones anteriores de esta página. Puede seguir utilizando comandos y comandos de contenedor en los archivos de configuración .ebextensions, pero no resulta fácil trabajar con ellos. Por ejemplo, puede resultar complicado escribir scripts de comandos en un archivo YAML desde un punto de vista sintáctico. Tendrá que seguir utilizando los archivos de configuración .ebextensions con cualquier script que necesite una referencia a un recurso de AWS CloudFormation.

Todas las versiones de la plataforma Amazon Linux 2 y Amazon Linux 2023 utilizan nginx como servidor proxy inverso predeterminado. Las plataformas Tomcat, Node.js, PHP y Python también admiten Apache HTTPD como alternativa. Para seleccionar Apache en estas plataformas, establezca la opción ProxyServer en el espacio de nombres aws:elasticbeanstalk:environment:proxy en apache. Todas las plataformas habilitan la configuración del servidor proxy de manera uniforme, como se describe en esta sección.

nota

En las versiones de la plataforma AMI de Amazon Linux (antes de Amazon Linux 2), es posible que tenga que configurar servidores proxy de manera diferente. Puede encontrar estos detalles heredados en los temas respectivos de la plataforma en esta guía.

Elastic Beanstalk configura el servidor proxy de las instancias del entorno para que reenvíen el tráfico web a la aplicación web principal de la URL raíz del entorno; por ejemplo, http://my-env.elasticbeanstalk.com.

De forma predeterminada, Elastic Beanstalk configura el proxy para que reenvíe las solicitudes entrantes en el puerto 80 a la aplicación web principal en el puerto 5000. Puede configurar este número de puerto con la propiedad de entorno PORT utilizando el espacio de nombres aws:elasticbeanstalk:application:environment en un archivo de configuración, tal y como se muestra en el ejemplo siguiente.

option_settings: - namespace: aws:elasticbeanstalk:application:environment option_name: PORT value: <main_port_number>

Para obtener más información sobre cómo configurar las variables de la aplicación, consulte Opciones de configuración.

La aplicación debe escuchar el puerto que esté configurado para ella en el proxy. Si cambia el puerto predeterminado utilizando la propiedad de entorno PORT, el código podrá acceder a él a través del valor de la variable de entorno PORT. Por ejemplo, llame a os.Getenv("PORT") en Go o System.getenv("PORT") en Java. Si configura el proxy para que envíe tráfico a diferentes procesos de la aplicación, puede configurar varias propiedades de entorno y utilizar sus valores tanto en la configuración del proxy como en el código de la aplicación. Otra opción es pasar el valor del puerto al proceso como un argumento de comando en el archivo Procfile. Para obtener detalles al respecto, expanda la sección Buildfile y Procfile en esta página.

Configuración de nginx

Elastic Beanstalk utiliza nginx como proxy inverso predeterminado para asignar la aplicación al balanceador de carga de Elastic Load Balancing. Elastic Beanstalk proporciona una configuración de nginx predeterminada que puede ampliar o invalidar completamente con su propia configuración.

nota

Cuando agregue o edite un archivo de configuración .conf de nginx, asegúrese de codificarlo como UTF-8.

Para ampliar la configuración predeterminada de nginx de Elastic Beanstalk, añada los archivos de configuración .conf en una carpeta llamada .platform/nginx/conf.d/ del paquete de código fuente de su aplicación. La configuración de nginx de Elastic Beanstalk incluye archivos .conf en esta carpeta automáticamente.

~/workspace/my-app/ |-- .platform | `-- nginx | `-- conf.d | `-- myconf.conf `-- other source files

Para anular completamente la configuración predeterminada de nginx de Elastic Beanstalk, incluya una configuración en el paquete de código fuente de .platform/nginx/nginx.conf:

~/workspace/my-app/ |-- .platform | `-- nginx | `-- nginx.conf `-- other source files

Si invalida la configuración de nginx de Elastic Beanstalk, agregue la siguiente línea al archivo nginx.conf para extraer las configuraciones de Elastic Beanstalk de Informes y monitorización de estado mejorados, los mapeos automáticos de la aplicación y los archivos estáticos.

include conf.d/elasticbeanstalk/*.conf;

Configuración de Apache HTTPD

Las plataformas Tomcat, Node.js, PHP y Python le permiten elegir el servidor proxy Apache HTTPD como alternativa a nginx. Este no es el valor predeterminado. En el siguiente ejemplo se configura Elastic Beanstalk para que utilice Apache HTTPD.

ejemplo .ebextensions/httpd-proxy.config
option_settings: aws:elasticbeanstalk:environment:proxy: ProxyServer: apache

Puede ampliar la configuración de Apache predeterminada de Elastic Beanstalk con archivos de configuración adicionales. Si lo prefiere, puede anular por completo la configuración de Apache predeterminada de Elastic Beanstalk.

Para ampliar la configuración de Apache predeterminada de Elastic Beanstalk, añada los archivos de configuración .conf a una carpeta con el nombre .platform/httpd/conf.d en el paquete de código fuente de su aplicación. La configuración de Apache de Elastic Beanstalk incluye archivos .conf en esta carpeta automáticamente.

~/workspace/my-app/ |-- .ebextensions | -- httpd-proxy.config |-- .platform | -- httpd | -- conf.d | -- port5000.conf | -- ssl.conf -- index.jsp

Por ejemplo, la siguiente configuración de Apache 2.4 agrega un agente de escucha en el puerto 5000.

ejemplo .platform/httpd/conf.d/port5000.conf
listen 5000 <VirtualHost *:5000> <Proxy *> Require all granted </Proxy> ProxyPass / http://localhost:8080/ retry=0 ProxyPassReverse / http://localhost:8080/ ProxyPreserveHost on ErrorLog /var/log/httpd/elasticbeanstalk-error_log </VirtualHost>

Para anular por completo la configuración de Apache predeterminada de Elastic Beanstalk, incluya una configuración en el paquete de código fuente en .platform/httpd/conf/httpd.conf.

~/workspace/my-app/ |-- .ebextensions | -- httpd-proxy.config |-- .platform | `-- httpd | `-- conf | `-- httpd.conf `-- index.jsp
nota

Si invalida la configuración de Apache de Elastic Beanstalk, agregue la siguiente línea al archivo httpd.conf para extraer las configuraciones de Elastic Beanstalk de Informes y monitorización de estado mejorados, los mapeos automáticos de la aplicación y los archivos estáticos.

IncludeOptional conf.d/elasticbeanstalk/*.conf
nota

Si va a migrar su aplicación de Elastic Beanstalk a una plataforma Amazon Linux 2 o Amazon Linux 2023, asegúrese de leer también la información de Migración de su aplicación de Linux de Elastic Beanstalk a Amazon Linux 2023 o Amazon Linux 2.

Ejemplo de aplicación con extensiones

En el siguiente ejemplo, se muestra un paquete de código fuente de aplicaciones con varias características de extensibilidad con las que son compatibles las plataformas Amazon Linux 2 y Amazon Linux 2023 de Elastic Beanstalk: un archivo Procfile, archivos de configuración .ebextensions, enlaces personalizados y archivos de configuración de proxy.

~/my-app/ |-- web.jar |-- Procfile |-- readme.md |-- .ebextensions/ | |-- options.config # Option settings | `-- cloudwatch.config # Other .ebextensions sections, for example files and container commands `-- .platform/ |-- nginx/ # Proxy configuration | |-- nginx.conf | `-- conf.d/ | `-- custom.conf |-- hooks/ # Application deployment hooks | |-- prebuild/ | | |-- 01_set_secrets.sh | | `-- 12_update_permissions.sh | |-- predeploy/ | | `-- 01_some_service_stop.sh | `-- postdeploy/ | |-- 01_set_tmp_file_permissions.sh | |-- 50_run_something_after_app_deployment.sh | `-- 99_some_service_start.sh `-- confighooks/ # Configuration deployment hooks |-- prebuild/ | `-- 01_set_secrets.sh |-- predeploy/ | `-- 01_some_service_stop.sh `-- postdeploy/ |-- 01_run_something_after_config_deployment.sh `-- 99_some_service_start.sh
nota

Algunas de estas extensiones no son compatibles con las versiones de la plataforma de la AMI de Amazon Linux (antes de Amazon Linux 2).

Flujo de trabajo de implementación de instancia

nota

La información de esta sección no se aplica a la ramificación de la plataforma ECS sobre Amazon Linux 2 y Amazon Linux 2023. Para obtener más información, consulte la siguiente sección, Flujo de trabajo de implementación de instancias para ECS sobre Amazon Linux 2 y posterior.

Dado que hay muchos mecanismos para ampliar la plataforma el entorno, resulta útil saber qué sucede cuando Elastic Beanstalk aprovisiona una instancia o ejecuta una implementación en una instancia. En el diagrama siguiente, se muestra todo este flujo de trabajo de implementación. En él se representan las diferentes fases de una implementación y los pasos que Elastic Beanstalk realiza en cada fase.

Notas
  • El diagrama no representa todos los pasos que Elastic Beanstalk lleva a cabo en las instancias del entorno durante la implementación. El objetivo de este diagrama es meramente ilustrativo y pretende proporcionarle el orden y el contexto de la ejecución de las personalizaciones.

  • Para simplificar, el diagrama menciona solo los subdirectorios de enlace .platform/hooks/* (para implementaciones de aplicaciones) y no los subdirectorios de enlace de .platform/confighooks/* (para implementaciones de configuración). Los enlaces de estos últimos subdirectorios se ejecutan exactamente en los mismos pasos que los enlaces en los subdirectorios correspondientes que se muestran en el diagrama.

Orden de ejecución de extensiones en la instancia de un entorno en el que se utiliza una versión de la plataforma de Amazon Linux 2

En la lista siguiente, se detallan las fases y los pasos de la implementación.

  1. Pasos iniciales

    Elastic Beanstalk descarga y extrae su aplicación. Después de cada uno de estos pasos, Elastic Beanstalk ejecuta uno de los pasos de extensibilidad.

    1. Ejecuta los comandos que se encuentran en la sección commands: de los archivos de configuración.

    2. Ejecuta cualquier archivo ejecutable que se encuentre en el directorio .platform/confighooks/prebuild del paquete de origen (.platform/hooks/prebuild para una implementación de configuración).

  2. Configuración

    Elastic Beanstalk configura la aplicación y el servidor proxy.

    1. Ejecuta los comandos que se encuentran en el directorio Buildfile del paquete de código fuente.

    2. Copia los archivos de configuración de proxy personalizados, si tiene alguno en el directorio .platform/nginx del paquete de código fuente, en la ubicación del entorno de ejecución.

    3. Ejecuta los comandos que se encuentran en la sección container_commands: de los archivos de configuración.

    4. Ejecuta cualquier archivo ejecutable que se encuentre en el directorio .platform/confighooks/predeploy del paquete de origen (.platform/hooks/predeploy para una implementación de configuración).

  3. implementación

    Elastic Beanstalk implementa y ejecuta la aplicación y el servidor proxy.

    1. Ejecuta el comando que se encuentra en el archivo Procfile del paquete de código fuente.

    2. Ejecuta o vuelve a ejecutar el servidor proxy con los archivos de configuración proxy personalizados, si los hay.

    3. Ejecuta cualquier archivo ejecutable que se encuentre en el directorio .platform/confighooks/postdeploy del paquete de origen (.platform/hooks/postdeploy para una implementación de configuración).

Flujo de trabajo de implementación de instancias para ECS sobre Amazon Linux 2 y posterior

En la sección anterior se describen las características de extensibilidad que se admiten a lo largo de las fases del flujo de trabajo de la implementación de la aplicación. Existen algunas diferencias para las ramificaciones de la plataforma Docker de ECS sobre Amazon Linux 2 y posterior. En esta sección se explica cómo se aplican esos conceptos a esta ramificación de la plataforma específica.

Dado que hay muchos mecanismos para ampliar la plataforma el entorno, resulta útil saber qué sucede cuando Elastic Beanstalk aprovisiona una instancia o ejecuta una implementación en una instancia. En el siguiente diagrama, se muestra todo este flujo de trabajo de implementación para un entorno basado en las ramificaciones de la plataforma ECS sobre Amazon Linux 2 y ECS sobre Amazon Linux 2023. En él se representan las diferentes fases de una implementación y los pasos que Elastic Beanstalk realiza en cada fase.

A diferencia del flujo de trabajo descrito en la sección anterior, la fase de configuración de la implementación no admite las siguientes características de extensibilidad: comandos Buildfile, comandos Procfile, configuración del proxy inverso.

Notas
  • El diagrama no representa todos los pasos que Elastic Beanstalk lleva a cabo en las instancias del entorno durante la implementación. El objetivo de este diagrama es meramente ilustrativo y pretende proporcionarle el orden y el contexto de la ejecución de las personalizaciones.

  • Para simplificar, el diagrama menciona solo los subdirectorios de enlace .platform/hooks/* (para implementaciones de aplicaciones) y no los subdirectorios de enlace de .platform/confighooks/* (para implementaciones de configuración). Los enlaces de estos últimos subdirectorios se ejecutan exactamente en los mismos pasos que los enlaces en los subdirectorios correspondientes que se muestran en el diagrama.

Orden de ejecución de las extensiones en una instancia de un entorno para la ramificación de la plataforma ECS sobre Amazon Linux 2 y versiones posteriores

En la siguiente lista, se detallan los pasos del flujo de trabajo de implementación.

  1. Ejecuta los archivos ejecutables que se encuentran en el directorio appdeploy/pre en EBhooksDir.

  2. Ejecuta cualquier archivo ejecutable que se encuentre en el directorio .platform/confighooks/prebuild del paquete de origen (.platform/hooks/prebuild para una implementación de configuración).

  3. Ejecuta cualquier archivo ejecutable que se encuentre en el directorio .platform/confighooks/predeploy del paquete de origen (.platform/hooks/predeploy para una implementación de configuración).

  4. Ejecuta los archivos ejecutables que se encuentran en el directorio appdeploy/enact en EBhooksDir.

  5. Ejecuta los archivos ejecutables que se encuentran en el directorio appdeploy/post en EBhooksDir.

  6. Ejecuta cualquier archivo ejecutable que se encuentre en el directorio .platform/confighooks/postdeploy del paquete de origen (.platform/hooks/postdeploy para una implementación de configuración).

La referencia a EBhooksDir representa la ruta del directorio de enlaces de la plataforma. Para recuperar el nombre de la ruta de directorio, utilice la herramienta de script get-config en la línea de comandos de la instancia del entorno como se muestra a continuación:

$ /opt/elasticbeanstalk/bin/get-config platformconfig -k EBhooksDir