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.
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
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.
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.
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 medianteplatform.yaml
-
platform_version
, que se establece medianteplatform.yaml
-
platform_arn
, que se establece mediante el script de compilación principal,builder.sh
, que aparece al final del archivo de ejemplocustom_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)
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 deapt -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
: instalawget
,tree
ygit
. 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 script00-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
-
Cree el directorio en el que va a extraer la plataforma personalizada de ejemplo.
~$
mkdir ~/custom-platform
-
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
-
Edite el archivo
custom_platform.json
y proporcione valores para las propiedadesregion
ysource_ami
. Para obtener más información, consulte Actualización de plantilla de Packer. -
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ónconfig.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
. -
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
en el comando eb platform create.INSTANCE_PROFILE
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.
-
Puede comprobar los errores de los registros con el comando eb platform logs.
~/custom-platform$
eb platform logs
... -
Puede comprobar el proceso en otro momento con eb platform events.
~/custom-platform$
eb platform events
... -
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
-
Cree un directorio para la aplicación.
~$
mkdir custom-platform-app
~$cd ~/custom-platform-app
-
Inicialice un repositorio de la aplicación.
~/custom-platform-app$
eb init
... -
Descargue la aplicación de ejemplo NodeSampleApp.zip.
-
Extraiga la aplicación de muestra.
~/custom-platform-app$
unzip
~/
NodeSampleApp.zip -
Ejecute eb create -p
CUSTOM-PLATFORM-ARN
, dondeCUSTOM-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