Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Dimensionamento Automático de um Pool de Instâncias do Oracle Cloud Infrastructure com base nas Solicitações HTTP do Balanceador de Carga do OCI
Introdução
Neste tutorial, veremos como dimensionar automaticamente um pool de instâncias do OCI (Oracle Cloud Infrastructure) com base no número de solicitações HTTP recebidas pelo Balanceador de Carga do OCI. Abordaremos três tópicos principais.
- Métricas de Alarme do OCI Monitoring: monitore seu balanceador de carga e configure alarmes com base nas métricas de solicitação HTTP.
- Serviço OCI Notifications: Envie notificações quando um alarme for acionado.
- Funções do OCI: Crie e use funções para ajustar o tamanho do pool de instâncias com base nas notificações recebidas.
OCI Monitoring: Use o serviço OCI Monitoring para monitorar de forma ativa e passiva os recursos da nuvem usando os recursos de métricas e alarmes. O serviço OCI Monitoring usa métricas para monitorar recursos e alarmes a fim de notificá-lo quando essas métricas atenderem aos acionadores especificados pelo alarme.
OCI Notifications: Quando algo acontece com seus recursos no OCI, você pode obter mensagens legíveis por meio de pontos finais suportados, incluindo mensagens de e-mail e texto (SMS) usando alarmes, regras de evento e conectores. Você também pode automatizar tarefas por meio de pontos finais HTTPS personalizados e do OCI Functions.
OCI Functions: O OCI Functions é uma plataforma totalmente gerenciada, multi-tenant, altamente escalável e sob demanda, Functions-as-a-Service. Ela foi criada no OCI de nível empresarial e desenvolvida pelo mecanismo de código-fonte aberto Fn Project. Use o OCI Functions (às vezes abreviado como Functions e anteriormente conhecido como Oracle Functions) quando quiser focar a gravação de código para atender às necessidades do negócio.
Arquitetura de Alto Nível
Observação:
Este tutorial é projetado exclusivamente para fins educacionais e de estudo. Ele fornece um ambiente para os alunos experimentarem e ganharem experiência prática em um ambiente controlado. É crucial notar que as configurações e práticas de segurança empregadas neste tutorial podem não ser adequadas para cenários do mundo real.
As considerações de segurança para aplicativos do mundo real geralmente são muito mais complexas e dinâmicas. Portanto, antes de implementar qualquer uma das técnicas ou configurações demonstradas aqui em um ambiente de produção, é essencial realizar uma avaliação e revisão de segurança abrangente. Essa revisão deve abranger todos os aspectos da segurança, incluindo controle de acesso, criptografia, monitoramento e conformidade, para garantir que o sistema esteja alinhado com as políticas e os padrões de segurança da organização.
A segurança sempre deve ser uma prioridade ao fazer a transição de um ambiente de laboratório para uma implantação do mundo real.
Objetivos
-
Configure um mecanismo de dimensionamento automático para um pool de instâncias do OCI. Esse mecanismo de dimensionamento automático será baseado no número de solicitações HTTP recebidas pelo Balanceador de Carga do OCI. Você aprenderá a:
-
Monitorar métricas de solicitação HTTP: Configure o OCI Monitoring para rastrear métricas de solicitação HTTP do seu balanceador de carga.
-
Criar e configurar alarmes: Defina e configure alarmes que são acionados com base em limites de solicitação HTTP específicos.
-
Configurar notificações de evento: Estabeleça notificações de evento para alertá-lo quando um alarme for acionado.
-
Implementar Funções do OCI: Crie e implante funções para ajustar automaticamente o tamanho do pool de instâncias em resposta aos alarmes acionados.
-
Pré-requisitos
-
Ambiente do OCI
-
Conta Oracle com permissões de administrador.
-
Um compartimento para criar seus recursos.
Observação: Anote o nome do compartimento e o ID do compartimento.
-
VCN com uma sub-rede privada. Para obter mais informações, consulte Criando uma Rede Virtual na Nuvem.
-
Balanceador de Carga do OCI anexado ao pool de instâncias com um backendSet apontando para as instâncias no pool. Para obter mais informações, consulte Criando um Balanceador de Carga.
-
Pool de instâncias com pelo menos 1 instância que tem um aplicativo HTTP simples em execução na porta
80
. Para obter mais informações, consulte Usando Configurações e Grupos de Instâncias.
-
-
Ambiente da Máquina Local
-
Uma instância de computação do Oracle Linux na sub-rede privada. Isso é importante para acessar recursos na sub-rede privada, como OCI Streaming e OCI Functions que serão implantados durante este tutorial.
-
Um Bastion host do OCI para estabelecer conexão com a instância de computação do Oracle Linux e executar tarefas para o tutorial. Para obter mais informações, consulte Visão Geral do Bastion.
-
Configure a CLI local do Oracle Cloud Infrastructure. Para obter mais informações, consulte Instalando a CLI.
-
Se você estiver usando o Oracle Linux, consulte Docker: Install Docker on Oracle Linux 8 (OL8).
-
CLI FN local para poder implantar sua função no OCI. Para obter mais informações, consulte Instalando a CLI do Fn Project.
-
Tarefa 1: Configurar Grupos Dinâmicos
Vá para seu domínio, clique em Grupos Dinâmicos e crie os grupos a seguir.
Nome do Grupo Dinâmico: MyFunctions
.
ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
Tarefa 2: Criar Políticas
Vá para Políticas e crie as políticas a seguir.
Nome da Política: FunctionsPolicies
.
Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME
Tarefa 3: Criar OCI Container Registry
-
Vá para Serviços do Desenvolvedor, clique em Registro de contêiner e crie um repositório privado para a imagem Fn.
Nome do Repositório:
lab/fn-autoscale-instance-pool
. -
Verifique os repositórios e anote o Namespace.
-
Abra o shell de terminal no qual você tem a CLI do OCI e o Docker instalados e prossiga com o log-in no registro. Verifique o URL correto da sua região. Neste tutorial, estamos usando a região Leste do Brasil (São Paulo) na qual o URL do registro é
gru.ocir.io
.docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
Tarefa 4: Criar as Funções do OCI Python para Dimensionar Automaticamente o Pool de Instâncias
Observação: certifique-se de ter selecionado sua sub-rede privada, a mesma sub-rede do pool de streams.
-
Vá para a Console do OCI e clique em Serviços do Desenvolvedor. Em Funções, clique em Aplicativos e Criar aplicativo.
-
Crie algumas configurações para definir os tamanhos de dimensionamento.
Observação: Essas variáveis de configuração são usadas para determinar os valores que a função usará para reduzir e reduzir o pool de instâncias.
Nome do segredo Valor INSTANCE_POOL_TARGET_SIZE Defina o valor para o novo tamanho do pool de instâncias INSTANCE_POOL_DESIRED_SIZE Definir o tamanho regular do pool de instâncias Para este tutorial, estamos usando um pool de instâncias de 1 instância e dimensionamento para
2
. -
Vá para o shell de terminal no qual você tem o Docker, a CLI do OCI e a CLI do Fn Project instalados e execute os comandos a seguir para inicializar a função.
Observação: Se você seguiu as tarefas, o comando de log-in do Docker já foi executado até agora, caso contrário, prossiga com o log-in do Docker na Tarefa 3.3.
mkdir lab cd lab fn create context oci-cloud --provider oracle fn use context oci-cloud fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab fn init --runtime python fn-autoscale-instance-pool cd fn-autoscale-instance-pool ls -lrt
Observação: Neste tutorial, estamos usando a região Leste do Brasil (São Paulo), se você estiver usando outra região, será necessário alterar os locais
api-url
eregistry
.O comando
init
criará uma função Hello World emfunc.py
. Substituiremos esse código. -
Obtenha o código de amostra da função Python aqui: func.py e substitua o
func.py
local criado durante o comando da funçãoinit
.# Copy the function code from this lab and save it on /tmp/func.py in your shell machine ls -lrt /tmp/func.py # Overwrite the func.py with tha lab's code cp /tmp/func.py func.py # Add the OCI package on the requirements.txt file, this will be needed to work with OCI. echo -e "\noci" >> requirements.txt # Check if requirements.txt has two lines cat requirements.txt
-
Criar o novo código e implantar a função.
ls -lrt fn deploy --app MyApp
Tarefa 5: Criar as Notificações do OCI
-
Vá para a Console do OCI e clique em Serviços do Desenvolvedor. Em Integração de Aplicativos, selecione Notificações e clique em Criar Tópico.
Nome:
AutoScaleTopic
. -
Clique em Assinaturas para criar uma nova assinatura e selecionar a função criada na Tarefa 4.
Tarefa 6: Criar a Definição de Alarme para Expansão (Ajustar o Tamanho do Pool de Instâncias ao Valor de Destino)
-
Vá para a Console do OCI e clique em Observabilidade e Gerenciamento. Em Monitoring, selecione Definições de Alarme e clique em Criar Alarme.
Observação: Os limites, intervalo neste alarme, são definidos para o tutorial. Você pode personalizar com suas próprias necessidades, dependendo do seu aplicativo.
Nome do Alerta:
instance_pool_scale_OUT
. -
Insira as informações a seguir para definir o alarme.
-
Na seção Metric Description, digite as informações a seguir.
- Nome da Métrica:
oci_lbaas
. - Nome da Métrica:
HttpRequests
. - Intervalo:
1 minute
. - Estatística:
Max
.
- Nome da Métrica:
-
Na seção Metric Dimensions, digite as informações a seguir.
-
Primeira dimensão da métrica:
- Nome da Dimensão:
resourceID
. - Valor da Dimensão: Selecione o OCID do balanceador de carga.
- Nome da Dimensão:
-
Segunda dimensão da métrica:
- Nome da Dimensão:
backendSetName
. - Valor da Dimensão: Selecione seu nome backendSet.
- Nome da Dimensão:
-
-
Na seção Regra de Acionamento 1, especifique as informações a seguir.
- Operador:
greater than
. - Valor:
30
. - Corpo do Alarme: O número de conexões é maior do que o esperado; inicie o processo de dimensionamento.
- Operador:
-
-
Especifique as informações a seguir para definir as notificações de alarme.
-
Na seção Destino, insira as informações a seguir.
- Serviço de Destino: Selecione Notificações.
- Compartimento: Selecione seu compartimento.
- Tópico: Selecione seu tópico.
-
Na seção Formato da Mensagem, selecione Enviar Mensagens Pretty JSON (texto bruto com quebras de linha) e, para fins de teste, selecione Repetir notificação? com 1 minuto de Frequência de notificação.
-
-
Clique em Opções Avançadas e adicione uma nova tag.
Observação: Esta é uma marcação obrigatória para definir o tipo de escala, entrada ou saída.
Namespace de Tag: Selecione Nenhum (aplicar uma tag de formato livre).
Chave de Tag:autoscaling_type
. Valor:out
.
Tarefa 7: Criar a Definição de Alarme para Redução (Ajustar o Tamanho do Pool de Instâncias de volta ao Tamanho Desejado)
-
Vá para a Console do OCI e clique em Observabilidade e Gerenciamento. Em Monitoring, selecione Definições de Alarme e clique em Criar Alarme.
Observação: Os limites, intervalo neste alarme, são definidos para o tutorial. Você pode personalizar com suas próprias necessidades, dependendo do seu aplicativo.
Nome do Alerta:
instance_pool_scale_IN
. -
Insira as informações a seguir para definir o alarme.
-
Na seção Metric Description, digite as informações a seguir.
- Nome da Métrica:
oci_lbaas
. - Nome da Métrica:
HttpRequests
. - Intervalo:
1 minute
. - Estatística:
Max
.
- Nome da Métrica:
-
Na seção Metric Dimensions, digite as informações a seguir.
-
Primeira dimensão da métrica:
- Nome da Dimensão:
resourceID
. - Valor da Dimensão: Selecione o OCID do balanceador de carga.
- Nome da Dimensão:
-
Segunda dimensão da métrica:
- Nome da Dimensão:
backendSetName
. - Valor da Dimensão: Selecione seu nome backendSet.
- Nome da Dimensão:
-
-
Na seção Regra de Acionamento 1, especifique as informações a seguir.
- Operador:
less than
. - Valor:
30
. - Corpo do Alarme: A contagem de conexões volta ao valor aceitável, chamando a redução para reduzir o número de instâncias de volta ao valor desejado.
- Operador:
-
-
Especifique as informações a seguir para definir as notificações de alarme.
-
Na seção Destino, insira as informações a seguir.
- Serviço de Destino: Selecione Notificações.
- Compartimento: Selecione seu compartimento.
- Tópico: Selecione seu tópico.
-
Na seção Formato da Mensagem, selecione Enviar Mensagens Pretty JSON (texto não processado com quebras de linha).
-
-
Clique em Opções Avançadas e adicione uma nova tag.
Observação: Esta é uma marcação obrigatória para definir o tipo de escala, entrada ou saída.
Namespace de Tag: Selecione Nenhum (aplicar uma tag de formato livre).
Chave de Tag:autoscaling_type
. Valor:in
.
Tarefa 8: Criar Carga e Verificar o Trabalho do Alarme
-
Obtenha seu IP LoadBalancer e execute várias chamadas para seu aplicativo na porta
80
. Abra a console do shell e execute o código a seguir para chamar o balanceador de carga.i=1 while true do echo "Request $i" curl http://your-ip-here ((i++)) echo "" # Prints a newline for better readability between requests done
Saída da carga simples do aplicativo.
Observação: Este é um servidor Web HTTP Apache simples para demonstrar o cenário.
-
Verifique o tamanho e o status reais do pool de instâncias. Para este tutorial, temos um pool de instâncias com o tamanho
1
. -
Abra a definição do alarme para exibir as métricas e verificar se o alarme será acionado.
-
Após alguns minutos, dependendo do intervalo de métrica, a função de expansão será acionada.
Abra os pools de instâncias e verifique o Estado, que é Dimensionamento e a Contagem de Instâncias de Destino é
2
.Após o processo de dimensionamento, você poderá ver que o tamanho do pool de instâncias é
2
. -
Interrompa o script shell e aguarde até que o alarme da transição de expansão volte para OK e, em seguida, observe o alarme para redução. Aguarde alguns minutos até que ambos os alarmes sejam atualizados e observe quando o alarme de entrada será acionado.
Agora, o alarme de redução está em estado de incêndio.
Observe que HttpRequests caiu para um número abaixo do limite de
30
.A redução do pool de instâncias foi iniciada.
Observe que o tamanho do pool de instâncias está de volta ao valor desejado de
1
.
Links Relacionados
Confirmação
- Autor - João Tarla (Engenheiro de Soluções Oracle LAD A-Team)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Autoscale an Oracle Cloud Infrastructure Instance Pool based on OCI Load Balancer HTTP Requests
F99761-01
May 2024