Plataformas personalizadas de Elastic Beanstalk - AWS Elastic Beanstalk

Plataformas personalizadas de Elastic Beanstalk

AWS Elastic Beanstalk admite plataformas personalizadas. Una plataforma personalizada es una personalización más avanzada que una imagen personalizada en varios sentidos. Una plataforma personalizada le permite desarrollar un nueva plataforma completa desde cero, personalizando el sistema operativo, el software adicional y los scripts que Elastic Beanstalk ejecuta en instancias de plataforma. Esta flexibilidad le permite crear una plataforma para una aplicación que utilice un lenguaje u otro software de infraestructura, para el que Elastic Beanstalk no proporciona una plataforma administrada. Si comparamos este tipo de plataforma con las imágenes personalizadas, en las que usted modifica una Amazon Machine Image (AMI) para su uso con una plataforma Elastic Beanstalk existente, vemos que Elastic Beanstalk proporciona igualmente los scripts de la plataforma y controla la pila de software de la plataforma. Además, con las plataformas personalizadas puede usar un script automatizado para crear y mantener su personalización, mientras que en las imágenes personalizadas realiza los cambios manualmente a través de una instancia en ejecución.

nota

Las plataformas personalizadas de Elastic Beanstalk solo admiten la creación de una AMI desde AMI base de Amazon Linux, RHEL 7, RHEL 6 o las AMI base Ubuntu 16.04. Amazon Linux 2 u otros sistemas operativos no son compatibles con la función de plataformas personalizadas.

Para crear una plataforma personalizada, crea una AMI de uno de los sistemas operativos admitidos: Ubuntu, RHEL o Amazon Linux (consulte la entrada flavor de Formato del archivo platform.yaml. para conocer los números de versión exactos) y añade personalizaciones. Puede crear su propia plataforma Elastic Beanstalk con Packer, que es una herramienta de código abierto para crear imágenes de máquinas para muchas plataformas, incluidas AMI para su uso con Amazon Elastic Compute Cloud (Amazon EC2). Las plataformas Elastic Beanstalk se componen de una AMI que está configurada para ejecutar el conjunto de software que respalda a una aplicación y metadatos que pueden contener opciones de configuración personalizadas y valores predeterminados.

Elastic Beanstalk administra Packer como una plataforma integrada independiente y, por tanto, no tendrá que preocuparse por la configuración y las versiones de Packer.

Para crear una plataforma, proporcione a Elastic Beanstalk una plantilla de Packer y los scripts y archivos que la plantilla invoca para crear las AMI. Estos componentes se empaquetan con un archivo de definición de plataforma, que especifica la plantilla y los metadatos, en un archivo ZIP, conocido como archivo de definición de plataforma.

Cuando crea una plataforma personalizada, lanza un entorno de una sola instancia sin una dirección IP elástica que ejecuta Packer. A continuación, Packer lanza otra instancia para crear una imagen. Puede reutilizar este entorno con diferentes plataformas y diferentes versiones de cada plataforma.

nota

Las plataformas personalizadas son específicas de la región de AWS. Si utiliza Elastic Beanstalk en varias regiones, debe crear las plataformas por separado en cada región.

En determinadas circunstancias, las instancias lanzadas por Packer no se han limpiado y se deben terminar manualmente. Para obtener información sobre cómo limpiar manualmente estas instancias, consulte Limpieza de instancias de Packer.

Los usuarios de la cuenta pueden usar sus plataformas personalizadas. Para ello, deben especificar un ARN de plataforma durante la creación del entorno. Estos ARN se devuelven mediante el comando eb platform create que utilizó para crear la plataforma personalizada.

Cada vez que crea su plataforma personalizada, Elastic Beanstalk crea una nueva versión de plataforma. Los usuarios pueden especificar una plataforma por su nombre para obtener únicamente la última versión de la plataforma o incluir un número de versión para obtener una versión específica.

Por ejemplo, para implementar la última versión de la plataforma personalizada con el ARN MyCustomPlatformARN, que podría ser la 3.0, la línea de comando de la CLI de EB sería esta:

eb create -p MyCustomPlatformARN

Para implementar la versión 2.1, la línea de comando de la CLI de EB sería esta:

eb create -p MyCustomPlatformARN --version 2.1

Puede aplicar etiquetas a una versión de la plataforma personalizada cuando la cree y editar etiquetas de las versiones de la plataforma personalizada existentes. Para obtener más información, consulte Etiquetado de versiones de la plataforma personalizada.

Creación de una plataforma personalizada

Para crear una plataforma personalizada, la raíz de su aplicación debe contener un archivo de definiciones de plataforma, platform.yaml, que define el tipo de constructor utilizado para crear la plataforma personalizada. El formato de este archivo se describe en Formato del archivo platform.yaml.. Puede crear la plataforma personalizada desde cero o usar una de las plataformas personalizadas de ejemplo como punto de partida.

