Skip to content

🚀 Deploy do Unified Bot no Google Cloud Run

Guia completo para fazer deploy do bot unificado multi-plataforma no Cloud Run.

📋 Pré-requisitos

  • Google Cloud SDK instalado (gcloud)
  • Projeto GCP configurado
  • Cloud Build API habilitada
  • Cloud Run API habilitada
  • Permissões adequadas no projeto

🔧 Arquivos Necessários

  1. Dockerfile.unified - Build do container
  2. cloudbuild.unified.yaml - Configuração do Cloud Build
  3. unified_bot.py - Aplicação principal
  4. messaging/ - Framework de mensageria

🚀 Deploy Rápido

1. Fazer Deploy

gcloud builds submit \
  --config cloudbuild.unified.yaml

2. Verificar Deploy

# Listar serviços
gcloud run services list

# Ver detalhes
gcloud run services describe ifriend-agent-unified --region us-central1

# Ver logs
gcloud run services logs read ifriend-agent-unified --region us-central1

3. Obter URL do Serviço

gcloud run services describe ifriend-agent-unified \
  --region us-central1 \
  --format 'value(status.url)'

🔗 Configurar Webhooks

Após o deploy, configure os webhooks nas plataformas:

Slack

  1. Acesse https://api.slack.com/apps
  2. Selecione seu app
  3. Em Event Subscriptions:
  4. Request URL: https://SEU-SERVICO-URL/webhook/slack/events
  5. Subscribe to bot events: message.channels, message.im, app_mention

Telegram (se habilitado)

curl -X POST "https://api.telegram.org/bot<TOKEN>/setWebhook" \
  -d "url=https://SEU-SERVICO-URL/webhook/telegram/webhook"

WhatsApp (se habilitado)

Configure no painel do Twilio: - Webhook URL: https://SEU-SERVICO-URL/webhook/whatsapp/webhook

⚙️ Configuração

Variáveis de Ambiente

As variáveis são configuradas no cloudbuild.unified.yaml:

substitutions:
  # Plataformas (separe por vírgula: slack,telegram,whatsapp)
  _MESSAGING_PLATFORMS: 'slack'

  # Slack
  _SLACK_BOT_TOKEN: 'xoxb-...'
  _SLACK_SIGNING_SECRET: '...'

  # Telegram (opcional)
  # _TELEGRAM_BOT_TOKEN: '...'

  # WhatsApp (opcional)
  # _TWILIO_ACCOUNT_SID: '...'
  # _TWILIO_AUTH_TOKEN: '...'
  # _TWILIO_WHATSAPP_NUMBER: 'whatsapp:+14155238886'

  # Backends
  _SESSION_BACKEND: 'redis'      # redis, cloudsql, inmemory
  _MEMORY_BACKEND: 'cloudsql'    # cloudsql, redis, inmemory

  # Redis
  _REDIS_URL: 'redis://IP:6379/0'
  _REDIS_SESSION_TTL: '3600'

  # CloudSQL
  _CLOUDSQL_USER: '...'
  _CLOUDSQL_PASSWORD: '...'
  _CLOUDSQL_DATABASE: '...'
  _CLOUDSQL_UNIX_SOCKET: '/cloudsql/PROJECT:REGION:INSTANCE'

Adicionar Nova Plataforma

  1. Instalar dependência (se necessário):

    # Adicionar em requirements-messaging.txt
    echo "python-telegram-bot==20.0" >> requirements-messaging.txt
    

  2. Configurar variáveis:

    # Em cloudbuild.unified.yaml
    substitutions:
      _MESSAGING_PLATFORMS: 'slack,telegram'
      _TELEGRAM_BOT_TOKEN: 'seu-token'
    

  3. Fazer novo deploy:

    gcloud builds submit --config cloudbuild.unified.yaml
    

  4. Configurar webhook na plataforma

🔍 Verificação e Testes

Health Check

# Verificar status
curl https://SEU-SERVICO-URL/

