Execute um script bash após a inicialização da instância do EC2

19

Eu tenho um script em uma instância do EC2 que inicia remotamente outra instância.

Depois que esta instância estiver totalmente carregada (inicialização concluída), desejo que ela execute automaticamente um script bash, qual seria a melhor maneira de fazer isso?

Eu preciso que tudo seja iniciado completamente, basicamente o script bash executa um script de conversão de imagem (usando o ImageMagick e executa o comando "wget" algumas vezes)

Atualmente, o script está localizado aqui:

/home/root/beginProcess.sh

E eu posso iniciá-lo manualmente executando

bash beginProcess.sh

RHEL-6.2-Starter-EBS-i386

Também há um volume EBS anexado a isso, se isso ajudar, obrigado!

SSH This
fonte

Respostas:

26

Eu sugiro apenas usar a opção de dados do usuário para ec2-run-instances. Ele permite que você forneça um script de algum tipo para a VM, que será executado na primeira inicialização. Se você estiver usando o Ubuntu ou o Debian, poderá usar o cloud-init , o que coloca um bom polimento no processo. Se você estiver usando o cloud-init, poderá usar a [runcmd]seção do arquivo de configuração para especificar comandos arbitrários a serem executados após a inicialização.

Obrigado ao usuário do SF, Eric Hammond, pela página de dados do usuário. Confira o site dele - ele contém muitas informações sobre a AWS.

Editar: Após reler, não está claro se você deseja executar um comando na inicialização inicial ou em toda inicialização. As instruções acima se aplicam apenas à inicialização inicial. Se você deseja executar um comando em cada inicialização, você tem algumas opções - você pode executar um comando através da @rebootdiretiva cron ou, alternativamente, pode adicionar o script /etc/rc.local, que será executado sempre que o sistema inicializar.

EEAA
fonte
1
Impressionante obrigado pela resposta, para esclarecer que eu queria que ele seja executado cada vez que o sistema é inicializado, /etc/rc.localestá trabalhando maravilhosamente, aplausos
SSH Este
9

Se você estivesse usando uma AMI com o cloud-initpacote instalado (como Amazon Linux ou Ubuntu), poderia simplesmente passar o script bash (que começa com #!) Como o arquivo de dados do usuário e ele seria executado automaticamente no final do processo de inicialização.

Por exemplo, poderia ser tão simples quanto:

ec2-run-instances                             \
  --user-data-file /home/root/beginProcess.sh \
  --key $USER                                 \
  ami-XXXXXXXX

Aqui está o artigo em que introduzi o conceito de script de dados do usuário, agora disponível nas principais AMIs do EC2, como Amazon Linux e Ubuntu: http://alestic.com/2009/06/ec2-user-data-scripts

Infelizmente, parece que você deseja usar um RHEL AMI. Fiz uma cópia disso e não consegui encontrar nenhuma referência ao cloud-init ou à execução de scripts de dados do usuário na primeira inicialização, nem fiz um teste do mesmo trabalho.

Não estou dizendo que você deve trocar as distribuições do Linux apenas por isso, mas o Amazon Linux é baseado no RHEL, para que possa funcionar para você.

Aqui está um artigo que escrevi que pode ajudá-lo a depurar seu script de dados do usuário se ele não funcionar pela primeira vez: http://alestic.com/2010/12/ec2-user-data-output

Eric Hammond
fonte
Offtopic, mas obrigado por criar um valor tão inestimável também. Três aplausos.
Danieljimenez 13/09/2014