Bem-vindo ao Dia 4 dos 12 Dias de DigitalOcean! Ontem, adicionamos notificações SMS do Twilio ao nosso Serviço de Lembrete de Aniversário, tornando-o capaz de enviar mensagens de texto para os aniversários de hoje. 🎂
Hoje, vamos levar as coisas para o próximo nível, implantando nosso script no DigitalOcean Functions. Isso permite que nosso serviço funcione na nuvem sem a necessidade de um servidor dedicado, tornando nosso aplicativo leve, escalável e pronto para automação.
Com essa configuração, você receberá lembretes de aniversário mesmo quando seu computador estiver desligado ou não estiver conectado à internet—não há mais necessidade de executar o script manualmente na sua máquina. 🎉
✨ Por que DigitalOcean Functions?
Às vezes, tudo o que você precisa é de um script simples que roda ocasionalmente. Gerenciar a infraestrutura para algo assim pode ser excessivo. É aí que Functions entra. É uma plataforma sem servidor, o que significa que você pode implantar código que roda apenas quando necessário, e você paga apenas pelo que usa. Perfeito para nosso caso de uso—verificar aniversários e enviar lembretes diariamente.
🚀 O Que Você Vai Aprender
Ao final de hoje, você saberá como:
- Configurar a
doctl
ferramenta CLI da DigitalOcean. - Criar e conectar-se a um namespace sem servidor (a maneira da DigitalOcean de manter funções organizadas).
- Empacotar e implantar seu Serviço de Lembrete de Aniversário para DigitalOcean Functions.
- Testar sua função implantada na nuvem.
🛠 O Que Você Vai Precisar
Antes de começar, certifique-se de que você tem:
- Uma conta na DigitalOcean.
- Um arquivo
.env
com suas credenciais do banco de dados PostgreSQL e credenciais do Twilio
🧑🍳 Receita para o Dia 4: Implantando em Funcionalidades do DigitalOcean
Passo 1: Configure o CLI doctl
Se você já configurou o doctl em sua máquina, pode pular esta etapa. Para aqueles que precisam configurá-lo, siga estas instruções:
Antes de começarmos, vamos falar rapidamente sobre doctl
. É a ferramenta oficial de interface de linha de comando da DigitalOcean que permite gerenciar seus recursos em nuvem diretamente do seu terminal. Nós a usaremos para criar um namespace (uma pasta para nossas funções serverless), implantar nosso script em Python e testar a função.
Configurar é simples:
-
Instale
doctl
: Siga o guia de instalação para o seu sistema operacional. -
Autentique
doctl
: Conecte-o à sua conta da DigitalOcean executando: -
Verifique a instalação: Certifique-se de que tudo está funcionando executando:
Se for bem-sucedido, este comando retornará detalhes sobre sua conta DigitalOcean, como seu e-mail e ID da conta.
Passo 2: Instale o Software Serverless
As Funções DigitalOcean requerem software de suporte serverless, que você precisará instalar. Esta é uma configuração única, então, uma vez instalado, você não precisará fazê-lo novamente para projetos futuros.
Execute o seguinte comando:
Você pode verificar o status da instalação com:
Se você ver um erro como:
Não se preocupe—isso apenas significa que ainda não criamos ou conectamos a um namespace. Vamos resolver isso no próximo passo.
Passo 3: Crie e Conecte-se a um Namespace
Os namespaces são como pastas para organizar funções sem servidor. Vamos criar um para o nosso Serviço de Lembrete de Aniversário:
-
Criar um novo namespace:
-
Conectar ao namespace:
-
Verificar a conexão:
Agora você deve ver uma confirmação de que está conectado ao namespace.
Dica profissional: Para ver uma lista de todos os namespaces disponíveis, use o seguinte comando:
Isso pode ser útil se você estiver gerenciando múltiplos projetos ou quiser verificar o namespace que você acabou de criar.
Passo 4: Inicializar e Configurar a Estrutura do Projeto
O DigitalOcean Functions espera uma estrutura de projeto específica para implantações serverless. Você pode iniciar essa estrutura usando doctl serverless init
, criá-la manualmente ou até mesmo clonar um repositório inicial. Para manter as coisas simples, vamos configurá-la usando doctl serverless init
:
-
Execute o seguinte comando para inicializar o projeto:
Isso cria um diretório de projeto local chamado
my-birthday-reminder-service
com a seguinte estrutura padrão: -
Navegue até o diretório do projeto:
-
Renomeie as pastas para corresponder ao nosso caso de uso:
-
Crie os arquivos necessários:
- Crie um arquivo .env vazio na raiz do projeto:
Este arquivo conterá suas credenciais do banco de dados e do Twilio. O arquivo estará localizado na raiz da pasta
my-birthday-reminder-service
.- Crie um arquivo
requirements.txt
na pastabirthdays
:
Este arquivo listará as dependências do Python necessárias para sua função. Ele estará localizado em
packages/reminders/birthdays
.- Crie um arquivo build.sh na pasta birthdays:
O script
build.sh
é necessário para implantar funções com dependências externas. O comandochmod
garante que o script seja executável em sistemas Mac/Linux.
Estrutura Atualizada: Após completar essas etapas, a estrutura do seu projeto deve parecer com isso:
Dica Profissional: Se você acidentalmente renomear uma pasta, pode executar o comando novamente ou renomeá-la manualmente no seu explorador de arquivos.
Passo 5: Atualizar Arquivos
Agora que a estrutura está pronta, vamos preenchê-la com os arquivos necessários. Abra o diretório my-birthday-reminder-service no seu editor de código favorito
1. Atualize project.yml
O arquivo project.yml
é um arquivo de configuração que define a estrutura, variáveis de ambiente e funções do seu projeto serverless. Substitua seu conteúdo por:
Este arquivo configura o pacote de lembretes e mapeia variáveis de ambiente para as Funções do DigitalOcean. Cada variável corresponde às credenciais necessárias para sua integração com o banco de dados e o Twilio.
2. Atualize seu arquivo .env
Consulte Dia 1: Configurando um Banco de Dados PostgreSQL para Lembretes de Aniversário para as credenciais do banco de dados e Dia 3: Verificando Aniversários e Enviando Notificações SMS para as credenciais do Twilio para preencher os seguintes valores:
Nota: O arquivo .env
é usado para armazenar credenciais sensíveis de forma segura. Esses valores serão lidos pelo seu arquivo project.yml
e mapeados para o ambiente serverless durante a implantação, tornando-os acessíveis à sua função na nuvem.
3. Adicionar Dependências
Atualize o arquivo requirements.txt
com as seguintes dependências:
pg8000
: Uma biblioteca cliente PostgreSQL em Python puro.
python-dotenv
: Usado para carregar variáveis de ambiente do arquivo .env
.
twilio
: A biblioteca Twilio para Python para envio de mensagens SMS.
4. Atualizar build.sh
Adicione o seguinte script ao arquivo build.sh
:
Este script garante que todas as dependências estejam empacotadas corretamente com sua função. O chmod +x
do Passo 4 garante que ele seja executável.
5. Atualizar __main__.py
Este é o script principal para o seu Serviço de Lembrete de Aniversário. Estamos essencialmente usando o script que construímos no Dia 3 para enviar notificações de aniversário. No entanto, para torná-lo compatível com as Funções do DigitalOcean, precisamos fazer alguns pequenos ajustes.
Atualize o arquivo __main__.py
com o seguinte conteúdo:
Aqui está o que mudamos:
-
Adicionada uma função
main(params)
: DigitalOcean Functions espera uma função de ponto de entrada chamadamain
, que aceita um argumentoparams
. É aqui que a função começa a execução. -
Movida a lógica do script dentro da função
main
:
O código do Dia 3 foi encapsulado dentro da funçãomain
para alinhar-se a esse requisito. -
Tudo o mais permanece o mesmo:
A lógica de conexão com o banco de dados, as verificações de aniversários e a lógica de notificação por SMS não foram alteradas.
Passo 5: Empacotar e Implantar
Com tudo em ordem, implante seu projeto nas Funções do DigitalOcean:
- Implantar o projeto:
Para verificar se sua função foi implantada com sucesso no namespace:
- Acesse o Painel de Controle do DigitalOcean e navegue até Funções na barra lateral esquerda.
- Localize seu namespace (por exemplo, my-birthday-reminder-namespace).
- Verifique se sua função aparece sob o namespace, tipicamente listada como
reminders/birthdays
. - Clique no nome da função para ver os detalhes, incluindo logs, configuração e histórico de invocações.
Passo 6: Teste Sua Função Implantada
Uma vez que sua função esteja implantada, é hora de testá-la. Você pode invocar a função manualmente para garantir que ela funcione conforme o esperado. Existem duas maneiras de fazer isso:
Opção 1: Usando o CLI do DigitalOcean
Se tudo estiver configurado corretamente, sua função será executada na nuvem, verificando os aniversários de hoje e enviando notificações por SMS.
Opção 2: Usando o Painel do DigitalOcean
- Vá para o Painel de Controle do DigitalOcean.
- Navegue até Funções e localize sua função de lembretes/aniversários.
- Clique em Executar para executá-la manualmente.
- Veja a saída e os logs diretamente no console.
Esse método é especialmente útil se você prefere uma interface visual ou deseja verificar os logs em um formato limpo e fácil de ler.
Dicas de Teste
Quando você invocar a função, ela verificará os aniversários que coincidem com a data de hoje. Se houver uma correspondência, você receberá uma mensagem de texto com os detalhes. Para testar a função de forma eficaz:
- Adicione um ou mais aniversários no seu banco de dados que correspondam à data atual.
- Verifique o console ou os registros do CLI para confirmar que a função foi executada com sucesso.
🎁 Conclusão
Aqui está o que realizamos hoje:
✅ Configuramos o doctl
e criamos um namespace para nosso projeto.
✅ Refatoramos o script Python para implantação.
✅ Empacotamos e implantamos o Serviço de Lembrete de Aniversário nas Funções do DigitalOcean.
✅ Testamos a função na nuvem usando tanto o CLI quanto o Painel do DigitalOcean.
Próximo passo: Embora este seja um grande avanço, ainda estamos executando a função manualmente. No próximo post, vamos automatizar esse processo para que o Serviço de Lembrete de Aniversário seja executado automaticamente todos os dias a uma hora específica. Imagine acordar com um lembrete por mensagem de texto sem levantar um dedo—vamos fazer isso acontecer amanhã! 🚀