🚀 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¶
- Dockerfile.unified - Build do container
- cloudbuild.unified.yaml - Configuração do Cloud Build
- unified_bot.py - Aplicação principal
- 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¶
- Acesse https://api.slack.com/apps
- Selecione seu app
- Em Event Subscriptions:
- Request URL:
https://SEU-SERVICO-URL/webhook/slack/events - 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¶
-
Instalar dependência (se necessário):
# Adicionar em requirements-messaging.txt echo "python-telegram-bot==20.0" >> requirements-messaging.txt -
Configurar variáveis:
# Em cloudbuild.unified.yaml substitutions: _MESSAGING_PLATFORMS: 'slack,telegram' _TELEGRAM_BOT_TOKEN: 'seu-token' -
Fazer novo deploy:
gcloud builds submit --config cloudbuild.unified.yaml -
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.yamlconfigurado 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)