¿Existe un método para configurar una máquina EC2 para ejecutar el script de inicio de Kafka al inicio? También uso Java Aws SDK, por lo que acepto tanto la solución para un programa Java que ejecuta el comando en la instancia EC2 como las soluciones para un modo de secuencia de comandos bash que ejecuta la secuencia de comandos kafka al inicio.
Se puede pasar un script en la propiedad Datos de usuario .
Si está utilizando la AMI de Amazon Linux y la primera línea del script comienza con #! , el script se ejecutará la primera vez que se inicie la instancia .
Para obtener más información, consulte: Ejecución de comandos en su instancia de Linux en el lanzamiento
Agregar una secuencia de comandos en Datos de usuario en CloudFormation solo se ejecuta una vez, justo cuando se inicia la instancia, pero no cuando se reinicia, que es lo que necesitaba para mi caso de uso. Utilizo el enfoque rc.local como se comentó anteriormente y aquí . En efecto, lo siguiente agrega mi script al archivo rc.local y funciona como se esperaba:
Resources: VM: Type: 'AWS::EC2::Instance' Properties: [...] UserData: 'Fn::Base64': !Sub | #!/bin/bash -x echo 'INSTANCEID="$(curl -s http://169.254.169.254/latest/meta-data/instance-id)"' >> /etc/rc.local #echo 'INSTANCEID=$(ls /var/lib/cloud/instances)' >> /etc/rc.local echo 'echo "aws ec2 stop-instances --instance-ids $INSTANCEID --region ${AWS::Region}" | at now + ${Lifetime} minutes' >> /etc/rc.localSugerencia adicional : puede inspeccionar los datos de usuario (el script actual) y modificarlos mediante la consola de AWS siguiendo estas instrucciones: Ver y actualizar los datos de usuario de la instancia .
¿Cuál es el sistema operativo de la instancia EC2?
Puede usar el script de datos de usuario en el momento del lanzamiento de la instancia. Recuerde que esta es solo una actividad de 1 vez
Si su requisito es iniciar el script cada vez que reinicia la instancia EC2, entonces puede utilizar el archivo rc.local en las instancias de Linux que se carga en el momento del arranque del sistema operativo.