12 Dias do DigitalOcean (Dia 5) – Automatizando Lembretes de Aniversário com Gatilhos Diários

Bem-vindo ao Dia 5 dos 12 Dias de DigitalOcean! Ontem, você configurou seu Serviço de Lembrete de Aniversário para rodar no DigitalOcean Functions, o que significa que agora está sem servidor e pronto para a nuvem. 🎉 Hoje, você dará um passo a mais automatizando-o para funcionar em seu próprio cronograma—sem necessidade de entrada manual.

Ao final deste guia, seu serviço (ou qualquer outra função em que você esteja trabalhando) será executado automaticamente em um horário definido todos os dias. Isso significa que não há mais necessidade de lembrar de acioná-lo você mesmo—ele simplesmente funciona.

Por que Automatizar?

Implantar sua função na nuvem foi uma grande vitória ontem, mas ter que executá-la manualmente anula o propósito da automação. O foco de hoje é agendar o serviço para rodar automaticamente—como um relógio—para que você possa configurá-lo e esquecê-lo. O DigitalOcean Functions possui agendamento embutido usando Triggers para esse exato propósito, e você tem duas maneiras de configurá-lo.

🚀 O que você aprenderá

Ao final do dia, você saberá como:

  1. Configurar um acionador diário para executar sua função automaticamente.
  2. Aprender duas maneiras de fazer isso—através do Painel de Controle da DigitalOcean ou com o CLI doctl e project.yml.
  3. Testar a configuração para garantir que funcione.

🛠 O que você precisará

Antes de começar, certifique-se de ter o seguinte:

  1. Uma função já implantada na DigitalOcean (por exemplo, o Serviço de Lembrete de Aniversário do Dia 4: Construindo um Serviço de Lembrete de Aniversário) para automatizar com acionadores.
  2. Se estiver usando o CLI doctl, você precisará do arquivo project.yml para sua função. Você pode conferir o Dia 4 para instruções sobre a instalação e configuração do CLI doctl, e a criação do arquivo project.yml.

🧑‍🍳 Receita para o Dia 5: Automatizando Funções com Disparadores

Passo 1: Configurar um Disparador para Sua Função

A DigitalOcean oferece duas opções para configurar disparadores:

  1. Opção 1: Usar o Painel de Controle para uma configuração rápida e fácil.
  2. Opção 2: Usar o CLI doctl para um controle mais robusto e programático.

Aviso: Lembre-se de que os acionadores criados no Painel de Controle são perdidos se você redeploy a função usando o CLI. Se você for redeploy com frequência, use a Opção 2 para adicionar acionadores diretamente no arquivo project.yml.

Opção 1: Usando o Painel de Controle para Criar um Acionador

A maneira mais fácil de configurar um acionador é através do Painel de Controle da DigitalOcean. É rápido, não requer configuração e é ideal para configurações simples e pontuais.

  • Navegue até a página principal de Funções no painel da DigitalOcean.
  • Encontre sua função (por exemplo, reminders/birthdays) e clique na aba Acionadores.

  • Clique em Criar Acionador, adicione um Nome para o seu acionador. Isso pode ser qualquer coisa descritiva, como acionador-diario-aniversario. O nome deve conter apenas caracteres alfanuméricos, traços e pontos.
  • Adicione uma expressão cron para definir o agendamento. Por exemplo, 0 9 * * * significa que a função será executada todos os dias às 9:00 da manhã.

Nota: Se você não tem certeza de como o cron funciona, confira o crontab.guru para um guia útil.

  • Salve o acionador.

Depois de criar seu acionador, é uma boa ideia testá-lo para garantir que tudo funcione como esperado. Pule para a seção Testar a Automação abaixo para aprender como.

Aviso: Embora o painel seja simples e eficaz, quaisquer gatilhos que você criar aqui serão substituídos ou excluídos se você reimplantar a função usando a CLI. Para atualizações frequentes ou implantações programáticas, pule para Opção 2.

