Migre da AWS para a Azion
Migre um projeto da AWS para a Azion: faça o deploy, recrie Lambda, CloudFront e regras de WAF, mova dados de S3, DynamoDB e RDS e troque o DNS.
Um projeto na AWS se distribui entre distribuições do CloudFront, funções Lambda, rotas do API Gateway, buckets S3, tabelas DynamoDB, bancos de dados RDS, regras de WAF, zonas do Route 53 e CloudWatch. Com o tempo, cada um ganha seus próprios comportamentos de cache, dependências, políticas de acesso, configurações de capacidade, health checks e alarmes. Mover o projeto significa recriar cada um desses itens na Azion e confirmar que o projeto responde corretamente antes da mudança de DNS.
Na Azion, uma aplicação e suas regras assumem a entrega, o roteamento e o cache, e Connectors alcança as origens. Functions executa o código Lambda. KV Store, Object Storage e SQL Database guardam os dados. Firewall filtra o tráfego, um workload atende o domínio e Edge DNS responde pela zona. Real-Time Metrics, Real-Time Events e Data Stream mostram o que acontece com cada requisição.
Cada etapa deste guia move uma camada, na ordem em que uma migração acontece: inventário, deployment, código e regras, dados, segurança, monitoramento e DNS. O código Lambda migra com mudanças pontuais: o formato do handler, a linguagem do runtime e como o código abre o armazenamento e chama um modelo. Quando um downtime próximo de zero não é um requisito, migre em fases com janelas de manutenção. As gravações param durante cada passo, então os dados não precisam de sincronização paralela.
Os pré-requisitos e os procedimentos desta página mudam conforme a interface que você seleciona:
Pré-requisitos
- Uma conta Azion. Para abrir uma, cadastre-se no Azion Console. Para mais informações, consulte Crie uma conta.
- A conta AWS, com acesso às suas distribuições, funções, armazenamentos de dados e hosted zones.
- Acesso aos registros DNS ou ao registrador de cada domínio que você move.
curledig, para verificar as respostas HTTP e as respostas DNS.
- Acesso ao Azion Console. Para entrar, consulte Acesse Azion Console.
Faça o inventário da conta AWS
Não comece pela aplicação mais complexa do portfólio. Escolha um projeto importante o bastante para testar o caminho completo e pequeno o bastante para migrar rápido. Um bom primeiro projeto tem uma distribuição do CloudFront, algumas funções Lambda, um bucket S3 e talvez uma tabela DynamoDB. Use-o para documentar o processo e os padrões que sua equipe reutiliza. Depois mova mais comportamentos de cache, funções, dados, observabilidade e regras de segurança, na mesma ordem. Mantenha o primeiro deployment pequeno e comprove que ele faz o build e roda na Azion antes de mover domínios, armazenamento ou bancos de dados.
Antes de criar qualquer coisa na Azion, liste o que o projeto usa:
- Templates SAM, apps CDK e stacks CloudFormation, com seus comandos de build e deploy.
- Variáveis de ambiente e secrets, da configuração do Lambda, do AWS Secrets Manager, do Systems Manager Parameter Store, das propriedades de ambiente do Elastic Beanstalk, das configurações do CodePipeline e do CodeBuild e do código-fonte.
- Funções Lambda, seus runtimes, triggers e fontes de eventos.
- APIs do API Gateway, suas rotas, authorizers, stages e usage plans.
- State machines do Step Functions e regras do EventBridge.
- Distribuições do CloudFront: origens, comportamentos de cache, políticas de cache e de requisição à origem, políticas de headers de resposta, CloudFront Functions e triggers do Lambda@Edge.
- Load balancers e seus target groups.
- Transformações de imagem e chamadas ao Bedrock.
- Buckets S3, tabelas DynamoDB, bancos de dados RDS e Aurora e clusters ElastiCache.
- Hosted zones, registros, políticas de roteamento e DNSSEC do Route 53 e certificados do ACM.
- Web ACLs do WAF, managed rule groups, IP sets, regras baseadas em taxa, Bot Control, configurações do Shield e findings do GuardDuty, do Inspector e do Security Hub.
- Dashboards, alarmes, log groups e metric filters do CloudWatch, traces do X-Ray, streams do Firehose e monitores do RUM.
Cada item da lista corresponde a uma etapa deste guia. A tabela em Mapeie cada produto da AWS para a Azion indica o destino de cada um.
Mapeie cada produto da AWS para a Azion
Todo produto da AWS do inventário tem um destino na Azion. Encontre o produto na primeira coluna e mova-o com a etapa que indica seu destino. Um traço (-) na última coluna significa que a Azion não tem um equivalente direto.
| Produto da AWS | O que cobre | Destino na Azion |
|---|---|---|
| Amazon CloudFront | Entrega de conteúdo estático e dinâmico, APIs, aplicações e vídeo | Applications, atendido por um workload, com Connectors para as origens |
| Distribuições do CloudFront | Domínios, origens, comportamento de cache, certificados e segurança de uma entrega | Applications, Connectors e Workloads |
| Alternate domain names do CloudFront | Domínios personalizados de uma distribuição | Os Domains de um workload |
| Cache behaviors do CloudFront | Política de cache, política de requisição à origem, métodos e associações de funções por caminho | Rules Engine para Applications |
| Cache policies do CloudFront | Chaves de cache, TTLs, headers, cookies, query strings e compressão | Cache settings |
| Origin request policies do CloudFront | Os valores da requisição encaminhados à origem | Rules Engine para Applications e Connectors |
| Response headers policies do CloudFront | Headers de segurança e headers de CORS nas respostas | Rules Engine para Applications |
| CloudFront Origin Shield | Uma camada central de cache na frente da origem | Tiered Cache, uma funcionalidade de Cache |
| Invalidação do CloudFront | Remoção de conteúdo do cache antes de ele expirar | Real-Time Purge |
| CloudFront Functions | JavaScript leve para redirecionamentos, reescritas, headers e chaves de cache | Functions |
| Lambda@Edge | Funções Node.js ou Python em eventos do CloudFront | Functions |
| Lambda@Edge para lógica de segurança | Validação de requisições, autenticação e bloqueio | Functions para Firewall |
| Detecção de dispositivos do CloudFront | Tipo de dispositivo repassado à origem | Device Groups |
| AWS Elemental MediaLive | Codificação de vídeo ao vivo em tempo real | Live Ingest, um módulo de Connectors |
| AWS Elemental MediaPackage | Empacotamento e originação de transmissões ao vivo para HLS e DASH | Live Ingest e Applications |
| CloudFront para transmissões ao vivo | Entrega de vídeo ao vivo com AWS Media Services | Applications e Live Ingest |
| AWS Lambda | Computação serverless para código orientado a eventos | Functions |
| Amazon API Gateway | APIs REST, HTTP e WebSocket com integrações de backend | Applications e Functions |
| Validação e throttling do API Gateway | Controles de requisição, throttling e validação | Rules Engine para Applications e Firewall |
| AWS Amplify Hosting | CI/CD baseado em Git e hospedagem para apps estáticos e renderizados no servidor | Applications, atendido por um workload, e Azion CLI |
| AWS App Runner | Aplicações web gerenciadas a partir de código-fonte ou imagens de contêiner | Applications e Orchestrator |
| Amazon Bedrock | Modelos de fundação e desenvolvimento de IA generativa | AI Inference |
| Inferência de modelos do Bedrock | Chamadas a modelos de texto, imagem e embedding | AI Inference |
| Fine-tuning do Bedrock | Personalização de modelos de fundação | LoRA Fine-Tune |
| Importação de modelos personalizados do Bedrock | Importação de modelos de fundação personalizados | AI Inference e LoRA Fine-Tune. AI Inference executa um catálogo de modelos open source e não importa nenhum |
| Inferência em tempo real do SageMaker AI | Endpoints gerenciados de inferência em tempo real | AI Inference |
| Amazon S3 | Armazenamento de objetos para assets, backups, arquivos e sites | Object Storage |
| Hospedagem de sites estáticos do S3 | Sites estáticos servidos a partir de um bucket | Object Storage e Applications, por meio de um storage connector |
| S3 Object Lambda | Objetos transformados pelo Lambda na saída | Object Storage e Functions |
| S3 Object Lambda para imagens | Redimensionamento, marca d’água e ocultação de conteúdo recuperado | Image Processor e Functions |
| Amazon Aurora DSQL | SQL distribuído serverless para transações | SQL Database |
| Amazon DynamoDB | Banco de dados serverless chave-valor e de documentos | KV Store, ou SQL Database para consultas |
| Global tables do DynamoDB | Replicação de dados NoSQL entre várias Regions | KV Store |
| AWS WAF | Web application firewall para aplicações e APIs | Web Application Firewall, um módulo de Firewall |
| AWS Managed Rules for AWS WAF | Managed rule groups para vulnerabilidades comuns | Rule sets do WAF |
| Regras personalizadas do AWS WAF | Condições de correspondência e ações personalizadas | Rules Engine para Firewall |
| AWS WAF Bot Control | Detecção e mitigação gerenciadas de bots | Bot Manager e Bot Manager Lite |
| Regras baseadas em taxa do AWS WAF | Rate limits por IP, headers, URI ou método | Firewall e Functions |
| IP sets do AWS WAF | Listas reutilizáveis de IPs e CIDRs para regras de permissão ou bloqueio | Network lists |
| AWS Shield Standard | Proteção DDoS padrão | DDoS Protection |
| AWS Shield Advanced | Proteção DDoS com mais visibilidade e opções de mitigação | DDoS Protection |
| Mitigação automática do Shield Advanced | Proteções de WAF criadas durante ataques à camada de aplicação | DDoS Protection e Web Application Firewall |
| AWS Network Firewall | Firewall de rede gerenciado para uma VPC | Firewall e Network Shield |
| Elastic Load Balancing | Tráfego distribuído entre targets e zonas | Load Balancer, um módulo de Connectors |
| Application Load Balancer | Balanceamento de carga HTTP e HTTPS na camada 7 | Load Balancer |
| Network Load Balancer | Balanceamento de carga TCP, UDP e TLS na camada 4 | Load Balancer, apenas para origens HTTP e HTTPS |
| AWS Global Accelerator | Endereços IP anycast globais e roteamento pela rede da AWS | Applications e Load Balancer |
| Origin access control do CloudFront | Origens S3 acessíveis apenas pelo CloudFront | Connectors e Origin Shield, um módulo de Connectors, com Origin IP ACL e HMAC |
| Signed URLs e cookies do CloudFront | Acesso a conteúdo privado | Rules Engine para Applications, Functions e a integração Secure Token em um firewall |
| Restrições geográficas do CloudFront | Acesso permitido ou bloqueado por país | Rules Engine para Applications e Network Shield |
| Amazon Route 53 | DNS autoritativo, registro, políticas de roteamento e health checks | Edge DNS |
| AWS Certificate Manager | Certificados TLS: provisionamento, importação, implantação e renovação | Certificate Manager |
| AWS Private CA | Autoridades certificadoras privadas | Certificate Manager, que guarda certificados Trusted CA |
| AWS Private CA para autenticação de clientes | Autenticação de clientes baseada em certificados | mTLS |
| AWS IoT Greengrass | Componentes gerenciados e processamento local nos dispositivos | Orchestrator |
| Deployments do AWS IoT Greengrass | Componentes e configurações enviados aos dispositivos | Orchestrator |
| Amazon ECS Anywhere | Servidores on-premise registrados em clusters ECS | Orchestrator |
| AWS Outposts | Infraestrutura da AWS nas instalações do cliente | Orchestrator |
| Hybrid activations do AWS Systems Manager | Gerenciamento de máquinas que não são EC2 | Orchestrator |
| Métricas do Amazon CloudWatch | Métricas coletadas, consultadas, exibidas em gráficos e com alarmes | Real-Time Metrics |
| Amazon CloudWatch Logs | Logs coletados, monitorados e consultados | Real-Time Events e Data Stream |
| CloudWatch Logs Insights | Consultas interativas de logs | Real-Time Events |
| Amazon Data Firehose | Dados de streaming entregues ao S3, Redshift, OpenSearch e HTTP | Data Stream |
| CloudWatch RUM | Monitoramento de usuários reais para apps de navegador e mobile | Edge Pulse |
| AWS X-Ray | Tracing distribuído entre serviços | Data Stream e Functions |
| AWS Step Functions | Orquestração de workflows com state machines | Functions. A Azion não tem um serviço de workflows |
| Amazon EventBridge | Roteamento de eventos com regras e targets | - |
| Amazon ElastiCache | Cache em memória com Redis ou Memcached | Cache e KV Store |
| Amazon RDS e Aurora | Bancos de dados relacionais gerenciados | SQL Database |
| Amazon GuardDuty | Detecção de ameaças | Firewall e network lists |
| Amazon Inspector | Varredura de vulnerabilidades | - |
| AWS Security Hub | Findings de segurança centralizados | Real-Time Events e Data Stream |
| AWS Marketplace | Software, dados e serviços de terceiros | Marketplace |
| AWS Management Console | Interface web para os serviços da AWS | Azion Console |
| APIs da AWS | Acesso programático aos serviços da AWS | Azion API |
| APIs do CloudWatch | Acesso programático a métricas, logs e alarmes | GraphQL API |
| AWS CLI | Gerenciamento dos serviços da AWS pela linha de comando | Azion CLI |
| AWS SDK for JavaScript | Bibliotecas JavaScript para os serviços da AWS | Azion Lib |
| AWS CloudFormation | Infraestrutura como código para recursos da AWS | Terraform Provider |
| AWS Cloud Development Kit | Infraestrutura definida em código e sintetizada para CloudFormation | Terraform Provider e Azion API |
| Terraform AWS Provider | Gerenciamento de recursos da AWS com Terraform | Terraform Provider |
| Ambiente de runtime do Lambda | A camada de runtime das funções Lambda | Azion Runtime |
| Runtime do CloudFront | O runtime das CloudFront Functions e do Lambda@Edge | Azion Runtime |
A Azion possui um relatório SOC 2 Type 2 e um relatório SOC 3 e é PCI DSS 4.0.1 Level 1 Service Provider. Para as atestações, consulte SOC 2 e SOC 3 e Certificação PCI DSS.
Faça o deploy do projeto na Azion
Na Azion, um projeto vira uma aplicação, e um workload atende essa aplicação em um domínio. A AWS guarda o build e a infraestrutura no template.yaml para SAM ou no cdk.json para CDK. A Azion os guarda no azion.config.js, que também pode ser azion.config.mjs ou azion.config.cjs, conforme o preset.
| Tarefa | AWS | Azion CLI |
|---|---|---|
| Instalar | pip install awscli | curl -fsSL https://cli.azion.app/install.sh | bash ou brew install azion |
| Entrar | aws configure | azion login |
| Executar localmente | sam local start-api | azion dev, que serve em http://localhost:3333 |
| Fazer o deploy | sam deploy --guided ou cdk deploy | azion link e depois azion deploy |
| Ver logs | aws logs tail /aws/lambda/my-function | azion logs cells para os logs de console das funções ou azion logs http para os logs de eventos HTTP |
| Fazer rollback | Rollback do stack | azion rollback, que volta a servir os arquivos estáticos de um deploy anterior |
| Aspecto | AWS SAM ou CDK | Azion |
|---|---|---|
| Infraestrutura como código | Templates YAML ou TypeScript | Um arquivo de configuração JavaScript |
| Testes locais | Emulador local do SAM | azion dev |
| Deployment | Stacks CloudFormation | Recursos criados diretamente pelo azion deploy |
| Frameworks | Configurados manualmente | 19 frameworks e 5 presets genéricos |
azion logs cells e azion logs http retornam os logs dos últimos 5 minutos, e --tail continua exibindo os novos. azion rollback recebe o --connector-id do storage connector que entrega o site. Para as flags, consulte azion logs e azion rollback.
O Azion Console importa um repositório com um de seis presets, e a Azion CLI pede o preset em um seletor. Nenhum dos dois detecta o framework por você.
A API cria a aplicação, suas regras e o workload, um recurso por vez. Para montar essa cadeia, consulte Primeiros passos com Applications.
O deployment responde em um domínio de workload que a Azion atribui sob map.azionedge.net. Antes de mover qualquer domínio de produção, envie uma requisição para o caminho raiz, com esse domínio no lugar de <your-workload-domain>:
A resposta traz o status, os headers e o corpo que o projeto retorna para /. Envie a mesma requisição para cada rota crítica. Um build que passa ainda pode se comportar de outro jeito em tempo de execução, então compare as respostas com as que a AWS retorna.
Se o build falhar na Azion, compare o preset com o framework do projeto e verifique build.preset, build.entry e build.bundler no azion.config.js. O bloco build não tem campo de comando.
Mova as variáveis de ambiente
Variáveis de ambiente guardam chaves de API, credenciais de banco de dados, secrets de autenticação, endpoints de serviços, feature flags e configurações por ambiente. Uma variável que não chega à Azion quebra o projeto em tempo de execução, mesmo quando o deployment tem sucesso.
Na AWS, uma função Lambda lê uma variável de process.env, e os secrets muitas vezes ficam no AWS Secrets Manager ou no Parameter Store. Na Azion, as variáveis pertencem à conta, até 100 delas, e uma função as lê com Azion.env.get(). Cada variável tem uma chave, um valor e uma flag que a marca como secret.
| Aspecto | AWS | Azion |
|---|---|---|
| Acesso | process.env.VARIABLE | Azion.env.get('VARIABLE') ou process.env.VARIABLE |
| Secrets | AWS Secrets Manager e Systems Manager Parameter Store | Variáveis com a flag de secret ativada |
| Tamanho | Definido por função | 32 KB para todas as variáveis de uma função |
Para criar as variáveis no Azion Console, abra a página Variables do menu Account e crie cada variável com sua chave e seu valor. Transforme em secret uma variável que guarda uma credencial.
Depois altere o código que lê as variáveis. Um valor buscado no Secrets Manager passa a ser a leitura de uma variável:
O código que lê process.env.API_KEY continua funcionando em uma função em produção, porque o Azion Runtime suporta process.env para compatibilidade com Node.js. No azion dev, uma função lê o arquivo .env do projeto em vez das variáveis da conta, ou todo o ambiente do shell quando não há arquivo .env. Uma chave que não existe retorna undefined, não um erro. Se uma função lê uma variável como undefined, confirme que a variável existe na conta.
Mova funções Lambda para Functions
As funções Lambda costumam carregar a lógica mais crítica de um projeto: autenticação, personalização, orquestração de APIs e integrações com serviços de terceiros. Na Azion, esse código roda em Functions. Uma função guarda o código JavaScript, uma instância de função o executa em uma aplicação, e uma regra decide quais requisições chegam até ela.
| Aspecto | AWS Lambda | Azion Functions |
|---|---|---|
| Handler | exports.handler = async (event) => {} | export default { async fetch(request, env, ctx) {} } |
| Runtimes | Node.js, Python, Java, Go, .NET e Ruby | JavaScript, em isolates V8 |
| Memória | 128 MB - 10.240 MB | 512 MB por isolate, em todos os planos |
| Timeout | 1 s - 15 min | 2 s de tempo de CPU e 5 minutos de tempo real por invocação |
| Cold start | Comum, especialmente em uma VPC | Nenhum |
| Triggers | SQS, SNS, Kinesis, DynamoDB e API Gateway | Requisições HTTP a que uma regra de uma aplicação ou de um firewall corresponde |
Uma função Lambda escrita em Java, Python ou outro runtime precisa ser reescrita em JavaScript. Builds de frameworks também podem gerar WebAssembly. Uma função faz no máximo 50 chamadas fetch() de saída em uma invocação. Para todos os limites, consulte Limites de Functions.
| Cenário | Cold start do AWS Lambda | Cold start do Azion Functions |
|---|---|---|
| Node.js, sem VPC | 100-300ms | Nenhum |
| Node.js, com VPC | 500ms-2s | Nenhum |
| Java ou Spring | 1-5s | Nenhum |
| Python | 100-500ms | Nenhum |
O handler recebe um Request padrão e retorna um Response. Leia o corpo, a query string e o caminho da requisição em vez do evento:
env é um objeto vazio em uma função em produção, e ctx traz args e waitUntil. O contexto do Lambda e o contexto de requisição do API Gateway passam para request.metadata:
request_id guarda o mesmo valor do header de resposta x-azion-request-id. geoip_city e geoip_region guardam códigos. No azion dev, request.metadata é undefined, então teste o código que o lê em uma função em produção. Para todos os campos, consulte Metadata.
Mapeie triggers do CloudFront para as fases das regras
Uma aplicação processa cada requisição em duas fases. A Request Phase trata o que o usuário enviou, e a Response Phase trata o que a aplicação devolve. Os triggers do Lambda@Edge correspondem a essas fases:
| Trigger do CloudFront | Equivalente na Azion |
|---|---|
| Viewer request | Uma regra da Request Phase, que pode executar uma função |
| Origin request | Uma regra da Request Phase. Nenhuma fase roda entre o cache e a origem |
| Origin response | Uma regra da Response Phase com comportamentos de header, cookie ou redirecionamento |
| Viewer response | Uma regra da Response Phase com comportamentos de header, cookie ou redirecionamento |
Uma função JavaScript roda na Request Phase. Para a Response Phase, o formulário de instância de função do Console informa Only Lua functions can be used in the Response phase. Mova a lógica de resposta para comportamentos da Response Phase, como Add Request Header, que adiciona um header de resposta nessa fase.
O código que lê KV, SQL ou um modelo também muda suas chamadas. As etapas sobre KV Store, SQL Database e AI Inference mostram as novas chamadas. Para as APIs de runtime, consulte Web APIs.
Roteie caminhos do API Gateway para funções
O API Gateway roteia cada método e caminho para um backend, com authorizers, throttling e stages ao redor. Na Azion, uma regra da aplicação corresponde ao método e ao caminho, e seu comportamento Run Function executa uma instância de função. Run Function requer Application Accelerator e Functions na aplicação.
| Aspecto | AWS API Gateway | Azion |
|---|---|---|
| Tipos de API | REST APIs e HTTP APIs | Functions, alcançadas por meio de regras do Rules Engine |
| Rotas | Caminhos de recursos e métodos | Critérios sobre ${uri} e ${request_method} |
| Authorizers | Authorizers Lambda, Cognito e JWT | Uma função em um firewall, que roda antes da aplicação |
| Stages | Stage variables e deployments | - |
| Throttling | Usage plans e rate limiting | Set Rate Limit em uma regra de firewall |
| Domínios personalizados | Mapeamentos de domínio | Os Domains de um workload |
Uma função se torna alcançável em três passos: crie a função, crie uma instância dela na aplicação e crie a regra.
Para criar a função com Azion CLI, salve o código em index.js e execute:
Crie a instância na aplicação, com o ID da função:
Depois crie a regra a partir de um arquivo JSON com azion create rules-engine --application-id <application-id> --phase request --file rule.json. O arquivo traz o corpo do painel da API. Para o procedimento completo, consulte Primeiros passos com Functions.
Novas regras podem levar alguns minutos para propagar. Diante de uma resposta inesperada, aguarde e tente de novo antes de diagnosticar.
Para rotear cada método e caminho para sua própria função, crie uma função e uma instância por rota, como mostra o procedimento anterior. Depois dê a cada rota sua própria regra. Uma regra que corresponde a um método une ${request_method} ao critério de caminho com and:
Envie cada objeto para as regras de requisição da aplicação, como mostra o painel API. Essas duas regras substituem as rotas do API Gateway GET /users/{id} e POST /users. Adicione uma regra do mesmo formato para PUT /users/{id} e DELETE /users/{id}. Para declarar as mesmas funções, instâncias e regras como código, consulte azion.config.js.
Mova um authorizer para uma função do firewall
Um Lambda authorizer retorna uma política IAM que permite ou nega a chamada:
Na Azion, uma função em um firewall decide antes de a aplicação rodar. Toda função em um firewall precisa terminar com um desfecho final: event.continue() deixa a requisição seguir, e event.deny() responde 403 Forbidden. Esta função deixa passar apenas as requisições que trazem o bearer token esperado:
Coloque a verificação que seu authorizer faz, como uma checagem de JWT, no lugar da comparação. Uma requisição sem um token válido recebe 403. Para responder 401, chame event.respondWith(new Response('Unauthorized', { status: 401 })).
A função precisa do ambiente de execução firewall: execution_environment na API ou --execution-environment na Azion CLI. Um firewall com o módulo Functions a executa por meio de uma instância e de uma regra com Run Function. Para os passos, consulte Functions para Firewall e Instâncias de funções.
Substitua Step Functions e EventBridge
A Azion não tem um serviço de orquestração de workflows nem um barramento de eventos. Um workflow do Step Functions vira um código que chama cada passo em sequência dentro de uma função. Uma regra do EventBridge vira uma rota de função que o produtor do evento chama por HTTP.
| Aspecto | AWS Step Functions | Azion Functions |
|---|---|---|
| Definição do workflow | Amazon States Language | JavaScript |
| Estado | State machine integrada | Seu código. O estado persistente vai para KV Store ou SQL Database |
| Tratamento de erros | Retry, catch e fallback | try e catch |
| Visualização | Workflow Studio | O código |
| Limites | Definidos pela state machine | 50 chamadas de saída, 2 s de tempo de CPU e 5 minutos de tempo real por invocação |
| Aspecto | Amazon EventBridge | Azion |
|---|---|---|
| Roteamento de eventos | Regras e targets | Uma regra da aplicação que executa uma função no caminho do evento |
| Padrões de eventos | Correspondência de padrões | Condições no código da função |
| Targets | Mais de 100 serviços da AWS | Endpoints HTTP que a função chama com fetch() |
Esta definição do Step Functions valida um pedido, faz a cobrança e o atende, com um ramo de falha:
O mesmo fluxo roda como uma função. Cada passo é uma chamada de função, e o bloco catch segue o ramo de falha:
Um workflow que espera por horas, ou que precisa sobreviver a uma invocação com falha, não cabe em uma invocação. Mantenha seu estado no KV Store ou no SQL Database e deixe cada chamada avançar um passo.
Uma regra do EventBridge corresponde a eventos por origem, tipo e conteúdo:
Na Azion, o produtor envia os eventos para uma rota de função, e a função aplica o padrão:
A função responde OK depois de tratar cada evento do lote. Data Stream não substitui o barramento: ele envia apenas os logs da própria Azion, de Activity History, Applications, Functions e WAF Events.
Recrie distribuições do CloudFront
Uma distribuição do CloudFront guarda as origens, os comportamentos de cache, o certificado e os domínios em um único recurso. Na Azion, um connector guarda cada origem, uma aplicação guarda as regras e o cache, e um workload guarda os domínios e o certificado.
| Aspecto | AWS CloudFront | Azion |
|---|---|---|
| Configuração | XML ou JSON no CloudFormation | Azion Console, a API, a Azion CLI ou azion.config.js |
| Origens | S3, ALB e origens personalizadas | Connectors do tipo http, storage para um bucket do Object Storage, ou live_ingest |
| Comportamentos | Cache behaviors por caminho | Regras com critérios e Set Connector para escolher a origem |
| Certificados | ACM, apenas em us-east-1 | Certificate Manager, no workload |
| Funções | Lambda@Edge, em 4 triggers | Functions, em regras da Request Phase |
| Response headers policies | Headers de segurança e de CORS | Regras da Response Phase com Add Request Header |
Uma nova aplicação tem Cache e Functions ativados, e Application Accelerator e Image Processor desativados. Uma regra com Set Connector envia as requisições a que ela corresponde para um connector. Quando várias regras correspondentes trazem Set Connector, apenas a última roda, então mantenha uma regra por caminho depois da regra genérica.
Para criar o connector com Azion CLI, salve o corpo do painel da API como connector.json e execute:
Crie a regra de Set Connector a partir de um arquivo com azion create rules-engine, como mostra Primeiros passos com Connectors.
Uma mudança de connector chega à infraestrutura da Azion em alguns minutos, sem um novo deployment. Para servir um prefixo de bucket com cache de um dia e enviar /api/ para uma função sem cache, a distribuição usa estes recursos:
- Um connector do tipo
storagecom o bucket e o prefixo, comoassets/. O build recusa um connectorstoragesemprefix. - Uma configuração de cache com TTL de navegador de 3.600 segundos, TTL de cache de 86.400 segundos, stale cache ativado, Tiered Cache desativado e nenhuma variação por cookie ou query string.
- Uma regra de requisição em
${uri}starts with/com Set Connector e Set Cache Policy. - Uma regra de requisição em
${uri}starts with/api/com Bypass Cache e Run Function.
bypass_cache e run_function requerem Application Accelerator. Bypass Cache não altera o cache do navegador nem o Tiered Cache. Para declarar esses recursos como código, consulte azion.config.js.
Para adicionar os headers de segurança ou os headers de CORS de uma response headers policy, crie uma regra da Response Phase com add_response_header. Seu valor tem o formato Name: value, como Access-Control-Allow-Origin: https://example.com ou Access-Control-Allow-Methods: GET, POST. A regra não adiciona nada a um 404 que a Azion gera sem origem.
O origin access control do CloudFront mantém uma origem S3 privada. Na Azion, Origin Shield em um connector http faz o mesmo com Origin IP ACL e HMAC. O HMAC assina cada requisição com aws4_hmac_sha256, uma região, um serviço e um par de chaves. Para um bucket na sua conta Azion, use um connector storage.
Recrie as configurações de cache
Na Azion, uma configuração de cache define por quanto tempo uma resposta fica em cache e o que faz duas requisições compartilharem uma cópia em cache. Uma regra com Set Cache Policy aplica a configuração às requisições a que corresponde. A regra seleciona uma configuração, e a configuração guarda o TTL e a chave de cache.
| Aspecto | AWS CloudFront | Azion |
|---|---|---|
| Níveis de cache | Caches regionais e os caches de cada site do CloudFront | Cache, Tiered Cache e cache do navegador |
| Chave de cache | Cache policy e origin request policy | Controles Cache vary by da configuração de cache, que requerem Application Accelerator |
| TTL | Padrão de 24h, máximo de 1 ano | Max Age de cada configuração de cache, de 0 a 31.536.000 segundos |
| Purge | Invalidações por caminho | URL, chave de cache e wildcard |
| Conteúdo stale | Origin Shield e stale-while-revalidate | Stale cache, que entrega uma cópia expirada quando a revalidação falha |
Associe cada managed cache policy do CloudFront a uma configuração ou a um comportamento:
| Cache policy do CloudFront | Equivalente na Azion |
|---|---|
| CachingOptimized | Uma configuração de cache com Override cache behavior e um Max Age alto |
| CachingDisabled | O comportamento Bypass Cache em uma regra da Request Phase |
| Elemental-MediaPackage | Enforce HLS cache, que a Azion adiciona quando você seleciona uma fonte Live Ingest: 5 segundos para playlists .m3u8 e 60 segundos para chunks .ts |
| Uma política personalizada | Uma configuração de cache e uma regra com Set Cache Policy |
Max Age tem padrão de 60 segundos. Um valor abaixo de 60 requer Application Accelerator, e uma configuração de cache com Tiered Cache ativado precisa de pelo menos 3 segundos e de Override cache behavior. Stale cache respeita o stale-while-revalidate que a origem envia, ou mantém uma janela de 300 segundos com Override cache behavior. Ele vem ativado por padrão no Azion Console e desativado na API e na CLI.
As flags da CLI não definem o TTL do cache, o comportamento do cache nem Tiered Cache. Envie o corpo completo da configuração de cache a partir de um arquivo com --file, como mostra Primeiros passos com Cache.
Para variar o cache por query string, cookie ou dispositivo, use os controles Cache vary by da configuração de cache: Cache vary by Query String, Cache vary by Cookies e Cache vary by Devices. Eles requerem Application Accelerator na aplicação. No azion.config.js, uma configuração de cache que varia apenas pelos parâmetros version e lang traz cacheByQueryString: { option: 'allowlist', list: ['version', 'lang'] }. As opções são ignore, all, allowlist e denylist. Para os controles, consulte Variação de cache.
Uma invalidação do CloudFront indica uma distribuição e caminhos:
Na Azion, o purge é um endpoint de nível superior, não aninhado em uma aplicação. Um purge por wildcard recebe uma expressão, então cada padrão de caminho é uma requisição própria:
Envie uma segunda requisição com https://example.com/css/*. Um purge por URL, em /v4/workspace/purge/url, aceita até 50 itens. Apenas um purge por chave de cache, em /v4/workspace/purge/cachekey, alcança o Tiered Cache com "layer": "tiered_cache". Um purge por URL ou por wildcard com essa camada falha com 30001. Um purge leva tempo para propagar e aparece no histórico de purges quando termina. Para verificar um objeto purgado, solicite-o com curl -I e leia os headers da resposta. Para os tipos de purge, consulte Real-Time Purge.
Balanceie o tráfego entre origens
Na Azion, Load Balancer é um módulo de um connector, não um recurso separado. Um connector do tipo http guarda cada origem como um endereço, até 15 endereços com Load Balancer ativado e um endereço sem ele. Uma regra com Set Connector envia as requisições da aplicação para o connector.
| Aspecto | AWS ALB e NLB | Azion Load Balancer |
|---|---|---|
| Métodos de balanceamento | Round-robin, least connections e IP hash | Round Robin, Least Connections e IP Hash, que são round_robin, least_conn e ip_hash na API. Nenhum método direciona por localização |
| Health checks | HTTP, HTTPS e TCP | Nenhum. O failover é passivo: Max Retries e os timeouts tratam uma conexão com falha |
| Failover | Failover de target group | Vários endereços Primary com pesos e endereços Backup que recebem tráfego apenas quando todos os primários falham |
| Afinidade de sessão | Cookie e hash de IP | Apenas IP Hash, que associa cada endereço IP de cliente a um endereço |
| Targets | Instâncias EC2, funções Lambda e endereços IP | Endereços de um connector |
| Protocolo | Camada 4 para NLB, camada 7 para ALB | Origens HTTP e HTTPS, em connectors do tipo http |
Um target group do ALB vira um connector. O caminho, o intervalo e os limites de saudável e não saudável do seu health check não têm campo equivalente.
Cada endereço tem um Weight de 1 a 100, que define sua parcela do tráfego. IP Hash recusa endereços Backup, com 28005 na API. Max Retries aceita de 0 a 20, Connection Timeout de 1 a 300 segundos e Read/Write Timeout de 1 a 600 segundos. Esses campos existem apenas com Load Balancer ativado. Quando você o ativa no Azion Console, o formulário preenche Round Robin, 3, 30 e 60. Os padrões da API são 0, 60 e 120.
O comando de atualização precisa do corpo completo do connector. Coloque-o em um arquivo JSON e envie-o com --file, como mostra Primeiros passos com Load Balancer.
Um connector sem Load Balancer não tem timeout configurável. Se uma origem atingir o timeout, verifique o endereço e suas portas e ative Load Balancer para definir os timeouts. Para os campos do connector, consulte Configurações de connectors.
Entregue imagens otimizadas
Na AWS, transformações de imagem geralmente precisam de Lambda@Edge ou de uma origem personalizada. Image Processor redimensiona, recorta, converte e aplica filtros a imagens sob demanda, sem código. Ele não armazena nada: lê a imagem de origem da origem da aplicação, que pode ser um bucket do Object Storage atrás de um connector.
| Aspecto | AWS CloudFront e Lambda@Edge | Azion Image Processor |
|---|---|---|
| Armazenamento | Uma origem S3 | A origem da aplicação, como Object Storage |
| Transformações | Código Lambda@Edge personalizado | Redimensionamento, formato, qualidade, recorte, rotação, preenchimento e marca d’água |
| Formato da URL | Uma implementação personalizada | /image.png?ims=<OPTIONS> |
| Formatos | Uma implementação personalizada | WebP, AVIF, JPEG, GIF e PNG |
| URLs assinadas | Signed URLs do CloudFront | Por meio da integração Secure Token em um firewall |
Image Processor funciona em dois passos: ative o módulo na aplicação e depois crie uma regra com o comportamento Optimize Images. Uma requisição que nenhuma regra desse tipo atende é entregue sem processamento.
Para ativar Image Processor com Azion CLI, siga o painel CLI de Primeiros passos com Image Processor.
Image Processor lê a transformação do parâmetro de query ims:
| Sintaxe | Resultado | Exemplo |
|---|---|---|
?ims=WxH | Redimensiona para a largura e a altura, recortando para caber quando ambas estão definidas | ?ims=400x300 |
?ims=Wx | Redimensiona para a largura, com a altura proporcional | ?ims=400x |
?ims=xH | Redimensiona para a altura, com a largura proporcional | ?ims=x300 |
?ims=fit-in/WxH | Encaixa a imagem dentro das dimensões, sem nunca ampliá-la | ?ims=fit-in/400x300 |
?ims=fit-in/WxH/filters:fill(Color) | Encaixa a imagem e preenche o restante da área com uma cor | ?ims=fit-in/400x300/filters:fill(white) |
Image Processor converte para WebP quando o header Accept do cliente permite. AVIF precisa de ?ims=filters:format(avif) e de um cliente que aceite image/avif. Para manter em cache uma cópia para cada valor de ims, ative Application Accelerator e varie o cache por query string. Para cada parâmetro, consulte Parâmetros de URL.
Mova Bedrock para AI Inference
AI Inference executa um catálogo de modelos open source: large language models, vision language models, um modelo de embedding e um reranker. Um modelo não é um objeto que você cria, e a Azion não hospeda um endpoint de inferência para ele. Uma função chama um modelo pelo seu ID com Azion.AI.run() e não precisa de credencial.
| Aspecto | Amazon Bedrock | Azion AI Inference |
|---|---|---|
| Modelos | Modelos de fundação gerenciados, como Claude, Llama, Titan e Stable Diffusion | Um catálogo de modelos open source. Para adaptar um modelo, use fine-tuning com LoRA |
| Interface | Bedrock Runtime API | Azion.AI.run() dentro de uma função |
| Tipos de modelo | Modelos de texto, imagem e embedding | LLMs, vision language models, um modelo de embedding e um reranker |
| Cobrança | Por token ou por imagem | Compute Time e Requests |
Uma chamada ao Bedrock indica um modelo e envia um corpo específico do provedor:
Na Azion, a função passa o ID do modelo e um corpo de chat:
answer guarda o texto da resposta. Campos como max_tokens e temperature moldam a saída. No azion dev, Azion.AI é undefined, então teste a chamada em uma função em produção. Para os campos da requisição, consulte Invocação de modelos e a API de runtime de IA.
Para um endpoint /v1/chat/completions compatível com OpenAI, faça o deploy do template AI Inference Starter Kit. Ele cria uma aplicação e uma função que atendem esse endpoint. Para fazer o deploy, acesse Azion Console > Create, selecione o template e selecione Deploy. Azion CLI não tem flag de template.
Mova dados chave-valor do DynamoDB para KV Store
O DynamoDB atende dados chave-valor e de documentos. Buscas por chave, sessões, feature flags e configurações vão para o KV Store. Consultas com filtros, índices secundários, agregações e joins vão para o SQL Database, na etapa Mova consultas do DynamoDB e bancos de dados RDS para SQL Database.
| Aspecto | Amazon DynamoDB | Azion KV Store | Azion SQL Database |
|---|---|---|---|
| Modelo de dados | Chave-valor e documentos | Chave-valor | Relacional, no dialeto do SQLite |
| Consultas | Buscas por chave, queries e scans | Buscas por chave | SQL completo |
| Replicação | Global tables entre Regions | Infraestrutura distribuída da Azion | Uma instância principal e réplicas de leitura |
| Consistência | Eventual ou forte | Eventual. Uma gravação fica visível em todos os lugares em até 60 segundos | ACID |
| Índices | GSI e LSI | Nenhum | Índices SQL |
| Capacidade | Sob demanda ou provisionada | Serverless | Serverless |
| Uso do DynamoDB | Destino na Azion |
|---|---|
| Buscas por chave primária | KV Store |
| Operações chave-valor simples | KV Store |
| Armazenamento de sessões | KV Store |
| Feature flags e configurações | KV Store |
| Consultas com filtros | SQL Database |
| Consultas em índices secundários | SQL Database |
| Agregações e joins | SQL Database |
| Dados relacionais | SQL Database |
As global tables do DynamoDB resolvem conflitos com last writer wins e cobram por cada gravação replicada. KV Store não tem Region para escolher: uma gravação se aplica onde chega, e as outras partes da infraestrutura convergem em até 60 segundos.
Uma função abre um namespace com Azion.KV.open(), um global do runtime que não precisa de linha de import:
put serializa um objeto em JSON, e get com 'json' o converte de volta. Azion.KV.open() é o único ponto de entrada e é assíncrono. O namespace precisa existir antes, ou open() lança NotFound. get() retorna null para uma chave inexistente, assim como para uma chave expirada.
KV Store não tem importação em massa, e nenhuma API, comando da CLI ou tela do Console lê ou grava chaves. Para mover os dados:
-
Exporte a tabela da AWS:
Shell -
Transforme cada item em uma chave e um valor.
-
Crie o namespace com uma requisição
POSTparahttps://api.azion.com/v4/workspace/kv/namespaces, com{"name": "my-namespace"}. O nome aceita de 3 a 63 caracteres, diferencia maiúsculas de minúsculas e é permanente: um namespace não pode ser renomeado nem excluído. Para os campos e os erros, consulte Namespaces. -
Grave as chaves a partir de uma função em produção com
kv.put().
A função grava uma chave no máximo uma vez por segundo. Um valor aceita até 25 MB, uma chave até 512 bytes e os metadados até 1.024 bytes. Associe cada TTL do DynamoDB à opção expiration, em segundos Unix, ou a expirationTtl, em segundos com mínimo de 60. Uma gravação fica visível em todos os lugares em até 60 segundos, ou dentro do cacheTtl da leitura. Antes da importação, revise os prefixos das chaves, os formatos dos valores e o código que trata uma chave inexistente. Para o cliente, consulte API de runtime do KV Store.
Substitua o ElastiCache
O ElastiCache mantém dados em memória, atrás de Redis ou Memcached. Na Azion, as respostas HTTP ficam no Cache, e os valores que uma função lê e grava vão para o KV Store.
| Aspecto | Amazon ElastiCache | Azion Cache | Azion KV Store |
|---|---|---|---|
| Tipo | Cache em memória | Cache HTTP | Armazenamento chave-valor distribuído |
| Engines | Redis e Memcached | Respostas HTTP | Azion.KV, de dentro de uma função |
| Persistência | Opcional, com Redis AOF ou RDB | Expira com Max Age | Persiste até a chave expirar ou ser excluída |
| Estruturas de dados | Strings, hashes, lists, sets e sorted sets | Respostas HTTP | Um valor por chave: uma string, um objeto, um ArrayBuffer ou um stream |
| Replicação | Cluster mode e replication groups | Tiered Cache | Infraestrutura distribuída da Azion |
| Acesso | Conexão TCP | Requisição e resposta HTTP | API de runtime |
put recusa um Map, um Set, um WeakMap, um WeakSet, um RegExp e um SharedArrayBuffer com INVALID_VALUE_TYPE. Converta-os em arrays antes.
| Uso do ElastiCache | Destino na Azion |
|---|---|
| Cache de respostas HTTP | Cache |
| Armazenamento de sessões | KV Store |
| Contadores de rate limit | KV Store |
| Feature flags | KV Store |
| Cache de consultas ao banco de dados | Cache e Functions |
| Mensageria Pub/Sub | - |
| Leaderboards e sorted sets | SQL Database |
| Estruturas de dados complexas | SQL Database |
Os comandos do Redis viram chamadas ao KV Store:
delete resolve existindo a chave ou não. Para cache HTTP, consulte Recrie as configurações de cache e Cache settings.
Mova buckets do S3 para Object Storage
Object Storage guarda imagens, documentos, assets estáticos, mídia, uploads e arquivos gerados. Ele fala o protocolo S3, então ferramentas e SDKs S3 o alcançam com um novo endpoint, uma região e um par de chaves.
| Aspecto | Amazon S3 | Azion Object Storage |
|---|---|---|
| Endpoint | https://s3.amazonaws.com/bucket | https://s3.us-east-005.azionstorage.net |
| Região | Várias regiões | us-east-005 |
| Transferência de dados | Cobrada por GB | Sem cobrança de transferência de dados no Object Storage. A entrega aos usuários passa por um workload, cobrada como transferência de dados de Workloads |
| Classes de armazenamento | Standard, Intelligent-Tiering e Glacier | - |
| Buckets por conta | 100 por padrão | 100 |
O par de chaves vem de uma credencial do Object Storage. A secret_key só volta na resposta de criação, então guarde-a nesse momento. Para migrar, a credencial precisa de pelo menos listBuckets, listFiles e writeFiles, além de listAllBucketNames para listar os buckets. deleteFiles requer writeFiles.
Para criar a credencial no Azion Console, use Create Credential no Object Storage. Selecione as capabilities List Files, Read Files, Write Files, List All Bucket Names e List Buckets e depois guarde as chaves que ele mostra.
Um script de migração em Node.js alcança Object Storage com o AWS SDK. Apenas a região, o endpoint e as chaves mudam:
Crie o bucket de destino antes de copiar, no Azion Console, na API ou na CLI. Ferramentas S3 não criam nem removem um bucket na Azion: s3cmd mb e s3cmd rb são recusados com 403 AccessDenied. Um nome de bucket aceita de 6 a 63 caracteres, é único entre todas as contas e não pode começar com azion.
Para copiar os dados com o s3cmd:
-
Execute
s3cmd --configure -c ~/.s3cfg-azione informe estes valores:- Access Key e Secret Key: o par de chaves da credencial.
- Default Region:
us-east-005. - S3 Endpoint:
s3.us-east-005.azionstorage.net. - DNS-style bucket+hostname template:
%(bucket).s3.us-east-005.azionstorage.net. - Use HTTPS protocol:
true.
-
Configure um segundo arquivo,
~/.s3cfg-aws, com as chaves da conta AWS. Uma configuração do s3cmd guarda um endpoint. -
Baixe os objetos do S3:
-
Envie-os para a Azion:
Os objetos estão no bucket da Azion. Para verificar, liste-os com s3cmd -c ~/.s3cfg-azion ls s3://azion-bucket/. s3cmd ls sem bucket lista todos os buckets, o que exige listAllBucketNames. s3cmd put file.png s3://my-bucket/ envia um objeto, e s3cmd get s3://my-bucket/file.png baixa um.
A AWS CLI alcança a Azion por meio de um perfil e de --endpoint-url. Um comando alcança um endpoint, então a cópia também passa por uma pasta local:
No aws configure, informe a access key da Azion, a secret key e us-east-005 como região. O último comando envia a pasta para o bucket da Azion.
O rclone guarda um remote para cada provedor, então copia do S3 para a Azion em um comando. Crie os remotes com rclone config:
aws-s3: storages3, providerAWSeenv_authdefinido comotrue.azion: storages3, providerOther, endpointhttps://s3.us-east-005.azionstorage.neteacldefinido comoprivate.
Depois sincronize:
--progress exibe a transferência enquanto ela roda. Azion Console recusa um upload individual acima de 300 MB. A API e as ferramentas S3 não estão sujeitas a esse limite. Antes da migração, mapeie os buckets, os prefixos de objetos, os assets públicos e privados, os padrões de acesso e a lógica de URLs assinadas. O acesso do bucket aos workloads é read_only, read_write ou restricted, e uma credencial funciona de forma independente dele. Para as operações S3, consulte Compatibilidade com S3 e Use ferramentas compatíveis com S3.
Entregue um bucket por meio de uma aplicação
A entrega pública passa por um connector e uma aplicação, não pelo endpoint S3. Um connector do tipo storage lê um bucket da sua conta, restrito a um prefixo.
Para criar o connector com Azion CLI, salve o corpo do painel da API como connector.json e execute azion create connector --type storage --file connector.json. Para os outros campos, consulte Configurações de connectors.
Para os buckets e seus objetos, consulte Crie e modifique um bucket, Faça upload e download de objetos, Use um bucket como origem e a biblioteca Storage.
Mova consultas do DynamoDB e bancos de dados RDS para SQL Database
SQL Database usa o dialeto SQLite e é totalmente compatível com ACID. Uma instância principal recebe todas as gravações, e réplicas de leitura respondem às leituras. SQL Database está em Preview em todos os planos.
| Aspecto | Amazon RDS e Aurora | Azion SQL Database |
|---|---|---|
| Engines | MySQL, PostgreSQL, MariaDB, Oracle e SQL Server | Dialeto do SQLite |
| Arquitetura | Primária e réplicas de leitura | Uma instância principal e réplicas de leitura |
| Conexão | Connection string e connection pooling | Database.open() do global Azion.Sql, sem pool para gerenciar |
| Gravações a partir do código | Pela conexão | Pela API. Uma conexão do runtime é somente leitura |
| Transações | ACID | ACID |
| Escalabilidade | Escalabilidade vertical e réplicas de leitura | Arquitetura distribuída |
| Vector search | Específico de cada engine | Suportado, com colunas vetoriais, libsql_vector_idx e vector_top_k. Consulte Vector search |
Uma função lê o banco de dados por meio de uma conexão de réplica somente leitura. Azion.Sql é um global, e o import azion:sql faz o build falhar. Um parâmetro de consulta precisa ser um número: uma string JavaScript é recusada com TypeError: unknown variant `String` . Escreva um valor de texto como literal no SQL:
rows.next() retorna a próxima linha, ou null depois da última, e row.getString(i) lê uma coluna pelo índice. Um insert ou delete pela conexão falha com attempt to write a readonly database. No azion dev, Azion.Sql é undefined, então teste o código em uma função em produção. Para scripts no servidor, o pacote @aziontech/sql gerencia bancos de dados pela API.
A Azion CLI não tem comando para SQL Database. Crie o banco de dados no Azion Console ou pela API.
Um nome de banco de dados aceita de 6 a 50 caracteres entre letras, números e hífens e não pode mudar depois da criação. Para os passos, consulte Crie o banco de dados.
Para mover os dados, exporte-os da AWS. Um banco de dados PostgreSQL é exportado como instruções INSERT:
Um cluster Aurora também pode exportar um snapshot para o S3:
Uma exportação do DynamoDB vira instruções INSERT depois que você transforma seus itens. Depois execute as instruções por um destes caminhos:
- A API: envie as instruções no array
statementsde uma requisiçãoPOSTparahttps://api.azion.com/v4/workspace/sql/databases/<database-id>/query. Uma chamada aceita 100 instruções. Uma instrução com falha ainda retorna HTTP200, com uma chaveerrorno lugar deresults. Quando nada pode ser executado, a requisição retorna422com14005. - O EdgeSQL Shell:
.read export.sqlexecuta o script. O shell não inicia em uma instalação limpa, então verifique EdgeSQL Shell antes de depender dele. Para instalá-lo, consulte Instale o SQL Shell.
A Azion não tem API de importação. Para os outros formatos de importação, consulte Importe dados para o SQL Database. Para a API de runtime, consulte API de runtime do SQL Database.
O pg_dump grava tipos do PostgreSQL, e o SQLite guarda cada valor nas suas próprias classes de tipo. Converta os tipos das colunas no schema antes da importação:
| Tipo do PostgreSQL | Tipo do SQLite |
|---|---|
| INTEGER, BIGINT, SMALLINT | INTEGER |
| SERIAL, BIGSERIAL | INTEGER, com autoincremento |
| VARCHAR(n), CHAR(n), TEXT | TEXT |
| BOOLEAN | INTEGER, 0 ou 1 |
| REAL, DOUBLE PRECISION | REAL |
| DECIMAL, NUMERIC | REAL |
| DATE, TIME, TIMESTAMP | TEXT, no formato ISO 8601 |
| JSON, JSONB | TEXT, lido com as funções JSON |
| UUID | TEXT |
| BYTEA | BLOB |
Para o SQL que cada instrução aceita, consulte a referência da linguagem SQLite.
Proteja a aplicação com WAF
Web Application Firewall pontua as requisições em relação a oito famílias de ameaças: cross-site scripting, directory traversal, evading tricks, file upload, identified attack, remote file inclusion, SQL injection e unwanted access. Um conjunto de regras WAF guarda uma sensibilidade para cada família, e uma regra de firewall o aplica com Set WAF.
| Aspecto | AWS WAF | Azion WAF |
|---|---|---|
| Linguagem de regras | Regras JSON em uma web ACL | Critérios do Rules Engine para Firewall |
| Regras gerenciadas | AWS Managed Rules e regras do Marketplace | Um ruleset gerenciado, pontuado por família de ameaças |
| Regras personalizadas | Regras de uma web ACL | Rules Engine para Firewall |
| Escopo | Regional ou CloudFront | Os workloads aos quais o firewall está vinculado |
| Modos | Count e Block | Logging e Blocking |
Associe cada managed rule group da AWS às famílias do único ruleset da Azion:
| Managed rule group da AWS | Equivalente na Azion |
|---|---|
| AWSManagedRulesSQLiRuleSet | A família de ameaças sql_injection |
| AWSManagedRulesXSSRuleSet | A família de ameaças cross_site_scripting |
| AWSManagedRulesCommonRuleSet | O ruleset gerenciado, com as oito famílias |
| AWSManagedRulesLinuxRuleSet | - |
| AWSManagedRulesPHPAppRuleSet | - |
mode é obrigatório em todo comportamento Set WAF e não tem padrão. Comece em Logging, que corresponde à ação Count da AWS, para verificar o que o conjunto de regras bloquearia. Depois mude para Blocking. No modo Blocking, uma requisição que o conjunto de regras bloqueia recebe 400. Para evitar que uma requisição legítima corresponda, adicione uma exceção de WAF ou use a aba Tuning e revise as requisições bloqueadas no Real-Time Events.
Para vincular um firewall com Azion CLI, passe --firewall-id para o deployment do workload. Para o conjunto de regras e a regra, siga Primeiros passos com WAF.
Converta cada regra personalizada do AWS WAF em critérios de firewall. As variáveis do firewall diferem das variáveis da aplicação: o caminho é ${request_uri}, e uma faixa de endereços vai em uma network list correspondida com ${network}.
A mesma regra como critérios da Azion, com o IP set movido para uma network list:
O critério ${network} requer Network Shield no firewall. Para as variáveis e os operadores, consulte Rules Engine para Firewall. Para código que inspeciona requisições, consulte Functions para Firewall.
Recrie IP sets e listas de ameaças
Os IP sets do AWS WAF e os findings de ameaças do GuardDuty viram network lists na Azion. Uma network list guarda endereços IP e faixas CIDR, ASNs ou países, com 1 a 20.000 itens. Uma regra de firewall compara o endereço do cliente com ela por meio do critério ${network}, que requer Network Shield.
| Aspecto | Serviços de segurança da AWS | Azion |
|---|---|---|
| Detecção de ameaças | GuardDuty | Regras de firewall e network lists |
| Varredura de vulnerabilidades | Inspector | - |
| Findings centralizados | Security Hub | Real-Time Events, com campos de WAF em HTTP Requests, e Data Stream para um SIEM |
| Threat intelligence | Feeds de ameaças do GuardDuty | A lista Azion IP Tor Exit Nodes, ID 2 |
| Logs de auditoria | CloudTrail | A fonte de dados Activity History, mantida por 2 anos |
A Azion mantém uma lista para todas as contas: Azion IP Tor Exit Nodes, com ID 2. Nenhuma conta pode alterá-la, e uma gravação nela é recusada com 22004. Uma lista de países é uma lista que você cria com o tipo countries.
Mova os findings nesta ordem:
- Exporte os findings do GuardDuty e coloque os endereços das ameaças baseadas em IP em uma network list.
- Corrija os findings do Inspector na aplicação antes da migração. O WAF protege a aplicação em tempo de execução.
- Leia os equivalentes do CloudTrail na fonte de dados Activity History do Real-Time Events.
- Envie os logs que o Security Hub coletava para um SIEM, como IBM QRadar ou Splunk, com Data Stream.
Para criar uma lista com Azion CLI:
--add-item e --remove-item alteram itens individuais de uma lista existente. Para as flags, consulte Network lists.
Depois referencie a lista em uma regra de requisição do firewall, em /v4/workspace/firewalls/<firewall-id>/request_rules:
O ID da lista é um inteiro JSON. Um ID enviado como string é recusado com 25042, e um firewall sem Network Shield recusa a regra com 25047. Uma lista só é excluída quando nenhuma regra a referencia.
Conte com DDoS Protection
DDoS Protection está ativado em todo workload, sem nada para criar e nada para configurar. Ele mitiga ataques volumétricos, de protocolo e de camada de aplicação, como floods UDP e ICMP, SYN floods, fragmentação de pacotes, floods HTTP e slowloris, nas camadas 3, 4, 6 e 7.
| Aspecto | AWS Shield | Azion DDoS Protection |
|---|---|---|
| Proteção padrão | Automática, sem custo | Automática, e não pode ser desativada |
| Proteção avançada | Shield Advanced, com custo adicional | Regras de firewall personalizadas |
| Camadas | 3, 4 e 7 | 3, 4, 6 e 7 |
| Equipe de resposta | Apenas com Shield Advanced | O Security Response Team, um add-on dos suportes Enterprise e Mission-Critical |
| Cobrança | Proteção de custos com Shield Advanced | Sem medição para as camadas 3 e 4. A mitigação na camada 7 pode gerar tráfego cobrável |
Um firewall mostra a chave DDoS Protection Unmetered em Main Settings > Modules, sempre ativada. Na API, modules.ddos_protection é somente leitura. DDoS Protection não tem limiares, chaves por regra nem alertas. Para uma mitigação direcionada, escreva regras personalizadas no firewall vinculado ao workload. Para os tipos de ataque, consulte Mitigação de ataques.
Network Shield é um módulo diferente do firewall. Ele compara o endereço do cliente com uma network list de endereços IP, faixas CIDR, ASNs ou países, por meio do critério ${network}. Use-o para bloquear ou permitir conjuntos de clientes, restringir países ou aplicar rate limit a um conjunto de clientes.
Recrie o gerenciamento de bots
Bot Manager pontua cada requisição e age conforme a pontuação. Bot Manager Lite é a função do Marketplace incluída em todos os planos, e Bot Manager completo está disponível no Enterprise.
| Aspecto | AWS WAF Bot Control | Azion Bot Manager |
|---|---|---|
| Detecção | Machine learning, heurísticas e fingerprinting | Regras estáticas, um método comportamental dinâmico no Bot Manager completo, fingerprints de dispositivos e network lists de reputação |
| Desafio | CAPTCHA e desafio silencioso | Uma JavaScript Tag para fingerprinting e ALTCHA pela ação redirect |
| Ações | Allow, Count, Block e CAPTCHA | allow, custom_html, deny, drop, hold_connection, random_delay e redirect |
| Versão Lite | Não disponível | Bot Manager Lite |
Bot Manager Lite pontua uma requisição com 26 regras estáticas, em relação a um threshold com padrão de 30, e executa a ação deny por padrão. Ele também pode verificar o cliente em network lists de reputação. Os níveis de tolerância pertencem às regras dinâmicas do Bot Manager completo, que Bot Manager Lite não tem.
Para configurar Bot Manager Lite no Azion Console:
Acesse Azion Console > Marketplace, busque Bot Manager Lite e selecione Install. A instalação tem efeito imediato.
Vá para Firewalls e selecione um firewall com o módulo Functions ativado.
Na aba Functions Instances, crie uma instância do Bot Manager Lite. Nos argumentos JSON, defina threshold e action.
Na aba Rules Engine, crie uma regra com o comportamento Run Function e a instância.
O firewall pontua as requisições do workload. Para cada argumento, consulte Instale Bot Manager Lite e Bot Manager Lite. Para saber como uma função roda em um firewall, consulte Functions para Firewall. A proteção contra bots de terceiros também está disponível pela integração Radware Bot Manager.
Para bloquear um cliente pelo seu user agent, adicione uma regra de firewall:
${header_user_agent} requer o módulo WAF no firewall e suporta apenas matches e does not match. O firewall não tem um comportamento de permissão. Para isentar um cliente, como o Googlebot, adicione um critério does not match à regra de bloqueio ou ordene as regras. Um cliente pode enviar qualquer user agent, então verifique um bot legítimo de outra forma. Para verificar a regra:
A resposta é 403, com a página de erro Forbidden. Uma requisição com um user agent de navegador, como Mozilla/5.0, recebe a resposta normal.
Recrie os rate limits
A Azion limita as taxas de requisições de duas formas, e cada uma cobre uma parte diferente do que as regras baseadas em taxa do AWS WAF fazem. A AWS conta por IP, header, URI ou método, em uma janela de 1 minuto a 1 hora, e bloqueia ou conta. Use o comportamento nativo Set Rate Limit de uma regra de firewall para limitar as requisições por segundo ou por minuto. Ele conta por endereço IP do cliente ou entre todos os clientes. Use a integração Upstash Rate Limiting, um rate limit com penalidade executado como função de firewall, para chaves personalizadas, janelas personalizadas ou um período de penalidade.
| Recurso | Set Rate Limit nativo | Função Upstash Rate Limiting |
|---|---|---|
| Chave de contagem | Endereço IP do cliente ou global | Qualquer combinação de metadados da requisição, headers e hostname |
| Janela | Por segundo ou por minuto | Qualquer intervalo em segundos ou minutos, com limites diferentes para diferentes horários do dia |
| Algoritmo | Leaky bucket, contado em cada data center | Fixed window, sliding window ou token bucket, contado globalmente |
| Resposta | 429, sem header de rate limit | 429 no limite e 403 durante uma penalidade |
| Ação apenas de log | Nenhuma | Nenhuma |
| Requisitos | Nenhum | Uma conta Upstash e Global Database |
Use o rate limit nativo
Um comportamento Set Rate Limit conta as requisições a que sua regra corresponde. Os critérios da regra definem o escopo do limite, como o caminho com ${request_uri} ou o método, que requer WAF no firewall. Rate Limit Type é Req/s ou Req/min, e Limit By é Client IP address ou Global. Average Rate Limit aceita no mínimo 1, e Maximum Burst Size aceita no mínimo 1 e se aplica apenas a Req/s. Nenhum comportamento pode vir depois de Set Rate Limit em uma regra. Uma regra cujos critérios unem vários caminhos com or compartilha uma contagem entre todos eles.
Para criar a regra com Azion CLI, salve o corpo da regra do painel API em um arquivo. Depois passe o arquivo com --file para o comando de regra de firewall. Para os comandos, consulte Primeiros passos com Firewall.
Uma requisição acima da taxa e do burst recebe 429, com a página de erro intitulada Too Many Requests. Para saber como a taxa e o burst admitem requisições, consulte Set Rate Limit. Para as instâncias que um firewall executa, consulte Instâncias de funções.
Use o rate limit com penalidade
A função Upstash Rate Limiting mantém seus contadores em um Upstash Global Database. Por isso, ela conta cada requisição em toda a rede, e não em cada data center. Uma requisição durante uma penalidade recebe 403 Forbidden. Uma requisição válida é contada, e a função retorna 429 Too Many Requests quando a contagem atinge o limite.
Para configurá-la no Azion Console:
Acesse Azion Console > Marketplace, busque Upstash Rate Limiting e selecione Install.
Vá para Firewalls e abra um firewall com Functions ativado em Modules.
Na aba Functions Instances, crie uma instância. Em Function, selecione a função Upstash Rate Limiting e edite os Arguments em JSON.
Na aba Rules Engine, crie uma regra com critérios como Host matches yourdomain.com e o comportamento Run Function com a instância.
Execute o comando da CLI que cria o deployment do workload com o firewall:
A função conta as requisições a que a regra corresponde. Estes argumentos definem uma sliding window de 2 requisições a cada 20 segundos, da meia-noite ao meio-dia UTC, com uma penalidade de 45 segundos:
| Argumento | Descrição |
|---|---|
upstash_redis_rest_url, upstash_redis_rest_token | A URL REST e o token do banco de dados Upstash que guarda os contadores e as penalidades |
rate_limit_prefix | Um prefixo para cada chave, que mantém separadas duas instâncias da função |
rate_limit_key_metadata | Os metadados da requisição que formam a chave, como remote_addr |
rate_limit_key_header | Os headers que formam a chave |
rate_limit_key_hostname | Quando true, o hostname faz parte da chave |
rate_limit_repenalize | Quando true, cada requisição durante uma penalidade a reinicia |
rate_limits | As janelas, pelo menos uma. Quando duas janelas se sobrepõem, vale a primeira da lista |
algorithm | fixed_window, sliding_window ou token_bucket |
requests | As requisições permitidas no intervalo |
interval | A janela, como um número e s ou m. Por exemplo: "120 s" |
start, end | O horário do dia que a janela cobre, em UTC no formato de 24 horas. Os padrões são 00:00 e 23:59 |
penalty_in_seconds | Por quanto tempo um cliente que excede o limite recebe 403. Sem ele, a janela é um rate limit simples |
max_tokens, refil_rate | O tamanho do bucket e a recarga por intervalo de uma janela token_bucket. refil_rate é a grafia que a função lê |
A chave une o prefixo e cada valor que os argumentos selecionam. Neste exemplo, ela é my_rate_limit + client IP + x-a-custom-header value + hostname, como my_rate_limit_127.0.0.1_Value_azion.com. Para a configuração completa, consulte Instale a integração Upstash Rate Limiting.
Reconstrua o monitoramento
A Azion divide a observabilidade em três produtos. Real-Time Metrics mostra agregados ao longo do tempo em gráficos, Real-Time Events responde a consultas sobre requisições individuais, e Data Stream envia os logs para destinos externos.
Real-Time Metrics
| Aspecto | Métricas do Amazon CloudWatch | Azion Real-Time Metrics |
|---|---|---|
| Atualização dos dados | 1-5 minutos | Até 10 minutos para agregar |
| Retenção | 15 meses | 2 anos, exceto 90 dias para httpBreakdownMetrics e 60 dias para botManagerBreakdownMetrics |
| Método de consulta | API GetMetricStatistics e CloudWatch Insights | Dashboards, Copy query, Export CSV e a GraphQL API |
| Métricas | Métricas personalizadas em namespaces | Requisições, dados transferidos, códigos de status, offload de cache, tempo médio de requisição, ameaças de WAF e consultas DNS |
| Granularidade | 1 segundo a 1 dia | 1 minuto abaixo de 2,5 dias, 1 hora até 60 dias e 1 dia acima disso |
| Dashboards | Dashboards do CloudWatch | Real-Time Metrics e o plugin do Grafana |
| Alarmes | Alarmes do CloudWatch | Alertas no destino de um stream do Data Stream, como Datadog ou Splunk |
Os dashboards cobrem estes produtos:
- Applications: Requests, com o total de requisições, as requisições por método e Average Request Time, o tempo médio em segundos que a Azion leva para processar e responder uma requisição. Status Codes, com as respostas 2XX, 3XX, 4XX e 5XX. Data Transferred, Bandwidth Saving e Edge Offload.
- Functions: Total Invocations, dividido em invocações em aplicações e em firewalls.
- Image Processor: Total Requests e Total Requests per Second.
- Tiered Cache: o dashboard Caching Offload, com os gráficos Tiered Cache e Tiered Cache Offload.
- WAF: Threats vs Requests, as ameaças de cross-site scripting, remote file inclusion e SQL injection e as ameaças por país, família e host.
- Edge DNS: Total Queries.
- Bot Manager: Bad Bot Hits, Good Bot Hits, Bot Hits e Transactions. A aba precisa de uma assinatura do Bot Manager.
- Data Stream: Total Data Streamed e Total Requests.
Real-Time Metrics não informa latência, tempo até o primeiro byte nem tempo de resposta da origem. Para ler o status de cache das requisições, filtre um dashboard por Upstream Cache Status, cujos valores incluem HIT, MISS, STALE e EXPIRED. Para encontrar erros da origem, filtre por Upstream Status, que é 0 quando a origem não respondeu.
Para abrir os dashboards, acesse Azion Console > Real-Time Metrics. Ele abre em Build > Applications > Data Transferred, nos Last 5 minutes. Selecione uma aba de categoria, Build, Secure ou Observe, e depois uma aba de produto. Para restringir um dashboard a um workload, adicione o filtro Domain ou Workload. Para exportar um gráfico, abra o menu More options e selecione Export CSV.
Para consultar os mesmos dados, envie uma consulta GraphQL para https://api.azion.com/v4/metrics/graphql. Esta consulta conta as requisições por código de status:
Esta consulta soma os bytes enviados para um host, por intervalo de tempo:
Substitua as datas por um intervalo dentro do período de retenção. Um intervalo além dele retorna um array vazio. limit aceita até 10.000 linhas e tem padrão de 10. Um campo calculado, como dataTransferredOut, não pode ser agregado. O dataset httpMetrics de consultas antigas ainda funciona, mas está obsoleto. Para consultar um gráfico de WAF, como as ameaças por país, abra o menu More options e selecione Copy query.
Para todos os campos, consulte Campos GraphQL do Real-Time Metrics e Crie dashboards. Para dashboards no Grafana, consulte Dashboards personalizados com o plugin do Grafana, dashboards pré-configurados e o repositório do plugin Azion para Grafana. Para ler os dashboards, consulte Analise métricas.
Real-Time Events
| Aspecto | Amazon CloudWatch Logs | Azion Real-Time Events |
|---|---|---|
| Acesso | API GetLogEvents e CloudWatch Logs Insights | Consultas no Azion Console ou na GraphQL API |
| Atraso | De segundos a minutos | Até 30 segundos |
| Retenção | 1 dia a 10 anos | 7 dias, ou 168 horas. Activity History guarda 2 anos. Para uma retenção maior, use Data Stream |
| Linguagem de consulta | CloudWatch Logs Insights | GraphQL, com os campos que você seleciona |
| Organização | Log groups com log streams | Fontes de dados por produto |
| Metric filters | Métricas criadas a partir de logs | Data Stream para um destino externo |
Real-Time Events não precisa de configuração. Cada log group do CloudWatch corresponde a uma fonte de dados:
| Log group do CloudWatch | Fonte de dados do Real-Time Events |
|---|---|
/aws/cloudfront/... | HTTP Requests |
/aws/lambda/... | Functions |
/aws/waf/... | HTTP Requests, que traz os campos de WAF |
/aws/route53/... | Edge DNS |
| CloudTrail | Activity History |
As outras fontes de dados são Functions Console, Image Processor, Tiered Cache e Data Stream.
Para consultar os eventos no Azion Console:
Acesse Azion Console > Products menu > Observe > Real-Time Events.
Selecione a fonte de dados, como HTTP Requests.
Defina o Time Filter, que abre nos últimos 15 minutos. Em Filter by, adicione condições como o host, o status ou o endereço remoto.
A tabela de resultados lista os eventos. Selecione uma linha para abrir a visualização More details, com cada variável do registro. Um intervalo de tempo personalizado fica dentro das últimas 168 horas.
Uma consulta do CloudWatch Logs Insights filtra e ordena as linhas de log:
Para consultar os mesmos dados, envie uma consulta GraphQL para https://api.azion.com/v4/events/graphql. O dataset workloadEvents guarda as requisições HTTP:
Substitua as datas por um intervalo dentro dos últimos 7 dias. statusGte: 500 mantém os erros de servidor, e statusEq: 500 mantém um status. upstreamResponseTime mostra - para uma resposta entregue a partir do cache. A fonte de dados Activity History responde a consultas sobre 2 anos.
Os datasets trazem estes campos, entre outros:
- HTTP Requests:
ts,remoteAddress,remotePort,host,requestUri,requestMethodestatus. Tempo:requestTime,upstreamResponseTimeeupstreamHeaderTime. Bytes:bytesSent,requestLength,upstreamBytesReceivedeupstreamBytesSent. Cache:upstreamCacheStatus. WAF:wafBlock,wafMatch,wafScoreewafLearning, que informa o modo Logging. Localização:geolocCountryName,geolocRegionNameegeolocAsn. TLS:sslCipheresslProtocol. - Functions:
functionsInstanceIdList,functionsList,functionsTimeefunctionLanguage. - Edge DNS:
level,qtype,resolutionType,statusCodeezoneId.
Para todos os campos, consulte Campos GraphQL do Real-Time Events e Investigue requisições com a GraphQL API.
Data Stream
| Aspecto | Amazon Data Firehose | Azion Data Stream |
|---|---|---|
| Acesso | Entrega para destinos configurados | Envio para um destino externo |
| Atraso | Entrega com buffer | Lotes de 2.000 registros ou 60 segundos, entregues em até 3 minutos |
| Retenção | Definida pelo destino | Definida pelo destino |
| Formato | Registros, com transformação opcional por Lambda | Templates que selecionam os campos |
| Destinos | S3, Redshift, OpenSearch e endpoints HTTP | 11 tipos, listados abaixo |
Um stream envia uma fonte de dados para um destino:
- Armazenamento: Amazon S3, Azure Blob Storage e Azion Object Storage, pelo tipo S3.
- Monitoramento: Datadog, Splunk, Elasticsearch e Azure Monitor.
- Streaming: AWS Kinesis Data Firehose e Apache Kafka.
- Analytics: Google BigQuery.
- Segurança: IBM QRadar.
- Personalizado: Standard HTTP/HTTPS POST.
Cada destino do Firehose corresponde a um tipo de endpoint:
| Destino do Firehose | Endpoint do Data Stream |
|---|---|
| S3 | S3, para qualquer armazenamento compatível com S3 |
| Redshift | Google BigQuery ou Standard HTTP/HTTPS POST |
| Elasticsearch | Elasticsearch |
| Endpoint HTTP | Standard HTTP/HTTPS POST |
| Transformação por Lambda | Um template personalizado que seleciona os campos. Data Stream não executa código nos registros |
Um metric filter ou um alarme do CloudWatch vira um stream para um destino de monitoramento, como Datadog ou Splunk, que conta e alerta lá. Um stream precisa de exatamente um entre sampling e um filtro de workload. Salvar um stream ativo com sampling desativa todos os outros streams da conta. Streams com filtro coexistem.
Para criar um stream com Azion CLI, siga o painel CLI de Primeiros passos com Data Stream.
Para um destino Object Storage, a credencial precisa de listAllBucketNames, listBuckets, listFiles e writeFiles, ou todo envio falha com 503. Para os campos, consulte Configurações do stream e Endpoints. Para guias de destinos, consulte Amazon S3, Azion Object Storage, Datadog, Splunk, Elasticsearch, Kinesis, BigQuery e Configure o sampling.
Substitua o tracing do X-Ray
A Azion não coleta traces nem desenha um mapa de serviços. Cada log de requisição traz um ID único, $request_id, que uma ferramenta de tracing une aos logs dos seus outros serviços. Data Stream envia esses logs para a ferramenta, e uma função repassa um trace ID para a origem.
| Aspecto | AWS X-Ray | Azion |
|---|---|---|
| Coleta de traces | Automática com o X-Ray SDK | Logs de requisições enviados pelo Data Stream para uma ferramenta externa |
| Mapa de serviços | Mapa de serviços integrado | A ferramenta externa, como Datadog ou Splunk |
| Análise de traces | Console do X-Ray | A ferramenta externa |
| Anotações | Pares chave-valor personalizados | As variáveis de um template personalizado |
| Sampling | Regras de sampling | Uma taxa de sampling de 1 a 100 por cento |
| Destinos | Console do X-Ray e CloudWatch | 11 tipos de endpoint |
| Conceito do X-Ray | Equivalente na Azion |
|---|---|
| Segment | Uma entrada de log de requisição, da fonte de dados Applications |
| Subsegment | Uma entrada de log de função, de um segundo stream com a fonte de dados Functions |
| Service graph | O mapa de serviços da ferramenta externa |
| Propagação do trace ID | Um header que uma função adiciona à requisição que ela repassa |
| Annotation | Uma variável do template personalizado |
Data Stream alcança estas ferramentas de tracing: Datadog, Splunk, Elasticsearch, Apache Kafka, que alimenta Jaeger ou Zipkin, Google BigQuery, AWS Kinesis Data Firehose e Standard HTTP/HTTPS POST para um sistema personalizado.
Para enviar os campos de trace, crie um template personalizado com uma requisição POST para https://api.azion.com/v4/workspace/stream/templates. O data_set é um objeto JSON, enviado como string, cujos valores são variáveis:
A resposta traz o id do template. Use-o em render_template de um stream com a fonte de dados workloads, como mostra a etapa Data Stream, e uma saída Datadog ou Splunk. No Azion Console, Create Custom Template na seção Render Template abre o mesmo formulário. Um stream guarda uma fonte de dados, então os logs de funções vão em um segundo stream com a fonte de dados functions_console.
Para repassar um trace ID para a origem, execute uma função que encaminha a requisição. Ela lê o ID recebido ou usa o ID de requisição da Azion:
A origem recebe X-Trace-Id, e o cliente recebe o mesmo ID de requisição no header de resposta x-azion-request-id. Para as variáveis de cada fonte de dados, consulte Fontes de dados e variáveis.
Substitua CloudWatch RUM por Edge Pulse
Edge Pulse mede como os visitantes reais alcançam a infraestrutura da Azion a partir dos seus navegadores: navegação, disponibilidade, latência e largura de banda. Toda conta o tem ativo em todos os planos, sem cobrança adicional, então não há nada para criar.
| Aspecto | Amazon CloudWatch RUM | Azion Edge Pulse |
|---|---|---|
| Coleta | SDK JavaScript | Uma tag JavaScript em cada página, a Default Tag ou a Pre-loading Tag |
| Métricas | Carregamento de página, Core Web Vitals e erros de JavaScript | Navegação, disponibilidade, latência e largura de banda em relação à infraestrutura da Azion |
| Configurações | Sampling e eventos personalizados | Nenhuma. A tag não tem taxa de sampling nem eventos personalizados |
| Leitura dos dados | O console do RUM | Consultas à GraphQL API do Real-Time Events, no dataset pulseEvents |
Para adicionar a tag:
Acesse Azion Console > Products menu > Observe > Edge Pulse.
Selecione a Pre-loading Tag para páginas cuja Content Security Policy não permite JavaScript inline. Caso contrário, selecione a Default Tag.
Cole-a antes da tag body de fechamento de cada página que você quer medir e publique as páginas.
Cada visitante executa um teste a cada 30 minutos. Azion Console não tem uma página que mostre os resultados em gráficos: leia-os com a GraphQL API do Real-Time Events. Para os passos, consulte Primeiros passos com Edge Pulse.
Prepare o certificado
Certificate Manager guarda os certificados que os workloads servem. Prepare o certificado antes de o domínio apontar para a Azion, para que os usuários acessem o projeto por HTTPS desde a primeira requisição.
| Área | AWS Certificate Manager | Azion Certificate Manager |
|---|---|---|
| Tipos de certificado | Públicos, privados e importados | Azion SAN, Let’s Encrypt, certificados personalizados e certificados Trusted CA para mTLS |
| Validação | DNS e e-mail | Desafios HTTP-01 ou DNS-01 do Let’s Encrypt |
| Renovação | Automática | Os certificados Let’s Encrypt são renovados a partir de 30 dias antes da expiração de 90 dias. Os certificados personalizados seguem seu próprio ciclo de vida |
| Escopo | Regional, e us-east-1 para CloudFront | Certificados TLS para workloads |
| mTLS | Suportado, com AWS Private CA | Certificados Trusted CA. Azion SAN não suporta mTLS |
| Custo | Gratuito para recursos da AWS | Let’s Encrypt sem custo adicional |
| Certificado padrão | - | Azion SAN cobre o domínio de workload azionedge.net e o hostname azion.app |
| Certificados personalizados | Certificados importados | Upload de um certificado e sua chave privada, de domínio único ou SAN, com chaves RSA 2048 ou P-256 |
| Criptografia até a origem | Origin protocol policy | Transport Protocol Policy do connector: Preserve, Force HTTPS ou Force HTTP |
A Azion emite um certificado Let’s Encrypt assim que você escolhe um preset Let’s Encrypt. Escolha o desafio conforme onde o DNS responde:
- HTTP-01 precisa que o hostname, e cada nome alternativo, já apontem para a Azion.
- DNS-01 funciona antes da migração. Em um provedor de DNS externo, como o Route 53, adicione um CNAME de
_acme-challenge.<domain>para<domain>.letsencrypt.azion.com. No Edge DNS, o registro é automático.
Para uma migração a partir da AWS, use DNS-01.
Para definir o mTLS ou o certificado de um workload com Azion CLI, execute azion update workload --file com o corpo do workload. Para os comandos de certificado, consulte Primeiros passos com Certificate Manager.
Se o certificado não ficar ativo, leia seus campos status e status_detail. Para HTTP-01, verifique se o hostname aponta para a Azion. Para DNS-01, verifique o CNAME _acme-challenge. As novas tentativas continuam conforme o cronograma, então um registro corrigido emite o certificado mais tarde. Em uma falha de handshake TLS, verifique se o certificado cobre o hostname e se os intermediários estão no campo do certificado. Depois verifique o minimum_version do workload. Para as regras de emissão, consulte Emissão e renovação.
O mTLS precisa de um certificado Trusted CA, e um certificado gerado pela Azion não pode ser o Trusted CA. Um certificado do AWS Private CA pode ser exportado e enviado com o preset Trusted CA Certificate. A equipe de vendas ativa o mTLS na conta. Depois defina mtls.enabled, mtls.config.certificate e verification, enforce ou permissive, no workload pela API ou com azion update workload --file. O mTLS funciona apenas por HTTPS. Para os passos, consulte Configure o mTLS em um workload e mTLS.
Mova zonas do Route 53 para Edge DNS
Mover a zona para Edge DNS dá à Azion todos os registros do domínio, incluindo o apex. Toda zona usa os mesmos três nameservers, ns1.aziondns.net, ns2.aziondns.com e ns3.aziondns.org. Pule esta etapa quando mantiver o Route 53 e apontar apenas subdomínios, como mostra Aponte o domínio para o workload.
| Aspecto | Amazon Route 53 | Azion Edge DNS |
|---|---|---|
| Nameservers | Atribuídos por hosted zone | ns1.aziondns.net, ns2.aziondns.com e ns3.aziondns.org para toda zona |
| Tipos de registro | A, AAAA, CNAME, MX, TXT, SRV, NS, SOA, PTR e CAA | A, AAAA, ANAME, CAA, CNAME, DS, MX, NS, PTR, SRV e TXT |
| Políticas de roteamento | Simple, weighted, latency, failover e geolocation | Simple e Weighted |
| Health checks | Health checks do Route 53 | Nenhum |
| DNSSEC | Suportado | Suportado |
| API | API REST | /v4/workspace/dns/zones |
Associe cada política de roteamento:
| Política do Route 53 | Equivalente na Azion |
|---|---|
| Simple | Simple (simple), que responde com todos os valores do registro |
| Weighted | Weighted (weighted): vários registros compartilham um nome e um tipo, e cada um é respondido na proporção do seu peso |
| Latency | - |
| Failover | -. Para origens, Load Balancer envia o tráfego para endereços Backup quando todos os primários falham |
| Geolocation | - |
Um peso aceita de 0 a 255, e 0 mantém o registro sem respondê-lo. A API tem padrão 255, e o Console preenche 100. Registros TXT e NS recusam a política Weighted com 19017.
Recrie cada registro do Route 53 com seu tipo:
| Registro | Uso na Azion |
|---|---|
| A | Endereço IPv4 |
| AAAA | Endereço IPv6 |
| ANAME | Alias do apex para um hostname da Azion, como o domínio do workload. Seu TTL precisa ser 20 |
| CNAME | Alias para outro nome. Guarda exatamente um valor e não pode ficar no apex |
| MX | Troca de e-mail, com sua prioridade |
| TXT | Texto, como SPF e DKIM |
| SRV | Registros de serviço, um por nome |
| CAA | Autoridades certificadoras autorizadas a emitir para o domínio |
| NS | Delegação de um subdomínio |
| DS | Delegation signer de uma zona filha assinada |
| PTR | Consulta reversa |
Edge DNS recusa outros tipos, como SOA. Os registros A, AAAA, ANAME, DS, MX e NS guardam até 10 valores cada.
Para criar zonas e registros com Azion CLI, siga o painel CLI de Primeiros passos com Edge DNS. Flags booleanas precisam de =, como --active=false.
Com o DNSSEC ativado, Edge DNS mostra quatro valores DS: Key Tag, Algorithm 13, Digest Type 2 e Digest. Recarregue a página depois de salvar para vê-los. Adicione-os no registrador, que pode levar até 48 horas para publicá-los. Para os passos, consulte DNSSEC.
Para verificar a migração, consulte os nameservers e os registros e compare a resposta do Route 53 com a resposta do Edge DNS:
O primeiro comando lista os três nameservers da Azion assim que a mudança no registrador se propaga, o que pode levar até 48 horas. O segundo mostra a resposta que o resolver retorna agora. O terceiro e o quarto mostram as respostas do Route 53, com seu próprio nameserver do Route 53, e do Edge DNS. Com o DNSSEC ativado, o último retorna dois registros DNSKEY, com flags 257 e 256 e algoritmo 13. Não consulte um nome novo antes de o registro dele existir: Edge DNS mantém a resposta negativa em cache por uma hora. Para mais comandos, consulte Execute o comando dig e Execute o comando traceroute.
Aponte o domínio para o workload
A mudança de DNS é a virada: assim que o domínio resolve para o workload, os usuários acessam o projeto pela Azion. Uma mudança de domínio afeta os usuários, o posicionamento nas buscas e a disponibilidade, então trate-a como uma transição controlada. Antes da virada, confirme que:
- O certificado está ativo.
- O hostname está nos Domains do workload.
- Os registros DNS estão prontos.
- As rotas críticas e os redirecionamentos respondem como esperado no domínio do workload. Para testá-los com o hostname real antes da virada, consulte Teste uma aplicação pelo arquivo hosts.
- O monitoramento está pronto para acompanhar o tráfego depois da virada.
Aponte cada nome com o registro que sua zona permite:
| Estratégia | Use para | Registro |
|---|---|---|
| CNAME | Um subdomínio, mantendo o Route 53 como provedor de DNS | www CNAME <your-workload-domain> |
| Nameservers | O apex e todos os outros nomes, com Edge DNS respondendo pela zona | Um ANAME no apex para o domínio do workload |
Para verificar um CNAME:
A resposta é o domínio do workload, como xxxxxxxxxx.map.azionedge.net. Mudanças de DNS levam tempo para se propagar. Para as configurações do domínio personalizado no Console, consulte Aponte um domínio para um workload. Para mover os nameservers, consulte Migre os nameservers para a Azion.