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
O AWS OpsWorks Stacks 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 a AWS Support equipe no 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 nometomcate navegue até ele. - 
                    
Adicione um arquivo
metadata.rbatomcat, 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
recipesatomcat. 
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
executeexecutaapt-get updatepara 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
packageinstala o Tomcat 7. - 
                    
A receita
tomcat::serviceincluída define o serviço e será abordada depois. - 
                    
O recurso
serviceinicia 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.rbreferenciatomcatpara iniciar o serviço. - 
                    
O recurso
service_nameespecifica o nome do serviço.Quando você listar os serviços na instância, o serviço Tomcat será chamado de tomcat7.
 - 
                    
supportsespecifica como o Chef gerencia os comandosrestart,reloadestatusdo serviço.- 
                            
trueindica que o Chef pode usar o script init ou outro provedor de serviços para executar o comando. - 
                            
falseindica 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.rbque contenha o exemplo de receita padrão e o salve emrecipes. - 
                    
Crie um arquivo
service.rbque 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
notifiessó 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
notifiesa 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
templatesetomcate um subdiretóriodefaultatemplates. - 
                    
Copie o modelo
example_data.json.erbdo livro de receitascreatefilepara o diretóriotemplates/default. - 
                    
Adicione um subdiretório
attributesatomcat. - 
                    
Copie o arquivo de atributo
default.rbdo livro de receitascreatefilepara 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
serviceainda está lá, mas agora atende a uma finalidade um pouco diferente.A ação
:enablehabilita o serviço Tomcat na inicialização. - 
                    
O recurso de modelo já inclui
notifies, que reinicia o serviço Tomcat casoexample_data.jsontenha 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 destroypara começar com uma instância limpa. - 
                    
Substitua o código em
default.rbpelo 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.