Como criar uma edge function usando WebAssembly na plataforma de Edge da Azion
Saiba mais sobre o processo necessário para a criação de uma edge function que utiliza uma função originada de um arquivo WebAssembly.
- No Real-Time Manager (RTM), no canto superior esquerdo, selecione Edge Functions na seção Edge Libraries.
- Clique em Add Function.
- Escolha um nome para sua função.
- Selecione a aba Code.
- Copie e cole o seguinte código de exemplo no bloco de código:
async function handleRequest(request) { // You can either retrieve your .wasm file through fetch, for instance : // let wasmResponse = await fetch("http://somedomain/yourfile.wasm") // or embed the binary in the code, as shown below. const wasmCode = new Uint8Array([ 0, 97, 115, 109, 1, 0, 0, 0, 1, 6, 1, 96, 1, 127, 1, 127, 3, 2, 1, 0, 7, 13, 1, 9, 105, 110, 99, 114, 101, 109, 101, 110, 116, 0, 0, 10, 9, 1, 7, 0, 32, 0, 65, 1, 106, 11, ]);
const wasmModule = new WebAssembly.Module(wasmCode); const wasmInstance = new WebAssembly.Instance(wasmModule); const increment = wasmInstance.exports.increment; let value = 0;
if (request.headers.has("value")) { let number = request.headers.get("value"); if (!isNaN(number)) { value = parseInt(number); } } let incremented = increment(value); return new Response( "incrementing " + value + " we have " + incremented ); } addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request)); });
A constante wasmCode
é a representação binária do seguinte código WAT:
(module (type (;0;) (func (param i32) (result i32))) (func (;0;) (type 0) (param i32) (result i32) local.get 0 i32.const 1 i32.add) (export “increment” (func 0)))
- Clique no botão Save
Agora, a função está pronta para ser instanciada em uma edge application. Veja como instanciar e executar as funções em sua edge application.
A saída esperada da função recém-criada é semelhante a:
incrementing 0 we have 1
- Acesse o Azion Console > Edge Functions.
- Clique em + Edge Function.
- Escolha um nome para sua função.
- Selecione a aba Code.
- Copie e cole o seguinte código de exemplo no bloco de código:
async function handleRequest(request) { // You can either retrieve your .wasm file through fetch, for instance : // let wasmResponse = await fetch("http://somedomain/yourfile.wasm") // or embed the binary in the code, as shown below. const wasmCode = new Uint8Array([ 0, 97, 115, 109, 1, 0, 0, 0, 1, 6, 1, 96, 1, 127, 1, 127, 3, 2, 1, 0, 7, 13, 1, 9, 105, 110, 99, 114, 101, 109, 101, 110, 116, 0, 0, 10, 9, 1, 7, 0, 32, 0, 65, 1, 106, 11, ]);
const wasmModule = new WebAssembly.Module(wasmCode); const wasmInstance = new WebAssembly.Instance(wasmModule); const increment = wasmInstance.exports.increment; let value = 0;
if (request.headers.has("value")) { let number = request.headers.get("value"); if (!isNaN(number)) { value = parseInt(number); } } let incremented = increment(value); return new Response( "incrementing " + value + " we have " + incremented ); } addEventListener("fetch", (event) => { event.respondWith(handleRequest(event.request)); });
A constante wasmCode
é a representação binária do seguinte código WAT:
(module (type (;0;) (func (param i32) (result i32))) (func (;0;) (type 0) (param i32) (result i32) local.get 0 i32.const 1 i32.add) (export “increment” (func 0)))
- Clique no botão Save
Agora, a função está pronta para ser instanciada em uma edge application. Veja como instanciar e executar as funções em sua edge application.
A saída esperada da função recém-criada é semelhante a:
incrementing 0 we have 1