Uso de las plataformas personalizadas de ejemplo

Si no quiere crear su propia plataforma personalizada, puede utilizar uno de los ejemplos de archivo de definiciones de plataforma para arrancar la plataforma personalizada. Los únicos elementos que tiene que configurar en las muestras para poder usarlas son una AMI de origen y una región.

nota

No utilice una plataforma personalizada de ejemplo sin modificar en producción. El objetivo de los ejemplos es mostrar algunas de las funcionalidades disponibles en una plataforma personalizada, pero no están preparados para producción.

NodePlatform_Ubuntu.zip

Esta plataforma se basa en Ubuntu 16.04 y es compatible con Node.js 4.4.4. Utilizaremos esta plataforma personalizada para los ejemplos de esta sección.

NodePlatform_RHEL.zip

Esta plataforma se basa en RHEL 7.2 y es compatible con Node.js 4.4.4.

NodePlatform_AmazonLinux.zip

Esta plataforma se basa en Amazon Linux 2016.09.1 y es compatible con Node.js 4.4.4.

TomcatPlatform_Ubuntu.zip

Esta plataforma se basa en Ubuntu 16.04 y es compatible con Tomcat 7/Java 8.

CustomPlatform_NodeSampleApp.zip

Ejemplo de Node.js que utiliza express y ejs para mostrar una página web estática.

CustomPlatform_TomcatSampleApp.zip

Ejemplo de Tomcat que muestra una página web estática cuando se implementa.

Descargue el archivo de definición de plataforma de ejemplo: NodePlatform_Ubuntu.zip. Este archivo contiene un archivo de definición de la plataforma, una plantilla de Packer, scripts que Packer ejecuta durante la creación de imágenes y scripts y archivos de configuración que Packer copia en la instancia del constructor durante la creación de la plataforma.

ejemplo NodePlatform_Ubuntu.zip

|-- builder Contains files used by Packer to create the custom platform |-- custom_platform.json Packer template |-- platform.yaml Platform definition file |-- ReadMe.txt Briefly describes the sample

El archivo de definición de plataforma, platform.yaml, le dice a Elastic Beanstalk el nombre de la plantilla Packer, custom_platform.json.

version: "1.0" provisioner: type: packer template: custom_platform.json flavor: ubuntu1604

La plantilla de Packer le indica a Packer cómo debe generar las AMI de la plataforma mediante una AMI de Ubuntu que sirve de base para la imagen de plataforma en los tipos de instancia HVM. La sección provisioners le indica a Packer que copie todo el contenido de la carpeta builder del archivo en la instancia y que ejecute el script builder.sh en la instancia. Cuando los scripts se completan, Packer crea una imagen de la instancia modificada.

Elastic Beanstalk crea tres variables de entorno que se pueden utilizar para etiquetar las AMI de Packer:

AWS_EB_PLATFORM_ARN

ARN de la plataforma personalizada.

AWS_EB_PLATFORM_NAME

Nombre de la plataforma personalizada.

AWS_EB_PLATFORM_VERSION

Versión de la plataforma personalizada.

El archivo custom_platform.json de ejemplo utiliza estas variables para definir los que se utilizan en los scripts:

  • platform_name, que se establece mediante platform.yaml

  • platform_version, que se establece mediante platform.yaml

  • platform_arn, que se establece mediante el script de compilación principal, builder.sh, que aparece al final del archivo de ejemplo custom_platform.json.

El archivo custom_platform.json contiene dos propiedades para las que tiene que proporcionar valores: source_ami y region. Para obtener más información acerca de la elección de los valores de región y AMI correctos, consulte Updating Packer template (Actualización de plantilla de Packer) en el repositorio eb-custom-platforms-samples de GitHub.

ejemplo custom_platform.json

{ "variables": { "platform_name": "{{env `AWS_EB_PLATFORM_NAME`}}", "platform_version": "{{env `AWS_EB_PLATFORM_VERSION`}}", "platform_arn": "{{env `AWS_EB_PLATFORM_ARN`}}" }, "builders": [ { ... "region": "", "source_ami": "", ... } ], "provisioners": [ {...}, { "type": "shell", "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo {{ .Path }}", "scripts": [ "builder/builder.sh" ] } ] }