Opção 2: Usando a doctl CLI com project.yml

Você também pode criar gatilhos adicionando-os diretamente ao seu arquivo project.yml. Este método é mais confiável para reimplantações frequentes, pois garante que seus gatilhos estejam sempre incluídos na configuração da função. Ao contrário da opção do Painel de Controle descrita anteriormente, essa abordagem impede que os gatilhos sejam substituídos ou perdidos durante as reimplantações.

Abaixo está como você pode configurá-lo:

  • Abra seu arquivo project.yml do Dia 4: Implementando Notificações de Aniversário com Funções DigitalOcean. Pode se parecer com isso:

    pacotes:
      - nome: lembretes
        compartilhado: falso
        ambiente:
          DO_DB_NOME: "${DB_NOME}"
          DO_DB_USUARIO: "${DB_USUARIO}"
          DO_DB_SENHA: "${DB_SENHA}"
          DO_DB_SERVIDOR: "${DB_SERVIDOR}"
          DO_DB_PORTA: "${DB_PORTA}"
          TWILIO_CONTA_SID: "${TWILIO_CONTA_SID}"
          TWILIO_AUTENTICACAO_TOKEN: "${TWILIO_AUTENTICACAO_TOKEN}"
          TWILIO_TELEFONE_DE: "${TWILIO_TELEFONE_DE}"
          TWILIO_TELEFONE_PARA: "${TWILIO_TELEFONE_PARA}"
        funções:
          - nome: aniversarios
            tempo_de_execucao: python:default
    
  • Adicione uma seção triggers à configuração da sua função para definir o cronograma:

    triggers:
      - name: daily-birthday-trigger
        sourceType: scheduler
        sourceDetails:
        cron: "0 9 * * *"
    
  • Arquivo project.yml atualizado final:

    pacotes:
      - nome: lembretes
        compartilhado: falso
        ambiente:
          DO_DB_NAME: "${DB_NAME}"
          DO_DB_USER: "${DB_USER}"
          DO_DB_PASSWORD: "${DB_PASSWORD}"
          DO_DB_HOST: "${DB_HOST}"
          DO_DB_PORT: "${DB_PORT}"
          TWILIO_ACCOUNT_SID: "${TWILIO_ACCOUNT_SID}"
          TWILIO_AUTH_TOKEN: "${TWILIO_AUTH_TOKEN}"
          TWILIO_PHONE_FROM: "${TWILIO_PHONE_FROM}"
          TWILIO_PHONE_TO: "${TWILIO_PHONE_TO}"
        funções:
          - nome: aniversários
            tempo de execução: python:padrão
            gatilhos:
              - nome: diário-aniversário-gatilho
                tipoFonte: agendador
                detalhesFonte:
                  cron: "0 9 * * *"
    

    Isso informa à DigitalOcean para executar a função aniversários todos os dias às 9:00 AM.

    1. gatilhos seção: Define o nome, tipo e cronograma para o gatilho. Você pode nomear seu gatilho de qualquer maneira descritiva, como gatilho-diário-aniversário.

    2. cron: Especifica o horário em que a função será executada diariamente em UTC. A expressão cron 0 9 * * *, por exemplo, agenda a função para ser executada todos os dias às 9:00 AM.

  • Salve o arquivo e implante-o executando o seguinte comando a partir do diretório que contém a pasta my-birthday-reminder-service:

    doctl serverless deploy my-birthday-reminder-service
    

    Importante: Certifique-se de executar o comando a partir do diretório pai, e não dentro da pasta my-birthday-reminder-service. Executá-lo no local errado pode resultar em um erro como este:

    ❯ doctl serverless deploy my-birthday-reminder-service
    Error: ENOENT: no such file or directory, lstat
    
  • Uma vez que a implantação seja bem-sucedida, você verá uma mensagem de confirmação semelhante a esta:

    Funções implantadas
      - reminders/birthdays
    Triggers implantados:
      - daily-birthday-trigger
    

  • Vá para o seu painel para verificar se o acionador foi criado na seção Funções.