# Resposta esperada:
{
  "status": "ok",
  "app": "ifriend_agent",
  "platforms": ["slack"],
  "adapters": {
    "slack": {
      "name": "Slack",
      "webhook": "/webhook/slack/events"
    }
  },
  "backends": {
    "session": "redis",
    "memory": "cloudsql"
  }
}

Testar Webhook

# Enviar mensagem de teste no Slack
# Verificar logs:
gcloud run services logs read ifriend-agent-unified \
  --region us-central1 \
  --limit 50

🐛 Troubleshooting

1. Erro de Build

# Ver logs detalhados
gcloud builds list --limit 5
gcloud builds log BUILD_ID

2. Erro de Deploy

# Ver logs do Cloud Run
gcloud run services logs read ifriend-agent-unified \
  --region us-central1 \
  --limit 100

3. Webhook não funciona

  • Verifique se a URL está configurada corretamente na plataforma
  • Verifique os logs do Cloud Run
  • Teste o health check endpoint
  • Verifique se as variáveis de ambiente estão corretas

4. Erro de Conexão Redis

# Verificar conectividade VPC
# O Cloud Run deve estar na mesma VPC do Redis
gcloud run services describe ifriend-agent-unified \
  --region us-central1 \
  --format 'value(spec.template.spec.containers[0].env)'

5. Erro de Conexão CloudSQL

# Verificar se a instância CloudSQL está configurada
gcloud run services describe ifriend-agent-unified \
  --region us-central1 \
  --format 'value(metadata.annotations."run.googleapis.com/cloudsql-instances")'

🔄 Atualizar Deploy

Deploy com Novas Variáveis

# Editar cloudbuild.unified.yaml
# Depois fazer deploy:
gcloud builds submit --config cloudbuild.unified.yaml

Deploy Somente Código (sem rebuild)

# Build local
gcloud builds submit --config cloudbuild.unified.yaml

# Ou atualizar somente a imagem
gcloud run deploy ifriend-agent-unified \
  --image gcr.io/ifriend-platform/ifriend-agent-unified:latest \
  --region us-central1

📊 Monitoramento

Logs em Tempo Real

gcloud run services logs tail ifriend-agent-unified --region us-central1

Métricas

Acesse o Cloud Console: - Navegue até Cloud Run > ifriend-agent-unified - Veja métricas de: - Request count - Request latency - Container instance count - Memory/CPU utilization

Alertas

Configure alertas no Cloud Monitoring para: - Taxa de erro > 5% - Latência > 3s - Instâncias > 10

💰 Custos

Custos estimados do Cloud Run (região us-central1):

Recurso Quantidade Custo/mês
Requests 1M req/mês ~$0.40
CPU 1 vCPU @ 50% ~$12
Memory 2 GB @ 50% ~$3
Total ~$15/mês

Custos adicionais: CloudSQL, Redis (Memorystore)

🔐 Segurança

Secrets Manager (Recomendado)

Para produção, use Secret Manager ao invés de substitutions:

# Criar secret
echo -n "xoxb-seu-token" | gcloud secrets create slack-bot-token --data-file=-

# Dar acesso ao Cloud Run
gcloud secrets add-iam-policy-binding slack-bot-token \
  --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role="roles/secretmanager.secretAccessor"

# Usar no Cloud Run
gcloud run deploy ifriend-agent-unified \
  --image gcr.io/ifriend-platform/ifriend-agent-unified:latest \
  --region us-central1 \
  --update-secrets SLACK_BOT_TOKEN=slack-bot-token:latest

📚 Referências

✅ Checklist de Deploy

  • [ ] Cloud Build e Cloud Run APIs habilitadas
  • [ ] cloudbuild.unified.yaml configurado com credenciais corretas
  • [ ] Redis/Memorystore configurado e acessível via VPC
  • [ ] CloudSQL configurado e acessível
  • [ ] Build executado com sucesso
  • [ ] Deploy no Cloud Run concluído
  • [ ] Health check retorna status OK
  • [ ] Webhooks configurados nas plataformas
  • [ ] Teste de mensagem bem-sucedido
  • [ ] Logs sendo monitorados
  • [ ] Alertas configurados (produção)