Como fazer o script de dados do usuário do EC2 ser executado novamente na inicialização?

19

Depois que o cloud-init executa um script de dados do usuário na primeira inicialização de uma instância do EC2, presumivelmente é gravado um arquivo de estado para que o cloud-init não execute o script novamente nas reinicializações subsequentes. Há casos em que eu gostaria de excluir esse arquivo de estado para que o script de dados do usuário seja executado novamente. Cadê?

Mike
fonte

Respostas:

24

rm /var/lib/cloud/instances/*/sem/config_scripts_user

Trabalho confirmado em:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

Por uma questão de completude, se você tiver uma situação em que deseja acompanhar o fato / possibilidade de que essa AMI [tivesse uma AMI pai que ...] e todos executassem cloud-initdados do usuário, é possível excluir apenas o semáforo atual.

rm /var/lib/cloud/instance/sem/config_scripts_user

Mike
fonte
2
Você descobriu isso rapidamente.
C24w
9
@ c24w Esses timestamps são enganosos. Na verdade, levei algumas horas de pesquisa e teste; assim que descobri, criei essa pergunta para ajudar a próxima pessoa a procurar uma resposta definitiva.
Mike
1
Eu me deparei com isso desde então e não percebi que era encorajado a postar perguntas e respostas do tipo wiki. Agradecemos sua documentação!
C24w
1
Fico feliz que isso foi incentivado em serverfault. Eu já vi isso muitas vezes diminuído em SO #
frank
1
@ flag5 Isso curlé desnecessário para o serviço de metadados para obter o ID da instância atual, porque /var/lib/cloud/instancejá é um link simbólico para a instância atual em /var/lib/cloud/instances. :-)
Mike
2

Você pode colocar seu script em /etc/rc.local, que executará o script a cada reinicialização.

Pratik Singhal
fonte
/etc/rc.localnão tem nada a ver com dados do usuário do EC2.
Mike
@MikeConigliaro Eu queria usar os dados do usuário para executar algo em cada inicialização, então fiz o script de dados do usuário anexá-lo ao /etc/rc.local.
user253751
0

Você também pode configurar os dados do usuário para executar novamente em cada inicialização, em vez de remover o arquivo de estado. É necessário usar cloud_final_modulesno script userdata para executar novamente o script userdata e, para isso, é necessário customizar uderdata para ter vários arquivos em userdata. Exemplo de arquivo userdata seria como:

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/userdata-test.txt
--//

Isso fará com que o script userdata seja executado na última etapa de cada processo de inicialização. Aqui apenas uma única linha bin/echo "Hello World" >> /tmp/userdata-test.txta ser executada, substitua-a pelo seu shell script que precisa ser executado toda vez que uma máquina for inicializada.

Hardeep Singh
fonte