Dica Profissional: Para testar seu acionador, defina temporariamente a expressão cron para alguns minutos a partir de agora (por exemplo, 28 9 * * * se forem 9:25 AM). Após confirmar que está funcionando, atualize para o agendamento pretendido e redeploy.

Passo 2: Testar a Automação

Vamos testar seus acionadores para garantir que estão funcionando. Em vez de esperar que sejam acionados no horário habitual, você pode defini-los temporariamente para serem executados alguns minutos a partir de agora. Veja como fazer:

  • Defina a expressão cron para o seu acionador para alguns minutos a partir do horário atual (em UTC). Por exemplo, se for 9:25 AM UTC, defina a expressão cron para 28 9 * * * para que a função seja executada às 9:28 AM UTC.

    Nota: Não sabe como converter seu horário local para UTC? Ferramentas como Conversor de Fuso Horário podem ajudar.

  • Salve o gatilho atualizado (se estiver usando o Painel de Controle) ou redeploy seu arquivo project.yml atualizado (se estiver usando a CLI):

    doctl serverless deploy my-birthday-reminder-service
    
  • Aguarde a execução do gatilho, depois verifique os logs de ativação para confirmar que a função foi executada com sucesso:

    doctl serverless activations logs --function reminders/birthdays --last
    

Nota: Os logs de ativação registram detalhes sobre quando sua função foi executada, incluindo se ela foi executada com sucesso ou encontrou erros. Eles são uma maneira útil de verificar se seu gatilho foi acionado no horário programado.

Este comando retornará os detalhes da ativação mais recente da sua função. Por exemplo, você pode ver algo como isto:

=== 59e8e4f482874d79a8e4f48287dd79ef success 12/23 07:46:33 reminders/birthdays:0.0.6
2024-12-23T07:46:33.323205805Z stdout: Message sent for Charlie Brown. Message SID: SM85f5caeb3ec09239e0d8bdaaba2b158b

Isso confirma que o gatilho foi acionado e a função foi ativada com sucesso! 🎉

Nota: Uma vez que você tenha verificado que tudo está funcionando, atualize a expressão cron para o cronograma pretendido (por exemplo, 0 9 * * * para 9:00 AM UTC diariamente) e salve ou redeploy.

Uma Nota Rápida sobre Logs

Embora o comando logs de ativações seja uma ótima maneira de verificar as execuções recentes, às vezes você precisará de logs mais detalhados para depurar ou investigar problemas com sua função. A DigitalOcean também oferece opções para encaminhar esses logs para serviços de logging externos, facilitando o monitoramento e a resolução de problemas da sua aplicação ao longo do tempo.

No Dia 6, você aprenderá a visualizar logs diretamente, interpretá-los de forma eficaz e configurar o encaminhamento de logs para serviços externos como Logtail ou Papertrail. Essas ferramentas ajudarão você a ficar facilmente por dentro do desempenho de suas funções.

🎁 Conclusão

Aqui está o que você realizou hoje:

  1. Você automatizou seu Serviço de Lembrete de Aniversário (ou qualquer outra função) para ser executado diariamente.
  2. Você aprendeu duas maneiras de configurar gatilhos – através do Painel de Controle e com o CLI doctl.
  3. Você testou sua configuração para garantir que funcione como esperado.

Aqui estão os tutoriais anteriores desta série:

Próximo Passo: Agora que seu serviço está em execução de forma independente, o próximo passo é monitorá-lo de forma eficaz. No próximo tutorial, você aprenderá como visualizar os logs da sua função e encaminhá-los para serviços externos para simplificar o rastreamento e solução de problemas. Até lá!

Source:
https://www.digitalocean.com/community/tutorials/automating-birthday-reminders-with-triggers