O arquivo azion.config.js é um arquivo de configuração de IaC criado durante o processo de build da aplicação, com base no preset selecionado, e serve como a fonte de verdade para a configuração. Cada preset fornece um conjunto de configurações padrão, que podem ser substituídas pelo usuário. Se o arquivo for excluído, a configuração padrão será recriada na próxima vez que o processo de build for disparado.
As configurações definidas por este arquivo incluem:
- Build Configurations
- Origins
- Cache Settings
- Rules Engine
- Network List
- Purge Settings
- Firewall Settings
- WAF Settings
- Build Configurations
- Workloads
- Connectors
- Applications
- Cache Settings
- Rules Engine
- Network List
- Purge Settings
- Firewall Settings
- WAF Settings
- Custom Pages
- KV Store
Referência da API
defineConfig
Configura e valida as opções para a Application.
Parâmetros:
config: AzionConfig- Objeto de configuração para Applications.
Tipos
AzionConfig
Propriedades:
build?: AzionBuild- A configuração de build.domain?: AzionDomain- O objeto domínio.origin?: AzionOrigin[]- Lista de origens.cache?: AzionCache[]- Lista de configurações de cache.rules?: AzionRules[]- Lista de regras de application.purge?: AzionPurge[]- List de URLs ou CacheKeys to purge.networkLists?: AzionNetworkList[]- Lista de network lists.waf?: AzionWaf[]- Lista de configurações do WAF.
AzionBuild
A definição de tipos para a configuração de build.
Propriedades:
builder?: 'esbuild' | 'webpack'- O builder a ser utilizado.preset?: string- O preset a ser utilizado.entry?: string- O arquivo de entrada.polyfills?: boolean- Se deve utilizar Polyfillsworker?: boolean- Se deve realizar o build de um worker.custom?: Record<string, any>- Configurações customizadas de build.memoryFS?: { injectionDirs: string[], removePathPrefix: string }- Configuração do sistema de arquivos em memória.
AzionDomain
Definição de tipo para a configuração de domínio.
Propriedades:
name: string- O nome do domínio.cnameAccessOnly?: boolean- Se deve restringir o acesso apenas a CNAMEs.cnames?: string[]- Lista de CNAMEs para o domínio.id?: number- ID do domínio.edgeApplicationId?: number- ID da application.edgeFirewallId?: number- ID do firewall.digitalCertificateId?: string | number | null- ID do certificado digital.active?: boolean- Se o domínio está ativo.mtls?: MTLSConfig- Configuração para mTLS.verification: 'enforce' | 'permissive'- Modo de verificação mTLS.trustedCaCertificateId: number- ID do certificado trusted CA.crlList?: number[]- Lista de Certificate Revocation Lists (CRLs).
AzionOrigin
Definição de tipo para a configuração de origem.
Propriedades:
id?: number- ID da origem.key?: string- Chave para a origem.name: string- Nome da origem.type: string- Tipo da origem. Por exemplo: ‘single_origin’, ‘load_balancer’.bucket?: string | null- Nome do bucket para origens de armazenamento.prefix?: string | null- Pefixo para origens de armazenamento.addresses?: (string | { address: string; weight?: number })[]- Array de endereços para a origem.hostHeader?: string- Header de host customizado.protocolPolicy?: 'http' | 'https' | 'preserve'- Política de protocolo para a origem.redirection?: boolean- Se deve ativar redirecionamento.method?: 'ip_hash' | 'least_connections' | 'round_robin'- Método de balanceamento de carga.path?: string- Caminho para a origem.connectionTimeout?: number- Timeout de conexão em segundos.timeoutBetweenBytes?: number- Timeout entre bytes em segundos.hmac?: { region: string; accessKey: string; secretKey: string }- Configuração de HMAC para a origem.
AzionCache
Definição de tipo para a configuração de cache.
Propriedades:
name: string- Nome da configuração de cache.stale?: boolean- Se deve permitir conteúdo stale.queryStringSort?: boolean- Se os parâmetros da string de consulta devem ser ordenados.methods?: CacheMethods- HTTP a serem armazenados em cache.post?: boolean- Se deve armazenar em cache requisições do tipo POST.options?: boolean- Se deve armazenar em cache requisições do tipo OPTIONS.
browser?: BrowserCacheConfig- Configurações de cache do browser.maxAgeSeconds: number | string- Validade máxima em segundos para o cache do browser.
edge?: EdgeCacheConfig- Configurações do Cache.maxAgeSeconds: number | string- Validade máxima em segundos para o Cache.
cacheByCookie?: CacheByCookieConfig- Cache com base nas configurações de cookies.option: 'ignore' | 'varies' | 'whitelist' | 'blacklist'- Opção de cache por cookie.list?: string[]- Lista de cookies a serem usados para cache.
cacheByQueryString?: CacheByQueryStringConfig- Cache com base nas configurações de query string.option: 'ignore' | 'varies' | 'whitelist' | 'blacklist'- Opção de cache por query string.list?: string[]- Lista de Parâmetros query string a serem utilizados para cache.
AzionRequestRule
Definição de tipo para a configuração da regra de requisição.
Propriedades:
name: string- Nome da regra de requisição.description?: string- Descrição da regra de requisição.active?: boolean- Se a regra está ativa.match: string- Critérios de correspondência para a regra.variable?: string- Variável a ser usada na correspondência.behavior?: RequestBehavior- Comportamento a ser aplicado quando a regra for correspondida.setOrigin?: { name: string; type: string }- Definir uma nova origem.rewrite?: string- Reescrever a requisição.setHeaders?: string[]- Definir cabeçalhos.bypassCache?: boolean | null- Ignorar cache.httpToHttps?: boolean | null- Forçar HTTPS.redirectTo301?: string | null- Redirecionar com status 301.redirectTo302?: string | null- Redirecionar com status 302.forwardCookies?: boolean | null- Encaminhar cookies.setCookie?: string | null- Definir um cookie.deliver?: boolean | null- Entregar o conteúdo.capture?: { match: string; captured: string; subject: string }- Configuração de captura.runFunction?: { path: string; name?: string | null }- Executar uma função serverless.setCache?: string | { name: string; browser_cache_settings_maximum_ttl?: number | null; cdn_cache_settings_maximum_ttl?: number | null }- Configuração de cache.
AzionResponseRule
Definição de tipo para a configuração da regra de resposta.
Propriedades:
name: string- Nome da regra de resposta.description?: string- Descrição da regra de resposta.active?: boolean- Se a regra está ativa.match: string- Critérios de correspondência para a regra.variable?: string- Variável a ser usada na correspondência.behavior?: ResponseBehavior- Comportamento a ser aplicado quando a regra for correspondida.setCookie?: string | null- Definir um cookie.setHeaders?: string[]- Definir cabeçalhos.deliver?: boolean | null- Entregar o conteúdo.capture?: { match: string; captured: string; subject: string }- Configuração de captura.enableGZIP?: boolean | null- Habilitar compressão GZIP.filterCookie?: string | null- Filtrar um cookie.filterHeader?: string | null- Filtrar um cabeçalho.runFunction?: { path: string; name?: string | null }- Executar uma função sem servidor.redirectTo301?: string | null- Redirecionar com status 301.redirectTo302?: string | null- Redirecionar com status 302.
AzionRules
Definição de tipo para o conjunto de regras.
Propriedades:
request: AzionRequestRule[]- Conjunto de regras para a fase de requisição.response?: AzionResponseRule[]- Conjunto de regras para a fase de resposta.
AzionPurge
Definição de tipo para a configuração de purge.
Propriedades:
type: 'url' | 'cachekey' | 'wildcard'- O tipo de purge a ser realizado.urls: string[]- Lista de URLs que passarão por purge.method?: 'delete'- Método HTTP para a requisição de purge.layer?: 'edge_caching' | 'l2_caching'- Camada de cache para realizar o purge.
AzionNetworkList
Definição de tipo para a configuração da network list.
Propriedades:
id: number- ID da network list.listType: 'ip_cidr' | 'asn' | 'countries'- Tipo da network list.listContent: string[] | number[]- Lista de IP CIDRs, ASNs, ou países.
AzionFirewall
Definição de tipo para a configuração do Firewall.
Propriedades:
name: string- Nome do firewall.domains?: string[]- Lista de domínios associados ao firewall.active?: boolean- Se o firewall está ativo.edgeFunctions?: boolean- Se as Functions estão habilitadas.networkProtection?: boolean- Se a proteção de rede está habilitada.waf?: boolean- Se o WAF está habilitado.variable?: RuleVariable- Variável a ser usada nas correspondências.rules?: AzionFirewallRule[]- Lista de regras do firewall.debugRules?: boolean- Se o modo de depuração está habilitado para as regras.
AzionFirewallRule
Definição de tipo para as regras do firewall.
Propriedades:
name: string- Nome da regra.description?: string- Descrição da regra.active?: boolean- Se a regra está ativa.match?: string- Critérios de correspondência para a regra.variable?: RuleVariable- Variável a ser usada na correspondência.criteria?: AzionFirewallCriteria[]- Array de critérios para condições complexas.behavior: AzionFirewallBehavior- Comportamento a ser aplicado quando a regra for correspondida.
AzionFirewallBehavior
Definição de tipo para os comportamentos das regras do firewall.
Propriedades:
runFunction?: { path: string }- Executar uma function.setWafRuleset?: { wafMode: FirewallWafMode; wafId: string }- Definir o conjunto de regras WAF.setRateLimit?:- Definir a configuração de limite de taxa.type: FirewallRateLimitType- Tipo de limite de taxa (segundo, minuto, hora).limitBy: FirewallRateLimitBy- Limitar por (client_ip, global, token).averageRateLimit: string- Limite médio de taxa.maximumBurstSize: string- Tamanho máximo do pico.
deny?: boolean- Negar a requisição.drop?: boolean- Descartar a requisição.setCustomResponse?:- Definir resposta personalizada.statusCode: number | string- Código de status HTTP (200-499).contentType: string- Tipo de conteúdo da resposta.contentBody: string- Corpo do conteúdo da resposta.
AzionFirewallCriteria
Definição de tipo para os critérios das regras do firewall.
Propriedades:
variable: RuleVariable- Variável a ser avaliada.conditional: RuleConditional- Tipo de condicional.operator: RuleOperatorWithValue | RuleOperatorWithoutValue- Operador de comparação.inputValue?: string- Valor de entrada para comparação (obrigatório para operadores com valor).
AzionWaf
Definição de tipo para a configuração do Web Application Firewall (WAF).
Propriedades:
id?: number- ID do WAF.name: string- Nome do WAF.active: boolean- Se o WAF está ativo.mode: WafMode- Modo do WAF (learning, blocking, counting).sqlInjection?: object- Configurações de SQL Injection.sensitivity: string- Nível de sensibilidade (low, medium, high).
remoteFileInclusion?: object- Configurações de Remote File Inclusion.sensitivity: string- Nível de sensibilidade (low, medium, high).
directoryTraversal?: object- Configurações de Directory Traversal.sensitivity: string- Nível de sensibilidade (low, medium, high).
crossSiteScripting?: object- Configurações de Cross-Site Scripting.sensitivity: string- Nível de sensibilidade (low, medium, high).
evadingTricks?: object- Configurações de Evading Tricks.sensitivity: string- Nível de sensibilidade (low, medium, high).
fileUpload?: object- Configurações de File Upload.sensitivity: string- Nível de sensibilidade (low, medium, high).
unwantedAccess?: object- Configurações de Unwanted Access.sensitivity: string- Nível de sensibilidade (low, medium, high).
identifiedAttack?: object- Configurações de Identified Attack.sensitivity: string- Nível de sensibilidade (low, medium, high).
bypassAdresses?: string[]- Lista de endereços IP para ignorar o WAF.
AzionConfig
Propriedades:
build?: AzionBuild- A configuração de build.workloads?: AzionWorkload[]- Lista de workloads.connectors?: AzionConnector[]- Lista de connectors.applications?: AzionApplication[]- Lista de applications.functions?: AzionFunction[]- Lista de functions.storage?: AzionBucket[]- Lista de configurações de storage.firewall?: AzionFirewall[]- Lista de configurações do firewall.networkList?: AzionNetworkList[]- Lista de network lists.purge?: AzionPurge[]- Lista de URLs ou CacheKeys para purge.waf?: AzionWaf[]- Lista de configurações do WAF.customPages?: AzionCustomPage[]- Lista de custom pages.kv?: AzionKV[]- Lista de configurações do KV Store.
AzionBuild
A definição de tipos para a configuração de build.
Propriedades:
bundler?: 'esbuild' | 'webpack'- O bundler a ser utilizado.preset?: string | AzionBuildPreset- O preset a ser utilizado (string ou objeto de preset customizado).entry?: string | string[] | Record<string, string>- O arquivo de entrada.polyfills?: boolean- Se deve utilizar Polyfills.worker?: boolean- Se deve realizar o build de um worker.extend?: (context: WebpackConfig | ESBuildConfig) => WebpackConfig | ESBuildConfig- Função para estender a configuração do bundler.memoryFS?: { injectionDirs: string[], removePathPrefix: string }- Configuração do sistema de arquivos em memória.
AzionBuildPreset
Definição de tipo para preset customizado de build.
Propriedades:
config: AzionConfig- Configuração do preset.handler?: AzionRuntimeModule- Handler customizado.prebuild?: (config: BuildConfiguration, ctx: BuildContext) => Promise<void | AzionPrebuildResult>- Função executada antes do build.postbuild?: (config: BuildConfiguration, ctx: BuildContext) => Promise<void>- Função executada após o build.metadata: PresetMetadata- Metadados do preset.
AzionWorkload
Definição de tipo para a configuração de workload.
Propriedades:
name: string- Nome do workload.active?: boolean- Se o workload está ativo.infrastructure?: 1 | 2- Tipo de infraestrutura (1 = Standard, 2 = High Performance).tls?: AzionWorkloadTLS- Configuração de TLS.certificate?: number | null- ID do certificado.ciphers?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8- Configuração de cifras.minimumVersion?: '' | 'tls_1_0' | 'tls_1_1' | 'tls_1_2' | 'tls_1_3'- Versão mínima do TLS.
protocols?: AzionWorkloadProtocols- Configuração de protocolos.http: { versions: ('http1' | 'http2' | 'http3')[], httpPorts: number[], httpsPorts: number[], quicPorts?: number[] | null }- Configuração HTTP.
mtls?: AzionWorkloadMTLS- Configuração de mTLS.enabled: boolean- Se mTLS está habilitado.config: { verification: 'enforce' | 'permissive', certificate?: number | null, crl?: number[] | null }- Configuração mTLS.
domains?: string[]- Lista de domínios associados.workloadDomainAllowAccess?: boolean- Se permite acesso via domínio do workload.deployments?: AzionWorkloadDeployment[]- Lista de deployments.name: string- Nome do deployment.current?: boolean- Se é o deployment atual.active?: boolean- Se está ativo.strategy: AzionWorkloadDeploymentStrategy- Estratégia de deployment.
AzionConnector
Definição de tipo para connectors (união de tipos).
Tipos disponíveis:
AzionConnectorHttp- Connector HTTP.AzionConnectorStorage- Connector de Object Storage.AzionConnectorLiveIngest- Connector de Live Ingest.
AzionConnectorHttp
Definição de tipo para connector HTTP.
Propriedades:
name: string- Nome do connector.active?: boolean- Se o connector está ativo.type: 'http'- Tipo do connector.attributes: ConnectorHttpAttributes- Atributos do connector.addresses: ConnectorAddress[]- Lista de endereços.address: string- Endereço IP ou CNAME.active?: boolean- Se o endereço está ativo.httpPort?: number- Porta HTTP.httpsPort?: number- Porta HTTPS.
connectionOptions: ConnectorConnectionOptions- Opções de conexão.dnsResolution?: 'both' | 'force_ipv4'- Política de resolução DNS.transportPolicy?: 'preserve' | 'force_https' | 'force_http'- Política de transporte.httpVersionPolicy?: 'http1_1'- Política de versão HTTP.host?: string- Host customizado.pathPrefix?: string- Prefixo de caminho.followingRedirect?: boolean- Seguir redirecionamentos.
modules?: ConnectorModules- Módulos do connector.loadBalancer: { enabled: boolean, config: LoadBalancerConfig | null }- Configuração de load balancer.originShield: { enabled: boolean, config: OriginShieldConfig | null }- Configuração de origin shield.
AzionConnectorStorage
Definição de tipo para connector de Object Storage.
Propriedades:
name: string- Nome do connector.active?: boolean- Se o connector está ativo.type: 'storage'- Tipo do connector.attributes: ConnectorStorageAttributes- Atributos do connector.bucket: string- Nome do bucket.prefix?: string- Prefixo para os objetos.
AzionApplication
Definição de tipo para a configuração da application.
Propriedades:
name: string- Nome da application.active?: boolean- Se a application está ativa.edgeCacheEnabled?: boolean- Se o cache está habilitado.functionsEnabled?: boolean- Se as Functions estão habilitadas.applicationAcceleratorEnabled?: boolean- Se o Application Accelerator está habilitado.imageProcessorEnabled?: boolean- Se o Image Processor está habilitado.debug?: boolean- Se o modo debug está habilitado.cache?: AzionCache[]- Lista de configurações de cache.rules?: AzionRules- Configuração de regras.deviceGroups?: AzionDeviceGroup[]- Lista de device groups.functionsInstances?: AzionFunctionInstance[]- Lista de instâncias de functions.
AzionCache
Definição de tipo para a configuração de cache.
Propriedades:
name: string- Nome da configuração de cache.stale?: boolean- Se deve permitir conteúdo stale.queryStringSort?: boolean- Se os parâmetros da string de consulta devem ser ordenados.tieredCache?: { enabled: boolean, topology?: 'nearest-region' | 'br-east-1' | 'us-east-1' }- Configuração de Tiered Cache.methods?: { post?: boolean, options?: boolean }- HTTP methods a serem armazenados em cache.browser?: { maxAgeSeconds: number | string }- Configurações de cache do browser.edge?: { maxAgeSeconds: number | string }- Configurações do Cache.cacheByCookie?: { option: 'ignore' | 'all' | 'allowlist' | 'denylist', list?: string[] }- Cache com base nas configurações de cookies.cacheByQueryString?: { option: 'ignore' | 'all' | 'allowlist' | 'denylist', list?: string[] }- Cache com base nas configurações de query string.
AzionRules
Definição de tipo para o conjunto de regras.
Propriedades:
request?: AzionRequestRule[]- Conjunto de regras para a fase de requisição.response?: AzionResponseRule[]- Conjunto de regras para a fase de resposta.
AzionRequestRule
Definição de tipo para a configuração da regra de requisição.
Propriedades:
name: string- Nome da regra de requisição.description?: string- Descrição da regra de requisição.active?: boolean- Se a regra está ativa.match?: string- Critérios de correspondência para a regra (formato legado).variable?: RuleVariable- Variável a ser usada na correspondência (formato legado).criteria?: AzionRuleCriteria[]- Array de critérios para condições complexas (formato novo).behavior?: object- Comportamento a ser aplicado quando a regra for correspondida.rewrite?: string- Reescrever a requisição.bypassCache?: boolean | null- Ignorar cache.httpToHttps?: boolean | null- Forçar HTTPS.redirectTo301?: string | null- Redirecionar com status 301.redirectTo302?: string | null- Redirecionar com status 302.forwardCookies?: boolean | null- Encaminhar cookies.setCookie?: string | null- Definir um cookie.deliver?: boolean | null- Entregar o conteúdo.deny?: boolean | null- Negar a requisição.noContent?: boolean | null- Retornar sem conteúdo.enableGZIP?: boolean | null- Habilitar compressão GZIP.filterCookie?: string | null- Filtrar um cookie.filterHeader?: string | null- Filtrar um cabeçalho.optimizeImages?: boolean | null- Otimizar imagens.capture?: { match: string, captured: string, subject: string }- Configuração de captura.runFunction?: string | number- Executar uma function (nome ou ID).setCache?: string | number | { name: string | number, browser_cache_settings_maximum_ttl?: number | null, cdn_cache_settings_maximum_ttl?: number | null }- Configuração de cache.finishRequestPhase?: boolean- Finalizar fase de requisição.setConnector?: string | number- Definir connector (nome ou ID).addRequestHeader?: string[]- Adicionar headers na requisição.addRequestCookie?: string- Adicionar cookie na requisição.filterRequestCookie?: string- Filtrar cookie da requisição.
AzionResponseRule
Definição de tipo para a configuração da regra de resposta.
Propriedades:
name: string- Nome da regra de resposta.description?: string- Descrição da regra de resposta.active?: boolean- Se a regra está ativa.match?: string- Critérios de correspondência para a regra (formato legado).variable?: RuleVariable- Variável a ser usada na correspondência (formato legado).criteria?: AzionRuleCriteria[]- Array de critérios para condições complexas (formato novo).behavior?: object- Comportamento a ser aplicado quando a regra for correspondida.setHeaders?: string[]- Definir cabeçalhos.deliver?: boolean | null- Entregar o conteúdo.capture?: { match: string, captured: string, subject: string }- Configuração de captura.enableGZIP?: boolean | null- Habilitar compressão GZIP.filterHeader?: string | null- Filtrar um cabeçalho.runFunction?: string | number- Executar uma function (nome ou ID).redirectTo301?: string | null- Redirecionar com status 301.redirectTo302?: string | null- Redirecionar com status 302.addResponseHeader?: string[]- Adicionar headers na resposta.filterResponseCookie?: string- Filtrar cookie da resposta.
AzionRuleCriteria
Definição de tipo para critérios de regras.
Propriedades:
variable: RuleVariable- Variável a ser avaliada.conditional: 'if' | 'and' | 'or'- Tipo de condicional.operator: RuleOperatorWithValue | RuleOperatorWithoutValue- Operador de comparação.argument?: string- Valor de entrada para comparação (obrigatório para operadores com valor).
AzionPurge
Definição de tipo para a configuração de purge.
Propriedades:
type: 'url' | 'cachekey' | 'wildcard'- O tipo de purge a ser realizado.items: string[]- Lista de itens que passarão por purge.layer?: 'cache' | 'tiered_cache'- Camada de cache para realizar o purge.
AzionNetworkList
Definição de tipo para a configuração da network list.
Propriedades:
name: string- Nome da network list.type: 'ip_cidr' | 'asn' | 'countries'- Tipo da network list.items: string[]- Lista de IP CIDRs, ASNs, ou países.active?: boolean- Se a network list está ativa.
AzionFirewall
Definição de tipo para a configuração do Firewall.
Propriedades:
name: string- Nome do firewall.active?: boolean- Se o firewall está ativo.functions?: boolean- Se as Functions estão habilitadas.networkProtection?: boolean- Se a proteção de rede está habilitada.waf?: boolean- Se o WAF está habilitado.rules?: AzionFirewallRule[]- Lista de regras do firewall.debugRules?: boolean- Se o modo de depuração está habilitado para as regras.functionsInstances?: AzionFirewallFunctionsInstance[]- Lista de instâncias de functions do firewall.
AzionFirewallRule
Definição de tipo para as regras do firewall.
Propriedades:
name: string- Nome da regra.description?: string- Descrição da regra.active?: boolean- Se a regra está ativa.match?: string- Critérios de correspondência para a regra (formato legado).variable?: RuleVariable- Variável a ser usada na correspondência (formato legado).criteria?: AzionFirewallCriteria[]- Array de critérios para condições complexas (formato novo).behaviors: AzionFirewallBehavior- Array de comportamentos a serem aplicados quando a regra for correspondida.
AzionFirewallBehavior
Definição de tipo para os comportamentos das regras do firewall (array de comportamentos).
Tipos de comportamento disponíveis:
{ runFunction: string | number }- Executar uma function (nome ou ID).{ setWafRuleset: { wafMode: 'learning' | 'blocking', wafId: string | number } }- Definir o conjunto de regras WAF.{ setRateLimit: { type: 'second' | 'minute', limitBy: 'clientIp' | 'global', averageRateLimit: string, maximumBurstSize: string } }- Definir a configuração de limite de taxa.{ deny: true }- Negar a requisição.{ drop: true }- Descartar a requisição.{ setCustomResponse: { statusCode: number | string, contentType: string, contentBody: string } }- Definir resposta personalizada.
AzionFirewallCriteria
Definição de tipo para os critérios das regras do firewall.
Propriedades:
variable: RuleVariable- Variável a ser avaliada.conditional: 'if' | 'and' | 'or'- Tipo de condicional.operator: RuleOperatorWithValue | RuleOperatorWithoutValue- Operador de comparação.argument?: string | number- Valor de entrada para comparação (obrigatório para operadores com valor).
AzionWaf
Definição de tipo para a configuração do Web Application Firewall (WAF).
Propriedades:
name: string- Nome do WAF.productVersion?: string- Versão do produto.engineSettings: WafEngineSettings- Configurações do motor do WAF.engineVersion: '2021-Q3'- Versão do motor.type: 'score'- Tipo do motor.attributes: WafEngineAttributes- Atributos do motor.rulesets: 1[]- Conjuntos de regras.thresholds: WafThreshold[]- Limiares de ameaças.threat: 'cross_site_scripting' | 'directory_traversal' | 'evading_tricks' | 'file_upload' | 'identified_attack' | 'remote_file_inclusion' | 'sql_injection' | 'unwanted_access'- Tipo de ameaça.sensitivity: 'lowest' | 'low' | 'medium' | 'high' | 'highest'- Nível de sensibilidade.
AzionFunction
Definição de tipo para a configuração de Function.
Propriedades:
name: string- Nome da function.path: string- Caminho do arquivo da function.runtime?: 'azion_js'- Ambiente de runtime.defaultArgs?: Record<string, unknown>- Argumentos padrão a serem passados para a function.executionEnvironment?: 'application' | 'firewall'- Ambiente de execução.active?: boolean- Se a function está ativa.bindings?: AzionFunctionBindings- Bindings da function.storage?: AzionStorageBinding- Binding de storage.bucket: string- Nome ou ID do bucket.prefix?: string- Prefixo do storage.
AzionFunctionInstance
Definição de tipo para instância de Function dentro de uma Application.
Propriedades:
name: string- Nome da instância.ref: string | number- Referência ao nome ou ID da Function.args?: Record<string, unknown>- Argumentos específicos da instância.active?: boolean- Se a instância está ativa.
AzionCustomPage
Definição de tipo para custom pages.
Propriedades:
name: string- Nome da custom page.active?: boolean- Se está ativa.pages: AzionCustomPageEntry[]- Array de configurações de páginas de erro.code: 'default' | '400' | '401' | '403' | '404' | '405' | '406' | '408' | '409' | '410' | '411' | '414' | '415' | '416' | '426' | '429' | '431' | '500' | '501' | '502' | '503' | '504' | '505'- Código de erro.page: AzionCustomPageConnector- Configuração da página.type?: 'page_connector'- Tipo da página.attributes: AzionCustomPageConnectorAttributes- Atributos da página.connector: string | number- Nome ou ID do connector.ttl?: number- Tempo de vida em segundos.uri?: string | null- Caminho URI.customStatusCode?: number | null- Código de status customizado.
AzionKV
Definição de tipo para KV Store.
Propriedades:
name: string- Nome do KV Store.
AzionBucket
Definição de tipo para configuração de Storage.
Propriedades:
name: string- Nome do storage.workloadsAccess?: 'read_only' | 'read_write' | 'restricted'- Tipo de acesso.dir: string- Diretório do storage.prefix: string- Prefixo do storage.
Exemplo
Aqui está um exemplo de implementação do arquivo azion.config.js:
export default {
build: {
entry: './src/index.js',
preset: 'angular',
},
domain: {
name: 'my_domain',
cnameAccessOnly: false, // Opcional, padrão é false
cnames: ['www.example.com'], // Opcional
edgeApplicationId: 12345, // Opcional
edgeFirewallId: 12345, // Opcional
digitalCertificateId: 'lets_encrypt', // 'lets_encrypt' ou null
mtls: {
verification: 'enforce', // 'enforce' ou 'permissive'
trustedCaCertificateId: 12345,
crlList: [111, 222],
}, // Opcional
},
origin: [
{
id: 123, // Opcional. ID da origem. Obtido via requisição GET. Não pode ser alterado via API.
key: 'myorigin', // Opcional. Chave da origem. Obtida via requisição GET. Não pode ser alterada via API.
name: 'myneworigin', // Obrigatório
type: 'single_origin', // Obrigatório. Opções: single_origin, load_balancer, object_storage, live_ingest. Padrão é single_origin se não fornecido.
path: '', // Opcional. Padrão é '' se não fornecido.
addresses: [
// Obrigatório para single_origin, load_balancer, live_ingest. Opcional para object_storage.
// ou addresses: ['http.bin.org']
{
address: 'http.bin.org',
weight: 1, // Opcional. Define um número de 1 a 10 para determinar quanto tráfego um servidor pode suportar.
},
],
protocolPolicy: 'preserve', // Opcional. Opções: preserve, https, http. Padrão é preserve se não fornecido.
hostHeader: '${host}', // Padrão é '${host}' se não fornecido.
connectionTimeout: 60, // Opcional. Padrão é 60 se não fornecido.
timeoutBetweenBytes: 120, // Opcional. Padrão é 120 se não fornecido.
redirection: false, // Opcional. Padrão é false se não fornecido.
hmac: {
region: 'us-east-1', // Obrigatório para HMAC
accessKey: 'myaccesskey', // Obrigatório para HMAC
secretKey: 'secretKey', // Obrigatório para HMAC
}, // Opcional
},
{
id: 456, // Opcional. ID da origem. Obtido via requisição GET. Não pode ser alterado via API.
key: 'myorigin', // Opcional. Chave da origem. Obtida via requisição GET. Não pode ser alterada via API.
name: 'myneworigin', // Obrigatório
type: 'object_storage', // Obrigatório. Opções: single_origin, load_balancer, object_storage, live_ingest. Padrão é single_origin se não fornecido.
bucket: 'blue-courage', // Obrigatório para object_storage.
prefix: '0101010101001', // Opcional. Padrão é '' se não fornecido.
},
],
cache: [
{
name: 'mycache',
stale: false,
queryStringSort: false,
methods: {
post: false,
options: false,
},
browser: {
maxAgeSeconds: 1000 * 5, // 5000 segundos
},
edge: {
maxAgeSeconds: 1000,
},
cacheByQueryString: {
option: 'blacklist', // Opções: ['blacklist', 'whitelist', 'varies', 'ignore']
list: ['order', 'user'],
},
cacheByCookie: {
option: 'whitelist', // Opções: ['blacklist', 'whitelist', 'varies', 'ignore']
list: ['session', 'user'],
},
},
],
rules: {
request: [
{
name: 'rewriteRuleExample',
description: 'Reescreve URLs, define cookies e cabeçalhos, e encaminha cookies.',
active: true,
variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
match: '^/rewrite$',
behavior: {
setCache: 'mycache1',
rewrite: `/new/%{captured[1]}`, // Reescreve /original/image.jpg para /new/image.jpg.
setCookie: 'user=12345; Path=/; Secure',
setHeaders: 'Cache-Control: no-cache',
forwardCookies: true,
},
},
{
name: 'gzipCompressionRuleExample',
description: 'Habilita a compactação GZIP para caminhos específicos.',
active: true,
variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
match: '^/compress',
behavior: {
enableGZIP: true,
},
},
{
name: 'forceHttpsRuleExample',
description: 'Redireciona requisições HTTP para HTTPS em áreas seguras.',
active: true,
variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
match: '^/secure-area',
behavior: {
httpToHttps: true,
},
},
],
response: [
{
name: 'apiDataResponseRuleExample',
description: 'Gerencia cabeçalhos, cookies e compressão GZIP para respostas de API.',
active: true,
variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
match: '^/api/data',
behavior: {
setHeaders: 'Content-Type: application/json',
setCookie: 'session=abcdef; Path=/; HttpOnly',
filterHeader: 'Server',
filterCookie: 'tracking',
enableGZIP: true,
},
},
{
name: 'computeResultFunctionRuleExample',
description: 'Executa uma função e captura o caminho completo da URI para resultados computacionais.',
active: true,
variable: 'uri', // Opcional, padrão é 'uri' se não fornecido.
match: '^/compute-result',
behavior: {
runFunction: {
path: '.edge/computeResult.js',
},
// Captura o caminho completo da URI e armazena na variável 'full_path_arr'.
capture: {
match: '^(.*)$', // A expressão regular '^(.*)$' captura o caminho completo da URI.
captured: 'full_path_arr', // O resultado da captura é armazenado na variável 'full_path_arr'.
subject: 'uri', // A captura é baseada no valor da variável 'uri'.
},
// Redireciona permanentemente para o primeiro elemento capturado em 'full_path_arr'.
redirectTo301: '%{full_path_arr[0]}', // Usa o primeiro elemento do array 'full_path_arr' como parte da nova URL.
},
},
],
},
purge: [
{
type: 'url',
urls: ['http://www.example.com/image.jpg'],
},
{
type: 'cachekey',
urls: ['https://example.com/test1', 'https://example.com/test2'],
method: 'delete',
},
{
type: 'wildcard',
urls: ['http://www.example.com/*'],
},
],
};
Aqui está um exemplo de implementação do arquivo azion.config.js usando a nova estrutura V4:
import { defineConfig } from 'azion';
export default defineConfig({ build: { bundler: 'esbuild', entry: './src/index.js', preset: 'react', polyfills: true, memoryFS: { injectionDirs: ['./src/inject'], removePathPrefix: './src', }, }, workloads: [ { name: 'my-production-workload', active: true, infrastructure: 1, domains: ['example.com'], workloadDomainAllowAccess: false, protocols: { http: { versions: ['http1', 'http2'], httpPorts: [80], httpsPorts: [443], }, }, tls: { certificate: 12345, minimumVersion: 'tls_1_2', }, }, ], connectors: [ { name: 'My Origin', type: 'http', active: true, attributes: { addresses: [ { address: 'origin.example.com', httpPort: 80, httpsPort: 443, }, ], connectionOptions: { transportPolicy: 'https', dnsResolution: 'both', }, modules: { loadBalancer: { enabled: true, config: { method: 'round_robin', connectionTimeout: 60, }, }, originShield: { enabled: false, config: null, }, }, }, }, { name: 'My Storage', type: 'storage', active: true, attributes: { bucket: 'my-bucket', prefix: 'assets/', }, }, ], applications: [ { name: 'My App', active: true, edgeCacheEnabled: true, functionsEnabled: true, cache: [ { name: 'Default Cache', stale: false, queryStringSort: false, tieredCache: { enabled: true, topology: 'nearest-region', }, methods: { post: false, options: false, }, browser: { maxAgeSeconds: 3600, }, edge: { maxAgeSeconds: 7200, }, cacheByQueryString: { option: 'allowlist', list: ['order', 'user'], }, cacheByCookie: { option: 'allowlist', list: ['session', 'user'], }, }, ], rules: { request: [ { name: 'Rewrite Rule', description: 'Reescreve URLs para o novo formato', active: true, criteria: [ { variable: 'uri', conditional: 'if', operator: 'matches', argument: '^/old/(.*)$', }, ], behavior: { rewrite: '/new/$1', }, }, { name: 'Force HTTPS', description: 'Força redirecionamento para HTTPS', active: true, criteria: [ { variable: 'scheme', conditional: 'if', operator: 'is_equal', argument: 'http', }, ], behavior: { httpToHttps: true, }, }, ], response: [ { name: 'Add Security Headers', description: 'Adiciona headers de segurança', active: true, criteria: [ { variable: 'status', conditional: 'if', operator: 'is_equal', argument: '200', }, ], behavior: { addResponseHeader: [ 'X-Content-Type-Options: nosniff', 'X-Frame-Options: DENY', ], }, }, ], }, functionsInstances: [ { name: 'my-function-instance', ref: 'my-function', args: { environment: 'production', }, }, ], }, ], functions: [ { name: 'my-function', path: './functions/my-function.js', runtime: 'azion_js', executionEnvironment: 'application', active: true, }, ], firewall: { name: 'My Firewall', active: true, functions: true, networkProtection: true, waf: true, rules: [ { name: 'Block Suspicious IPs', active: true, criteria: [ { variable: 'remote_addr', conditional: 'if', operator: 'is_in_list', argument: 'blocked_ips', }, ], behaviors: [ { deny: true }, ], }, { name: 'Rate Limit API', active: true, criteria: [ { variable: 'uri', conditional: 'if', operator: 'starts_with', argument: '/api/', }, ], behaviors: [ { setRateLimit: { type: 'second', limitBy: 'clientIp', averageRateLimit: '100', maximumBurstSize: '200', }, }, ], }, ], }, waf: [ { name: 'My WAF', engineSettings: { engineVersion: '2021-Q3', type: 'score', attributes: { rulesets: [1], thresholds: [ { threat: 'sql_injection', sensitivity: 'high', }, { threat: 'cross_site_scripting', sensitivity: 'high', }, { threat: 'remote_file_inclusion', sensitivity: 'medium', }, ], }, }, }, ], networkList: [ { name: 'Blocked IPs', type: 'ip_cidr', items: ['192.168.1.1', '10.0.0.0/8'], active: true, }, { name: 'Blocked Countries', type: 'countries', items: ['XX', 'YY'], active: true, }, ], purge: [ { type: 'url', items: ['https://example.com/path/to/purge'], layer: 'cache', }, { type: 'wildcard', items: ['https://example.com/images/*'], layer: 'tiered_cache', }, ], customPages: [ { name: 'Error Pages', active: true, pages: [ { code: '404', page: { type: 'page_connector', attributes: { connector: 'My Origin', uri: '/errors/404.html', ttl: 3600, }, }, }, { code: '500', page: { type: 'page_connector', attributes: { connector: 'My Origin', uri: '/errors/500.html', ttl: 3600, }, }, }, ], }, ], kv: [ { name: 'my-kv-store', }, ], storage: [ { name: 'my-storage', workloadsAccess: 'read_only', dir: './storage', prefix: 'data/', }, ],});Variáveis de Regras
As seguintes variáveis podem ser usadas nas regras de Applications e Firewall:
Variáveis Comuns (Request e Response)
args- Argumentos da requisiçãodevice_group- Grupo do dispositivodomain- Domíniogeoip_city- Cidade (GeoIP)geoip_city_continent_code- Código do continente (GeoIP)geoip_city_country_code- Código do país (GeoIP)geoip_city_country_name- Nome do país (GeoIP)geoip_continent_code- Código do continentegeoip_country_code- Código do paísgeoip_country_name- Nome do paísgeoip_region- Região (GeoIP)geoip_region_name- Nome da região (GeoIP)host- Host da requisiçãoremote_addr- Endereço IP remotoremote_port- Porta remotaremote_user- Usuário remotorequest- Requisição completarequest_body- Corpo da requisiçãorequest_method- Método HTTPrequest_uri- URI da requisiçãoscheme- Esquema (http/https)uri- URInetwork- Rede
Variáveis Específicas de Request
server_addr- Endereço do servidorserver_port- Porta do servidorssl_client_fingerprint- Fingerprint do certificado SSLssl_client_escaped_cert- Certificado SSL escapadossl_client_s_dn- Subject DN do certificado SSLssl_client_s_dn_parsed- Subject DN parseadossl_client_cert- Certificado SSL do clientessl_client_i_dn- Issuer DN do certificado SSLssl_client_serial- Número de série do certificado SSLssl_client_v_end- Data de validade do certificado SSLssl_client_v_remain- Dias restantes do certificado SSLssl_client_v_start- Data de início do certificado SSLssl_client_verify- Status de verificação do SSL
Variáveis Específicas de Response
sent_http_name- Nome HTTP enviadostatus- Código de status HTTPtcpinfo_rtt- Round-trip time TCPupstream_addr- Endereço upstreamupstream_status- Status upstream
Variáveis Dinâmicas
Você também pode usar variáveis dinâmicas com os prefixos:
arg_{name}- Argumentos específicoscookie_{name}- Cookies específicoshttp_{name}- Headers HTTP específicossent_http_{name}- Headers HTTP enviadosupstream_cookie_{name}- Cookies upstreamupstream_http_{name}- Headers HTTP upstream
Operadores de Comparação
Operadores com Valor
is_equal- É igual ais_not_equal- Não é igual astarts_with- Começa comdoes_not_start_with- Não começa commatches- Corresponde (regex)does_not_match- Não corresponde (regex)is_in_list- Está na listais_not_in_list- Não está na lista
Operadores sem Valor
exists- Existedoes_not_exist- Não existe
Migração de V3 para V4
Se você está migrando de uma versão anterior, aqui estão as principais mudanças:
Nomenclatura Atualizada
Edge Application→ApplicationEdge Functions→FunctionsEdge Firewall→FirewallEdge SQL→SQL DatabaseEdge Cache→CacheEdge Storage→Object StorageNetwork Layer Protection→Network ShieldEdge KV→KV StoreEdge Connectors→ConnectorsOrigin→Connector(novo conceito mais flexível)
Estrutura de Configuração
A estrutura mudou de uma configuração plana para uma estrutura hierárquica:
V3 (anterior):
{ origin: [...], cache: [...], rules: {...}}V4 (atual):
{ workloads: [...], connectors: [...], applications: [{ name: 'My App', cache: [...], rules: {...} }]}Origens para Connectors
O conceito de origin evoluiu para connectors, oferecendo mais flexibilidade:
V3 (anterior):
origin: [{ name: 'my-origin', type: 'single_origin', addresses: ['origin.example.com']}]V4 (atual):
connectors: [{ name: 'My Origin', type: 'http', attributes: { addresses: [{ address: 'origin.example.com' }], connectionOptions: { transportPolicy: 'https' } }}]Regras com Critérios
As regras agora suportam uma estrutura de critérios mais poderosa:
V3 (anterior):
rules: { request: [{ name: 'My Rule', match: '^/api/', behavior: { ... } }]}V4 (atual):
applications: [{ rules: { request: [{ name: 'My Rule', criteria: [{ variable: 'uri', conditional: 'if', operator: 'starts_with', argument: '/api/' }], behavior: { ... } }] }}]Comportamentos de Firewall
Os comportamentos de firewall agora são um array, permitindo múltiplas ações:
V3 (anterior):
behavior: { deny: true}V4 (atual):
behaviors: [ { deny: true }]WAF com Thresholds
O WAF agora usa uma estrutura de thresholds mais granular:
V3 (anterior):
waf: [{ name: 'My WAF', mode: 'blocking', sqlInjection: { sensitivity: 'high' }}]V4 (atual):
waf: [{ name: 'My WAF', engineSettings: { engineVersion: '2021-Q3', type: 'score', attributes: { rulesets: [1], thresholds: [ { threat: 'sql_injection', sensitivity: 'high' } ] } }}]Notas Adicionais
Validação de Configuração
O defineConfig valida automaticamente sua configuração e fornece erros claros se houver problemas. Use TypeScript para obter autocompletar e verificação de tipos em tempo de desenvolvimento.
Referências por Nome ou ID
Muitas propriedades aceitam tanto nomes quanto IDs, permitindo que você use referências mais legíveis:
// Por nome (validado durante o build)runFunction: 'my-function'
// Por ID (usado diretamente)runFunction: 12345Presets Customizados
Você pode criar presets customizados para reutilizar configurações:
import { defineConfig } from 'azion';import type { AzionBuildPreset } from 'azion/config';
const myCustomPreset: AzionBuildPreset = { config: { build: { bundler: 'esbuild', polyfills: true, }, }, metadata: { name: 'my-custom-preset', registry: 'my-registry', }, prebuild: async (config, ctx) => { console.log('Running prebuild...'); // Lógica customizada de prebuild },};
export default defineConfig({ build: { preset: myCustomPreset, },});Integração com CLI
O arquivo azion.config.js é automaticamente detectado pela Azion CLI. Você pode:
- Usar
azion buildpara construir seu projeto com as configurações definidas - Usar
azion deploypara implantar sua application - Usar
azion devpara desenvolvimento local com hot reload
Recursos Relacionados
- Functions - Compute serverless na Azion Platform
- Applications - Configure e gerencie suas applications
- Firewall - Proteja suas applications
- WAF - Web Application Firewall
- Cache - Configure políticas de cache
- Object Storage - Armazenamento de objetos