Azion IaC
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
Referência da API
defineConfig
Configura e valida as opções para a Edge Appplication.
Parâmetros:
config: AzionConfig
- O objeto de configuração para a Edge Application.
processConfig
Processa o objeto de configuração e retorna um manifesto.
convertJsonConfigToObject
Converte um objeto de configuração Azion em JSON para um objeto AzionConfig.
Parâmetros:
config: string
- Objeto de configuração JSON.
Parâmetros:
config: AzionConfig
- Opjeto de configuração para a Edge Application.
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 edge 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?: { name: 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 edge application.edgeFirewallId?: number
- ID do edge 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 Edge Cache.maxAgeSeconds: number | string
- Validade máxima em segundos para o Edge 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 Edge 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 Edge 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.
Exemplo
Aqui está um exemplo de implementação do arquivo azion.config.js
:
export default { build: { entry: './src/index.js', preset: { name: '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/*'], }, ],};
Contribuidores