Eu li que você só pode executar userdata uma vez em um EC2 AMI. Se você criar uma AMI personalizada a partir de uma instância do EC2, não poderá executar o script userdata nessa AMI personalizada. Em instâncias do Ubuntu, você pode remover /var/lib/cloud/* , criar uma AMI personalizada e executar userdata na AMI personalizada. Não consigo encontrar um equivalente a /var/lib/cloud/* no FreeBSD.
Existe uma maneira de executar userdata no FreeBSD AMI personalizado ou uma alternativa para criar um AMI para que você possa executar scripts de userdata novamente?
Existe #cloud-boothook para Linux, mas para FreeBSD, só encontrei o configinit que não faz o que preciso. Passamos argumentos para os scripts userdata da linha de comando ao iniciar instâncias.
O FreeBSD AMI na AWS não fornece o mesmo nível de suporte para scripts user_data como outros AMIs. Como você apontou, ele não suporta
#cloud-boothook
user_data e ignora qualquer user_data passado após a inicialização.Uma solução simples é a seguinte:
Isso é um hack - sua instância agora executará todos os scripts user_data, mesmo aqueles sem a
#cloud-boothook
tag, mas na minha opinião é muito melhor do que o comportamento padrão do script. Observe que sempre é possível desabilitar oec2_configinit
script completamente desativando-o em/etc/rc.conf
.Eu forneço minha própria resposta, pois a resposta aceita é muito grosseira.
ATUALIZAÇÃO: Achei a resposta aceita muito grosseira, mas no final, estou usando de qualquer maneira , pois funciona melhor para mim. O restante aqui fornecerá apenas alguns antecedentes adicionais que alguém pode achar útil. A resposta aceita funciona melhor para mim no final porque: (1) me permite sempre executar um script de shell, (2) não faz nada além de processar o arquivo de dados do usuário da maneira que explico abaixo, ( 3) Ainda posso desativá-lo no rc.conf se eu quiser.
O problema é que, mesmo no Amazon Linux, o script de dados do usuário é executado apenas na primeira inicialização, exceto se você usar o truque MIME multipart/mixed. Você pode procurar https://cloudinit.readthedocs.io/en/latest/topics/format.html , mas estou dando um exemplo de algo que ultrapassa o limite:
O que descobri foi que os dois scripts são executados em ordem alfabética e a parte da imagem foi simplesmente ignorada.
A menos que os mantenedores do FreeBSD AMI implementem esse material de várias partes e todas as coisas que ele envolve
por que você deseja que todas as outras coisas que o ec2-cloudinit executa sempre assim? Em última análise, você está sozinho.
Não há realmente nenhum problema em apenas buscar os dados do usuário e decidir o que fazer com eles. Aqui está como você buscá-lo:
e assim, se você quiser executá-lo, basta colocá-lo em rc.local:
ou
não é grande coisa realmente. Não tenho certeza se vale a pena suportar a complexa estrutura de várias partes. O FreeBSD AMI faz isso de maneira muito diferente, mais simples e, sem dúvida, muito bem.
Como não é o padrão da AWS, eu simplesmente não me incomodaria com isso. Basta ter um único script e forçá-lo a ser executado em rc.local, ou nem mesmo executado, apenas inspecionado para encontrar algum parâmetro que controle o comportamento de alguma forma.