Instale a integração Send Event to Endpoint
Instale Send Event to Endpoint pelo Azion Marketplace e execute-a em um firewall para transmitir dados da requisição a um endpoint HTTP ou um bucket S3.
Você instala a integração Send Event to Endpoint pelo Azion Marketplace e a executa em um Firewall, pelo Azion Console. A function recebe os dados da requisição e os envia a um endpoint que você define, por meio da API fetch do JavaScript. Um arquivo de argumentos em JSON define quais dados a function captura e, depois que ela envia os dados, a requisição segue pelo Rules Engine.
Cinco objetos precisam existir antes que os dados da requisição sejam transmitidos: a function instalada, um firewall com o módulo Functions, uma function instance com os argumentos, uma regra do Rules Engine com o behavior Run Function e um deployment do workload vinculado ao firewall. Cada seção abaixo cria um deles.
Pré-requisitos
- Uma conta Azion. Para entrar, consulte Como acessar o Azion Console.
- Uma application servida por um workload, cujo deployment você vincula ao firewall na última seção.
- Um endpoint HTTP que recebe os dados, um bucket S3 com a access key e a secret key dele, ou os dois.
- A Azion CLI instalada e autorizada, para a última seção.
- Ativar um produto ou um módulo pode gerar custos de uso. Para mais informações, consulte Preços.
Instale a integração
A function é instalada uma vez por conta. Para instalá-la:
Acesse Azion Console > Marketplace.
Digite Send Event to Endpoint no campo Search on Marketplace e selecione o card da integração. Navegar pelos cards e pelas categorias leva à mesma página.
O card mostra Successfully installed! e Latest version installed!, e a function aparece na lista Function do drawer Create Instance.
Crie o firewall
O firewall é onde a function é instanciada e onde fica a regra que a executa. Para criar um:
Acesse Azion Console > Firewalls e crie um firewall.
Na seção General, digite um Name. Por exemplo: send-event-firewall.
Na seção Modules, ative o switch Functions.
O firewall mostra uma aba Functions Instances enquanto o módulo Functions estiver ativado. Para usar um firewall existente, ative o módulo Functions dele e salve-o. Para conhecer cada configuração deste formulário, consulte Defina as configurações principais de um firewall.
Crie a function instance
A instância guarda a seleção de dados e os argumentos de conexão com o endpoint ou o bucket. Para criá-la:
Em Firewalls, selecione seu firewall e selecione a aba Functions Instances.
Um firewall que não tem instância mostra a mesma ação como Function Instance. O drawer Create Instance abre.
Em Name, digite um nome. Por exemplo: send-event.
Em Function, selecione a function Send Event to Endpoint. A lista contém apenas as functions que executam em um firewall.
Em Arguments, o editor vem preenchido com os argumentos padrão da integração em JSON. Digite seus valores, como a próxima seção descreve.
A instância aparece na aba Functions Instances.
Argumentos
Os argumentos padrão têm esta forma:
| Campo | Obrigatório | Tipo de dado | Observações |
|---|---|---|---|
metadata | Não | Null ou Array | Os campos de metadados que a function transmite. Quando é null ou não está definido, a function transmite todos os campos de metadados. Para não transmitir nenhum metadado, defina um array vazio [ ] como valor. |
headers | Não | Null ou Array | Os cabeçalhos da requisição que a function transmite. Quando é null ou não está definido, a function transmite todos os cabeçalhos da requisição. Para não transmitir nenhum cabeçalho, defina um array vazio [ ] como valor. |
body | Não | Null ou Array | Os campos do corpo da requisição que a function transmite. Quando é null ou não está definido, a function transmite todos os campos do corpo da requisição. Para não transmitir nenhum campo do corpo, defina um array vazio [ ] como valor. Para filtrar campos de vários níveis, use notação de ponto: a string 'user.name' faz a function procurar o campo 'name' no objeto 'user' do corpo da requisição. |
connection_args | Sim | Objeto | Os dados que a function usa para transmitir os dados da requisição. O endpoint é a URL que recebe os dados. Os headers são os cabeçalhos que a requisição fetch inclui. A function também adiciona um cabeçalho 'Content-Type: application/json'. |
s3_connection_args | Não | Objeto | Os argumentos que a function usa para se conectar ao bucket S3. |
s3_connection_args.full_host | Apenas ao usar s3_connection_args | String | O host completo do bucket S3. |
s3_connection_args.region | Apenas ao usar s3_connection_args | String | A região do bucket S3. |
s3_connection_args.access_key | Apenas ao usar s3_connection_args | String | A access key da conexão com o bucket S3. |
s3_connection_args.secret_key | Apenas ao usar s3_connection_args | String | A secret key da conexão com o bucket S3. |
s3_connection_args.file_path | Não | String | O caminho onde a function armazena o arquivo que cria. Valor padrão: / |
s3_connection_args.use_date_prefix | Não | String | Quando ativado, a function adiciona ao caminho do arquivo uma subpasta com o nome da data atual, no formato YYYY-MM-DD. Valor padrão: true |
Você também pode usar um arquivo de argumentos catch-all, como este:
Quando você fornece argumentos de conexão válidos tanto para o endpoint HTTP quanto para o bucket S3, a function entrega os dados do evento aos dois ao mesmo tempo.
Dados transmitidos
A function envia os dados transmitidos como um arquivo JSON como este:
O request_id, o request_url e os campos de metadados ficam na raiz do arquivo JSON. Os campos do corpo e os cabeçalhos da requisição ficam em objetos.
Arquivos de saída no S3
Cada execução da function cria um novo arquivo no bucket S3. O arquivo recebe o nome do ID da requisição que executou a function.
Por exemplo: connection_args.file_path está definido como /my-data/, e a function executa em 9 de maio de 2023, para o ID de requisição abcd-1234. A function salva o arquivo em /my-data/2023-05-09/abcd-1234.json. Quando connection_args.use_date_prefix está definido como false, a function salva o arquivo como /my-data/abcd-1234.json.
Erros de conexão
Quando o arquivo de argumentos não tem http_connection_args nem s3_connection_args, a function não tem argumentos de conexão válidos. A function encerra a requisição e retorna uma mensagem de erro em JSON com a causa:
Quando a function não consegue se conectar ao endpoint HTTP ou ao provedor S3, ela ignora a requisição do usuário. A function ainda cria um log de erro, que você acessa pelo Data Stream. Por exemplo, uma access key inválida mostra esta mensagem:
Crie a regra
A instância não transmite nada até que uma regra a execute. Uma regra do Rules Engine para Firewall seleciona as requisições que chegam à instância, por meio de um behavior Run Function. Para criar a regra:
Em Firewalls, selecione seu firewall e selecione a aba Rules Engine.
Em Name, digite um nome. Por exemplo: Run Send Event to Endpoint.
Na seção Criteria, selecione os domínios que executam a integração. Por exemplo: if Host matches yourdomain.com.
Na seção Behaviors, selecione Run Function e selecione a instância pelo nome que você deu a ela.
O firewall executa a instância em cada requisição aos domínios do critério.
Vincule o firewall ao workload
O vínculo fica no deployment do workload, então crie um deployment que indique tanto a application quanto o firewall:
O comando imprime o id do novo deployment:
As requisições ao domínio do workload chegam ao firewall, e a regra executa a instância de Send Event to Endpoint em cada uma delas.