As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Exemplo 8: Gerenciamento de serviços
Importante
A ferramenta AWS OpsWorks Stacks o serviço chegou ao fim da vida útil em 26 de maio de 2024 e foi desativado para clientes novos e existentes. É altamente recomendável que os clientes migrem suas cargas de trabalho para outras soluções o mais rápido possível. Se você tiver dúvidas sobre migração, entre em contato com o AWS Support Equipe em AWS Re:post
Pacotes como servidores de aplicação normalmente têm um serviço associado que deve ser iniciado, parado, reiniciado etc. Por exemplo, você precisará iniciar o serviço Tomcat depois de instalar o pacote ou a instância terminar a inicialização e reiniciar o serviço sempre que modificar o arquivo de configuração. Este tópico aborda os conceitos básicos de como gerenciar um serviço em uma instância do Linux usando um servidor de aplicações Tomcat como um exemplo. O recurso de serviço funciona da mesma maneira que instâncias do Windows, embora haja algumas diferenças em detalhes. Para obter mais informações, consulte service
nota
O exemplo faz uma instalação do Tomcat muito mínima, apenas o suficiente para demonstrar os conceitos básicos de como usar um recurso service
. Para obter um exemplo de como implementar receitas para um servidor Tomcat mais funcional, consulte Criação de uma camada de servidor Tomcat personalizada.
Definição e inicialização de um serviço
Esta seção mostra os conceitos básicos de como definir e iniciar um serviço.
Para começar
-
No diretório
opsworks_cookbooks
, crie um diretório com nometomcat
e navegue até ele. -
Adicione um arquivo
metadata.rb
atomcat
, com o seguinte conteúdo.name "tomcat" version "0.1.0"
-
Inicialize e configure o Test Kitchen, conforme descrito em Exemplo 1: Instalação de pacotes e remova CentOS da lista
platforms
. -
Adicione um subdiretório
recipes
atomcat
.
Você usa um recurso service
execute "install_updates" do command "apt-get update" end package "tomcat7" do action :install end include_recipe 'tomcat::service' service 'tomcat' do action :start end
A receita faz o seguinte:
-
O recurso
execute
executaapt-get update
para instalar as atualizações do sistema atual.Para a instância do Ubuntu usada neste exemplo, você deverá instalar as atualizações antes de instalar o Tomcat. Outros sistemas podem ter requisitos diferentes.
-
O recurso
package
instala o Tomcat 7. -
A receita
tomcat::service
incluída define o serviço e será abordada depois. -
O recurso
service
inicia o serviço Tomcat.Você também pode usar esse recurso para emitir outros comandos, como parar e reiniciar o serviço.
O exemplo a seguir mostra a receita tomcat::service
.
service 'tomcat' do service_name "tomcat7" supports :restart => true, :reload => false, :status => true action :nothing end
Essa receita cria a definição do serviço Tomcat da seguinte forma:
-
O nome do recurso,
tomcat
, é usado por outras receitas para referenciar o serviço.Por exemplo,
default.rb
referenciatomcat
para iniciar o serviço. -
O recurso
service_name
especifica o nome do serviço.Quando você listar os serviços na instância, o serviço Tomcat será chamado de tomcat7.
-
supports
especifica como o Chef gerencia os comandosrestart
,reload
estatus
do serviço.-
true
indica que o Chef pode usar o script init ou outro provedor de serviços para executar o comando. -
false
indica que o Chef deve tentar executar o comando por outros meios.
-
Observe que action
é definido como :nothing
, que leva o recurso a não realizar ação alguma. O recurso de serviço não dá suporte a ações como start
e restart
. No entanto, esse livro de receitas segue uma prática padrão de como usar uma definição de serviço que não realiza ação alguma e iniciar ou reiniciar o serviço em outro lugar. Cada receita que inicia ou reinicia um serviço deve primeiramente defini-la. Assim, a abordagem mais simples é colocar a definição de serviço em uma receita à parte e incluí-la em outras receitas, conforme necessário.
nota
Por uma questão de simplicidade, a receita padrão deste exemplo usa um recurso service
para iniciar o serviço após a execução da definição do serviço. Uma implementação de produção normalmente inicia ou reinicia um serviço usando notifies
, conforme será debatido depois.
Para executar a receita
-
Crie um arquivo
default.rb
que contenha o exemplo de receita padrão e o salve emrecipes
. -
Crie um arquivo
service.rb
que contenha o exemplo de definição do serviço e o salve emrecipes
. -
Execute
kitchen converge
, faça logon na instância e execute o comando a seguir para verificar se o serviço está em execução.sudo service tomcat7 status
nota
Se estivesse executando service.rb
separadamente de default.rb
, você teria que editar .kitchen.yml
para adicionar tomcat::service
à lista de execuções. No entanto, quando você incluir uma receita, o código será incorporado à receita pai antes da receita ser executada. Por isso, service.rb
é basicamente uma parte de default.rb
e não exige uma entrada da lista de execuções à parte.
Uso de notifies para iniciar ou reiniciar um serviço
As implementações de produção normalmente não usam service
para iniciar ou reiniciar um serviço. Em vez disso, elas adicionam notifies
a qualquer um dos vários recursos. Por exemplo, caso queira reiniciar o serviço depois de modificar um arquivo de configuração, você inclui notifies
no recurso template
associado. O uso de notifies
tem as vantagens a seguir em relação ao uso de um recurso service
para reiniciar explicitamente o serviço.
-
O elemento
notifies
só reiniciará o serviço se o arquivo de configuração associado tiver sido alterado. Assim, não há risco de causar uma reinicialização desnecessária do serviço. -
O Chef reinicia o serviço no máximo uma vez ao final de cada execução, independentemente de quantos
notifies
a execução contenha.Por exemplo, a execução do Chef pode incluir vários recursos do modelo, e cada um deles modifica um arquivo de configuração diferente e exige a reinicialização de um serviço caso o arquivo tenha sido alterado. No entanto, você normalmente só deseja reiniciar o serviço uma vez, ao final da execução do Chef. Do contrário, você pode tentar reiniciar um serviço que ainda não esteja totalmente operacional após uma reinicialização anterior, o que pode causar erros.
Este exemplo modifica tomcat::default
para incluir um recurso template
que usa notifies
para reiniciar o serviço. Um exemplo realista usaria um recurso de modelo que cria uma versão personalizada de um dos arquivos de configuração do Tomcat, mas eles acabam sendo longos e complexos. Para simplificar, o exemplo usa apenas o recurso de modelo de Criação de um arquivo usando um modelo. Ele não tem a ver com o Tomcat, mas oferece uma maneira simples de mostrar como usar notifies
. Para obter um exemplo sobre como usar modelos para criar arquivos de configuração do Tomcat, consulte Receitas de instalação.
Para configurar o livro de receitas
-
Adicione um subdiretório
templates
etomcat
e um subdiretóriodefault
atemplates
. -
Copie o modelo
example_data.json.erb
do livro de receitascreatefile
para o diretóriotemplates/default
. -
Adicione um subdiretório
attributes
atomcat
. -
Copie o arquivo de atributo
default.rb
do livro de receitascreatefile
para o diretórioattributes
.
A receita a seguir usa notifies
para reiniciar o serviço Tomcat.
execute "install_updates" do command "apt-get update" end package "tomcat7" do action :install end include_recipe 'tomcat::service' service 'tomcat' do action :enable end directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end template "/srv/www/shared/example_data.json" do source "example_data.json.erb" mode 0644 variables( :a_boolean_var => true, :a_string_var => "some string" ) only_if {node['createfile']['install_file']} notifies :restart, resources(:service => 'tomcat') end
O exemplo mescla a receita de Criação de um arquivo usando um modelo à receita da seção anterior, com duas alterações significativas:
-
O recurso
service
ainda está lá, mas agora atende a uma finalidade um pouco diferente.A ação
:enable
habilita o serviço Tomcat na inicialização. -
O recurso de modelo já inclui
notifies
, que reinicia o serviço Tomcat casoexample_data.json
tenha sido alterado.Isso garante que o serviço seja iniciado quando Tomcat é instalado e reiniciado inicialmente após cada alteração feita na configuração.
Para executar a receita
-
Execute
kitchen destroy
para começar com uma instância limpa. -
Substitua o código em
default.rb
pelo exemplo anterior. -
Execute
kitchen converge
, faça logon na instância e verifique se o serviço está em execução.
nota
Caso queira reiniciar um serviço, mas a receita não inclua um recurso, como template
que dê suporte a notifies
, você pode usar um recurso execute
fictício em seu lugar. Por exemplo
execute 'trigger tomcat service restart' do command 'bin/true' notifies :restart, resources(:service => 'tomcat') end
O recurso execute
deve ter um atributo command
, mesmo que você só esteja usando o recurso como uma maneira de executar notifies
. Esse exemplo contorna esse requisito executando /bin/true
, que é um comando do shell que simplesmente retorna um código de êxito.