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 Polyfills
  • worker?: 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