Los scripts y otros archivos que incluya en su archivo de deficiones de plataforma variarán considerablemente en función de las modificaciones que quiera realizar en la instancia. La plataforma de ejemplo contiene los siguientes scripts:

  • 00-sync-apt.sh: comentado: apt -y update. Hemos convertido en comentario el comando porque solicita una entrada al usuario, lo que interrumpe la actualización automatizada del paquete. Esto puede ser un problema de Ubuntu. Sin embargo, la ejecución de apt -y update sigue siendo una práctica recomendada. Por este motivo, hemos dejado el comando en el script de muestra como referencia.

  • 01-install-nginx.sh: instala nginx.

  • 02-setup-platform.sh: instala wget, tree y git. Copia enlaces y configuraciones de registro en la instancia y crea los siguientes directorios:

    • /etc/SampleNodePlatform: ubicación en la que se carga el archivo de configuración del contenedor durante la implementación.

    • /opt/elasticbeanstalk/deploy/appsource/: ubicación en la que el script 00-unzip.sh carga el código fuente de la aplicación durante la implementación (consulte la sección Herramientas de script de plataforma para obtener más información sobre este script).

    • /var/app/staging/: ubicación en la que el código fuente de la aplicación se procesa durante la implementación.

    • /var/app/current/: ubicación en la que el código fuente de la aplicación se ejecuta después de procesarse.

    • /var/log/nginx/healthd/: ubicación en la que el agente de estado avanzado escribe los registros.

    • /var/nodejs: ubicación en la que se cargan los archivos Node.js durante la implementación.

Utilice la CLI de EB para crear su primera plataforma personalizada con el archivo de definición de plataforma de ejemplo.

Para crear una plataforma personalizada

  1. Instale la CLI de EB.

  2. Cree el directorio en el que va a extraer la plataforma personalizada de ejemplo.

    ~$ mkdir ~/custom-platform
  3. Extraiga NodePlatform_Ubuntu.zip al directorio y, a continuación, cambie al directorio de extracción.

    ~$ cd ~/custom-platform ~/custom-platform$ unzip ~/NodePlatform_Ubuntu.zip ~/custom-platform$ cd NodePlatform_Ubuntu
  4. Edite el archivo custom_platform.json y proporcione valores para las propiedades region y source_ami. Para obtener más información, consulte Actualización de plantilla de Packer.

  5. Ejecute eb platform init y siga los mensajes para inicializar el repositorio de la plataforma

    Puede utilizar eb platform como forma abreviada de ebp.

    nota

    Windows PowerShell utiliza ebp como alias del comando. Si está ejecutando la CLI de EB en Windows PowerShell, utilice el formato largo de este comando: eb platform.

    ~/custom-platform$ eb platform init

    Este comando también crea el directorio .elasticbeanstalk en la carpeta actual y agrega el archivo de configuración config.yml al directorio. No cambie ni elimine este archivo, ya que Elastic Beanstalk lo utiliza como base cuando crea la plataforma personalizada.

    De forma predeterminada, eb platform init utiliza el nombre de la carpeta actual como el nombre de la plataforma personalizada, que, en este ejemplo, sería custom-platform.

  6. Ejecute eb platform create para lanzar un entorno de Packer y obtener el ARN de la plataforma personalizada. Necesitará este valor más tarde, cuando cree un entorno desde la plataforma personalizada.

    ~/custom-platform$ eb platform create ...

    De forma predeterminada, Elastic Beanstalk crea el perfil de instancia aws-elasticbeanstalk-custom-platform-ec2-role para plataformas personalizadas. Si, en su lugar, desea utilizar un perfil de instancia existente, agregue la opción -ip INSTANCE_PROFILE en el comando eb platform create.

    nota

    Packer no podrá crear la plataforma personalizada correctamente si utiliza el perfil de instancia predeterminado Elastic Beanstalk de aws-elasticbeanstalk-ec2-role.

    En la CLI de EB se muestra la salida de eventos del entorno de Packer hasta que se completa el proceso de creación. Si desea salir de la vista de eventos, presione Ctrl+C.

  7. Puede comprobar los errores de los registros con el comando eb platform logs.

    ~/custom-platform$ eb platform logs ...
  8. Puede comprobar el proceso en otro momento con eb platform events.

    ~/custom-platform$ eb platform events ...
  9. Compruebe el estado de la plataforma con eb platform status.

    ~/custom-platform$ eb platform status ...

Una vez que se complete la operación, tendrá a su disposición una plataforma que puede utilizar para lanzar un entorno de Elastic Beanstalk.

Puede utilizar la plataforma personalizada cuando cree un entorno desde la consola. Consulte El asistente de creación de nuevo entorno.

Para lanzar un entorno en la plataforma personalizada

  1. Cree un directorio para la aplicación.

    ~$ mkdir custom-platform-app ~$ cd ~/custom-platform-app
  2. Inicialice un repositorio de la aplicación.

    ~/custom-platform-app$ eb init ...
  3. Descargue la aplicación de ejemplo NodeSampleApp.zip.

  4. Extraiga la aplicación de muestra.

    ~/custom-platform-app$ unzip ~/NodeSampleApp.zip
  5. Ejecute eb create -p CUSTOM-PLATFORM-ARN, donde CUSTOM-PLATFORM-ARN es el ARN devuelto por un comando eb platform create, para lanzar un entorno que ejecute la plataforma personalizada.

    ~/custom-platform-app$ eb create -p CUSTOM-PLATFORM-ARN ...