Este tutorial descreve como usar um lifecycle hook do Auto Scaling para suspender uma instância ECS e executar automaticamente um script nela durante atividades de dimensionamento, utilizando um modelo do CloudOps Orchestration Service (OOS).
Pré-requisitos
Um grupo de dimensionamento criado e com o status Enabled.
Um script pronto. Este tutorial usa como exemplo um script que instala o Apache em uma instância Linux CentOS 7.6.
-
Uma função do Resource Access Management (RAM) criada para o OOS. A entidade confiável da função RAM deve ser Alibaba Cloud Service, o service confiável deve ser **CloudOps Orchestration Service** e a função RAM deve ter permissões para operar o modelo do OOS. Para mais informações, consulte Crie uma função RAM para o OOS e conceda permissões.
NotaNeste tópico, a função RAM OOSServiceRole serve como exemplo. Você também pode usar outras funções.
Procedimento
Este tutorial usa o modelo público ACS-ESS-LifeCycleRunCommand do OOS para demonstrar como executar automaticamente um script em uma instância ECS durante um evento de scale-out.
Etapa 1: Configurar as permissões da função RAM do OOS
O modelo ACS-ESS-LifeCycleRunCommand requer permissões para operar recursos do ECS e do Auto Scaling. Conceda essas permissões à função RAM assumida pelo OOS.
Faça login no console RAM.
-
Crie uma política.
No painel de navegação à esquerda, escolha .
Na página Policies, clique em Create Policy.
-
Na página Create Policy, selecione a aba JSON, configure os parâmetros e clique em OK.
A tabela a seguir descreve os parâmetros usados neste tutorial. Use os valores padrão para os demais parâmetros.
Parâmetro
Descrição
Name
Insira ESSHookPolicyForRunCommand.
Policy Document
Insira o seguinte conteúdo:
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeInvocationResults", "ecs:DescribeInvocations", "ecs:RunCommand" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }
-
Anexe a política à função RAM OOSServiceRole.
No painel de navegação à esquerda, escolha .
-
Localize a função RAM OOSServiceRole e clique em Grant Permission na coluna Actions.
Adicione as permissões necessárias à função RAM OOSServiceRole, assumida pelo OOS, para concluir a autorização.
-
Na página Grant Permission, especifique o escopo de recursos e as permissões e clique em OK.
A tabela a seguir descreve os parâmetros usados neste tutorial. Use os valores padrão para os demais parâmetros.
Parâmetro
Descrição
Resource Scope
Selecione Account.
Policies
Adicione a política personalizada ESSHookPolicyForRunCommand.
Etapa 2: Criar um lifecycle hook para eventos de scale-out
Ao criar o lifecycle hook, configure-o para usar um modelo do OOS. Isso garante a execução automática do script quando um evento de scale-out for acionado.
Faça login no console do Auto Scaling.
No painel de navegação à esquerda, clique em Scaling Groups.
Na barra de navegação superior, selecione uma região.
-
Localize o grupo de dimensionamento desejado e abra sua página de detalhes de uma das seguintes formas:
Na coluna Scaling Group Name/ID, clique no ID do grupo de dimensionamento.
Na coluna Actions, clique em Details.
-
Crie um lifecycle hook para o evento de scale-out.
No topo da página, clique na aba Event and adhesive hook.
Clique em Create Lifecycle Hook.
-
Configure os parâmetros do lifecycle hook e clique em OK.
A tabela a seguir descreve os parâmetros usados neste tutorial. Use os valores padrão para os demais parâmetros.
Parâmetro
Descrição
Name
Insira ESSHookForRunCommand.
Scaling Activity Type
Selecione Scale-Out.
Timeout Period
Insira um período de timeout, por exemplo, 300 segundos.
NotaO timeout define a duração máxima das operações personalizadas. Se for muito curto, as operações podem falhar. Avalie o tempo necessário para suas operações personalizadas e defina um timeout adequado.
Default Execution Policy
Selecione Continue.
Send Notification When Lifecycle Hook Takes Effect
Configure o modelo da seguinte forma:
-
Notification Method: Selecione OOS Template.
-
OOS Template Type: Selecione Public Templates.
-
Public Template: Selecione ACS-ESS-LifeCycleRunCommand.
Configure os parâmetros de execução do ACS-ESS-LifeCycleRunCommand conforme abaixo:
-
commandType: Selecione RunShellScript.
-
commandContent: Insira o script a ser executado. Este tutorial usa como exemplo o script que instala automaticamente o Apache.
yum install -y httpd systemctl start httpd systemctl enable httpd -
OOSAssumeRole: Selecione OOSServiceRole. Na seção Procedure, você concedeu permissões a esta função para gerenciar recursos do ECS e do Auto Scaling. O OOS assume essa função RAM para obter tais permissões.
-
-
Acione um evento de scale-out.
Este tutorial usa como exemplo uma regra de dimensionamento executada manualmente. Você também pode acionar eventos de scale-out com tarefas agendadas ou baseadas em eventos.
NotaOs lifecycle hooks são acionados por regras de dimensionamento, mas não pela adição ou remoção manual de instâncias ECS de um grupo de dimensionamento.
Na página de detalhes do grupo de dimensionamento, clique na aba Scaling Rules and Event-triggered Tasks.
Na aba Scaling Rules, clique em Create Scaling Rule.
-
Defina os parâmetros da regra de dimensionamento e clique em OK.
A tabela a seguir descreve os parâmetros usados neste tutorial. Use os valores padrão para os demais parâmetros.
Parâmetro
Descrição
Rule Name
Insira Add1.
Rule Type
Selecione Simple Scaling Rule.
Operation
Defina para adicionar 1 instância.
Na lista de regras de dimensionamento, localize a regra Add1 e clique em Recurrently na coluna Actions.
Clique em OK.
Após a execução da regra de dimensionamento, uma instância ECS é criada automaticamente. Como o lifecycle hook ESSHookForRunCommand existe no grupo de dimensionamento, a nova instância entra em estado de espera. O OOS é então notificado para executar as operações definidas no modelo ACS-ESS-LifeCycleRunCommand.
-
Verifique se a instância ECS criada automaticamente está configurada corretamente.
No topo da página, clique na aba Instance Management.
Localize a instância ECS criada automaticamente e clique no ID da instância na coluna ECS Instance ID/Name.
No painel de navegação à esquerda, clique em Cloud Assistant.
No canto superior direito da página, clique em Create/Run Command.
-
Execute o comando a seguir para verificar o status da instalação do Apache.
Para mais informações, consulte Crie e execute um comando. O conteúdo do comando é o seguinte:
systemctl status httpdNa aba Command Execution Result, visualize os detalhes da execução. Se o resultado mostrar que o service Apache está instalado e o status está ativo, o script no parâmetro commandContent do modelo ACS-ESS-LifeCycleRunCommand foi executado com sucesso.
Caso uma instância ECS seja criada, mas a instalação automática do Apache falhe, acesse o console do OOS para visualizar os detalhes da execução da tarefa. Para mais informações, consulte (Optional) Step 3: Visualize the OOS execution details.
(Opcional) Etapa 3: Visualizar os detalhes da execução do OOS
Faça login no console do OOS.
No painel de navegação à esquerda, escolha .
Localize a tarefa de execução por horário e clique em Details na coluna Actions.
-
A página de detalhes da execução fornece uma visão completa da tarefa.
Por exemplo, visualize o ID e o status da execução na seção Basic Information. Clique em um nó de tarefa na seção Execution Result para ver seus detalhes. Para mais informações, consulte Visualize os detalhes de uma execução.
NotaSe a execução falhar, a mensagem de erro relacionada será exibida na página de detalhes da execução.
Perguntas frequentes
Se não conseguir executar uma tarefa de O&M, solucione o problema com base na mensagem de erro no resultado da execução. Para mais informações, consulte FAQ.
A tabela a seguir descreve as mensagens de erro comuns.
|
Mensagem de erro |
Causa |
Solução |
|
Forbidden.Unauthorized message: A required authorization for the specified action is not supplied. |
O Auto Scaling não foi autorizado a realizar a ação atual. |
Verifique se a função RAM OOSServiceRole possui as permissões necessárias. |
|
Forbidden.RAM message: User not authorized to operate on the specified resource, or this API doesn't support RAM. |
O usuário RAM ou a função RAM não tem permissões para operar os recursos correspondentes. |
Verifique se a função RAM OOSServiceRole possui as permissões necessárias. Por exemplo, conceda as permissões do OOS à função RAM. Antes que o OOS possa gerenciar os recursos declarados no modelo do OOS, é necessário conceder as permissões exigidas à função RAM. |
|
LifecycleHookIdAndLifecycleActionToken.Invalid message: The specified lifecycleActionToken and lifecycleActionId you provided does not match any in process lifecycle action. |
A ação do lifecycle hook em andamento terminou ou foi interrompida. |
Avalie o período de timeout do lifecycle hook para garantir que as tarefas de O&M especificadas no modelo do OOS possam ser concluídas dentro do limite de tempo estipulado. |
Referências
Para executar scripts em instâncias ECS existentes em um grupo de dimensionamento, use o recurso de atualização contínua. Para mais informações, consulte os seguintes tópicos: