Como usar um bucket do Object Storage como a origem de uma application estática
Este guia descreve o processo de configuração de um bucket como origem de uma application usando a API da Azion, Azion CLI, e Azion Runtime.
Existem instruções separadas para API v3 usando configurações de Origin legado e API v4 usando o novo produto Connector.
Consulte a referência do Object StorageCriar um bucket e fazer upload de arquivos
Esta seção descreve como você pode fazer upload de objetos para um bucket e manter a estrutura do projeto usando a API da Azion. Neste cenário, você criará uma aplicação estática usando dois arquivos, distribuídos em pastas da seguinte forma:
src/index.htmlsrc/styles/style.css- Crie o seguinte arquivo
index.htmlem um diretório localsrc:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="styles/style.css"></head><body> <h1>Hello world!</h1> <p>I am an object from a bucket.</p></body></html>- Agora crie o arquivo
style.css, que é referenciado no HTML, dentro de uma pastastylesno mesmo diretório:
body {background-color: black;}
h1, p { color: #F3652B;}- Execute a requisição
POSTa seguir no seu terminal, substituindo[TOKEN VALUE]pelo seu personal token e inserindo o nome desejado do bucket emnamepara criar um bucket de leitura apenas (read-only bucket):
curl --location 'https://api.azion.com/v4/storage/buckets' \--header 'Accept: application/json;' \--header 'Content-Type: application/json' \--header 'Authorization: Token [TOKEN VALUE]' \--data '{ "name": "app-origin", "edge_access": "read_only"}'- Você deve receber a seguinte resposta:
{ "state": "executed", "data": { "name": "app-origin", "edge_access": "read_only" }}-
Execute as seguintes requisições
POSTno seu terminal para cada arquivo, substituindo<bucket_name>pelo nome do bucket que você acabou de criar:- Para o arquivo
index.html, execute o seguinte comando usandosrc/index.htmlcomo a chave do objeto, e adicionando o caminho do objeto como dados:
- Para o arquivo
curl --location 'https://api.azion.com/v4/storage/buckets/<bucket_name>/objects/src/index.html' \ --header 'Accept: application/json;' \ --header 'Content-Type: text/html' \ --header 'Authorization: Token [TOKEN VALUE]' \ --data '@./src/index.html'- Para o arquivo
styles.css, execute o seguinte comando usandosrc/styles/style.csscomo a chave do objeto, e adicionando o caminho do objeto como dados:
curl --location 'https://api.azion.com/v4/storage/buckets/<bucket_name>/objects/src/styles/style.css' \ --header 'Accept: application/json;' \ --header 'Content-Type: text/css' \ --header 'Authorization: Token [TOKEN VALUE]' \ --data '@./src/styles/style.css'- Você deve receber as seguintes respostas para os arquivos:
{ "state": "executed", "data": { "object_key": "src/index.html" }}{ "state": "executed", "data": { "object_key": "src/styles/style.css" }}Crie uma application e defina o tipo de origem como Object Storage
Agora que seu bucket está populado com arquivos, você pode criar uma nova application e um domínio para definir o bucket como a origem do conteúdo e servir esses objetos.
Para facilitar esse processo, use o template Applications Proxy:
- Acesse Azion Console.
- Se você ainda não tem uma conta, crie uma nova visitando a página de inscrição.
- Na página inicial, selecione a opção + Create.
- Encontre o cartão Applications Proxy na seção de templates e selecione-o.
- Dê um nome fácil de lembrar para a sua aplicação.
- Em Route to bypass, digite
/para especificar o caminho raiz da aplicação. - Aguarde o término do processo de implantação.
- Copie o domínio da aplicação, no formato
http://xxxxxxxxxx.map.azionedge.net/.
Agora você precisa configurar uma nova origem do tipo Object Storage e determinar que sua aplicação deve recuperar o conteúdo do bucket e prefixo que você criou. Para fazer isso:
- Acesse o Azion Console > Connector.
- Clique no botão + Connector.
- Na seção General, dê ao seu conector um nome único e descritivo (por exemplo,
My Object Storage Connector). - Na seção Connector Type, selecione Object Storage.
- Na seção Connection Options:
- Para Bucket, selecione o nome do bucket que você criou nos passos anteriores.
- Para Prefix, digite
/src(ou o prefixo que você usou ao fazer upload dos seus objetos).
- Defina o Status como Active.
- Clique no botão Save.
Para ativar o Connector na sua application:
- Acesse a aba Rules Engine.
- Edite a regra padrão ou adicione uma nova regra de requisição.
- Na seção Criteria, para aplicar o Connector para toda a sua aplicação, defina os criteria como
If ${uri} starts with /. - Na seção Behavior, selecione o comportamento Set Connector.
- Selecione o Connector que você deseja aplicar.
- Clique no botão Save.
- Aguarde algum tempo para que as alterações se propaguem para o edge.
Uma vez que as alterações tenham sido feitas, acesse http://xxxxxxxxxx.map.azionedge.net/index.html para ver o arquivo HTML que você carregou com o estilo CSS aplicado.
Para facilitar esse processo, use o template Applications Proxy:
- Acesse Azion Console.
- Se você ainda não tem uma conta, crie uma nova visitando a página de inscrição.
- Na página inicial, selecione a opção + Create.
- Encontre o cartão Applications Proxy na seção de templates e selecione-o.
- Dê um nome fácil de lembrar para a sua aplicação.
- Em Origin Address, digite
httpbin.org.- Este é um origem temporária que será substituída posteriormente por uma origem de Object Storage.
- Em Bypass Route, digite
/para especificar o caminho raiz da aplicação. - Aguarde o término do processo de implantação.
- Copie o domínio da aplicação, no formato
http://xxxxxxxxxx.map.azionedge.net/.
Agora você precisa configurar uma nova origem do tipo Object Storage e determinar que sua aplicação deve recuperar o conteúdo do bucket e prefixo que você criou. Para fazer isso:
- Acesse o Azion Console > Applications.
- Clique na aplicação de proxy que você criou nos passos anteriores.
- Navegue até a guia Origins.
- Clique no botão + Origin.
- Dê um nome fácil de lembrar para a sua origem.
- Em Origin Type, selecione Object Storage.
- Em Bucket Name, adicione o nome do bucket que você criou nos passos anteriores.
- Em Prefix, adicione
/src, que é o prefixo que você adicionou às chaves dos objetos carregados anteriormente. - Clique no botão Save.
Para ativar a origem na sua application:
- Navegue até a guia Rules Engine.
- Selecione Standard Rule.
- Em Behaviors, no comportamento Set Origin, substitua a Standard Origin pela origem que você criou para o seu bucket.
- Clique no botão Save.
- Aguarde algum tempo para que as alterações se propaguem para o edge.
Uma vez que as alterações tenham sido feitas, acesse http://xxxxxxxxxx.map.azionedge.net/index.html para ver o arquivo HTML que você carregou com o estilo CSS aplicado.
Requisitos
Para criar uma application com as configurações necessárias para usar um bucket como origem:
azion create edge-application --name "object storage app" --delivery-protocol "http" --http3 false --origin-type "single_origin" --address "httpbin.org" --origin-protocol-policy "preserve" --host-header "${host}" --browser-cache-settings "honor" --browser-cache-settings-maximum-ttl 0 --cdn-cache-settings "override" --cdn-cache-settings-maximum-ttl 0- Execute a seguinte requisição
POSTno seu terminal, substituindo[VALOR DO TOKEN]pelo seu personal token:
curl --location 'https://api.azionapi.net/edge_applications' --header 'Accept: application/json;' --header 'Authorization: Token [TOKEN VALUE]' --header 'Content-Type: application/json' --data '{ "name": "object storage app", "delivery_protocol": "http", "http3": false, "origin_type": "single_origin", "address": "httpbin.org", "origin_protocol_policy": "preserve", "host_header": "${host}", "browser_cache_settings": "honor", "browser_cache_settings_maximum_ttl": 0, "cdn_cache_settings": "override", "cdn_cache_settings_maximum_ttl": 0}'- Você deve receber uma mensagem semelhante a esta:
{ "results": { "id": <edge_application_id>, "name": "object storage app", "delivery_protocol": "http" ... }, "schema_version": 3}- Copie o valor do campo
edge_application_ide cole-o em um editor de texto para salvá-lo para requisições posteriores. - Execute a seguinte requisição
POSTno seu terminal, substituindo[TOKEN VALUE]pelo seu personal token e<edge_application_id>pelo ID da application que você criou:
curl --location 'https://api.azionapi.net/domains' \--header 'Accept: application/json;' \--header 'Authorization: Token [TOKEN VALUE]' \--header 'Content-Type: application/json' \--data '{ "name": "object storage domain", "cname_access_only": false, "digital_certificate_id": null, "edge_application_id": <edge_application_id>}'- Você deve receber uma resposta semelhante a esta:
{ "results": { "id": <domain_id>, "name": "object storage domain", ... "edge_application_id": <edge_application_id>, "is_active": true, "domain_name": "xxxxxxxxxx.map.azionedge.net", ... }, "schema_version": 3}- Copie a URL no valor
domain_namee cole-a em um editor de texto para acessar mais tarde. - Execute a seguinte requisição
POSTpara criar uma origem de Object Storage para a aplicação, substituindo[TOKEN VALUE]pelo seu personal token,<edge_application_id>pelo ID da application, e o valor debucketpelo nome do bucket que você criou:
curl --location 'https://api.azionapi.net/edge_applications/<edge_application_id>/origins' \--header 'Accept: application/json;' \--header 'Authorization: Token [TOKEN VALUE]' \--header 'Content-Type: application/json' \--data '{ "name": "object storage origin", "origin_type": "object_storage", "bucket": "app-origin", "prefix": "/src"}'- Você deve receber uma resposta semelhante a esta:
{ "results": { "origin_id": <origin_id>, "origin_key": "bdcd7003-ba53-4ed8-8ca0-05b1357cdafd", "name": "New Object Storage origin", "origin_type": "object_storage", ... "bucket": "new-bucket-rw", "prefix": "/" }, "schema_version": 3}- Copie o valor do campo
origin_ide cole-o em um editor de texto para salvá-lo para requisições posteriores. - Execute a seguinte requisição
GETno seu terminal para recuperar o ID da regra padrão do Rules Engine da sua application, substituindo a variável<edge_application_id>pelo ID da application que você copiou anteriormente:
curl --location 'https://api.azionapi.net/edge_applications/<edge_application_id>/rules_engine/request/rules' \--header 'Accept: application/json;' \--header 'Authorization: Token [TOKEN VALUE]'- Você deve receber uma resposta semelhante a esta:
{ ... "results": [ { "id": <rule_id>, "name": "Default Rule", "phase": "default", "behaviors": [ { "name": "set_origin", "target": "<origin_id>" }, { "name": "set_cache_policy", "target": "<cache_setting_id>" } ], ... "description": "" } ]}- Copie o valor do campo
rule_ide cole-o em um editor de texto para salvá-lo para requisições posteriores. - Execute a seguinte requisição
PATCHpara modificar a regra padrão, substituindo<rule_id>pelo ID da regra que você recuperou no passo anterior, mantendo o objetoset_cache_policyigual ao recebido na resposta:
curl --location --request PATCH 'https://api.azionapi.net/edge_applications/<edge_application_id>/rules_engine/request/rules/<rule_id>' \--header 'Accept: application/json;' \--header 'Content-Type: application/json' \--header 'Authorization: Token [TOKEN VALUE]' \--data '{ "behaviors": [ { "name": "set_origin", "target": "<origin_id>" }, { "name": "set_cache_policy", "target": "<cache_setting_id>" } ]}'- Espere algum tempo pela propagação das mudanças.
Uma vez que as alterações tenham sido feitas, acesse o domínio que você criou, no formato http://xxxxxxxxxx.map.azionedge.net/index.html, para ver o arquivo HTML que você carregou com o estilo CSS aplicado.
- Execute a seguinte requisição
POSTno seu terminal, substituindo[TOKEN VALUE]pelo seu personal token:
curl --request POST --url https://api.azion.com/v4/edge_application/applications --header 'Accept: application/json' --header 'Authorization: Token [TOKEN VALUE]' --header 'Content-Type: application/json' --data '{"name": "object storage app","modules": { "edge_cache": { "enabled": true }, "edge_functions": { "enabled": true }, "application_accelerator": { "enabled": false }, "image_processor": { "enabled": false }, "tiered_cache": { "enabled": false }},"active": true,"debug": false}'- Você deve receber uma resposta semelhante a esta:
{"state": "pending","data": { "id": "edge_application_id", "name": "object storage app", "last_editor": "education1@azion.com", "last_modified": "2025-07-25T19:06:13.854005Z", "modules": { "edge_cache": { "enabled": true }, "edge_functions": { "enabled": true }, "application_accelerator": { "enabled": false }, "image_processor": { "enabled": false }, "tiered_cache": { "enabled": false } }, "active": true, "debug": false, "product_version": "3.0"}}-
Copie o valor do campo
edge_application_ide cole-o em um editor de texto para salvá-lo para requisições posteriores. -
Execute a seguinte requisição
POSTno seu terminal para criar um Connector, substituindo[TOKEN VALUE]pelo seu personal token
curl --request POST --url https://api.azion.com/v4/edge_connector/connectors --header 'Accept: application/json' --header 'Authorization: Token [TOKEN VALUE]' --header 'Content-Type: application/json' --data '{"name": "object storage connector","active": true,"type": "edge_storage","attributes": { "bucket": "app-origin", "prefix": "/"}}'-
Copie o valor do campo
<connector_id>e cole-o em um editor de texto para salvá-lo para requisições posteriores. -
Você deve receber uma resposta semelhante a esta:
{"id": "<connector_id>","name": "object storage connector","last_editor": "your-email@example.com","last_modified": "2025-07-22T14:34:31.009649Z","active": true,"product_version": "1.0","type": "edge_storage","attributes": { "bucket": "app-origin", "prefix": "/"}}- Execute a seguinte requisição
POSTno seu terminal, substituindo[TOKEN VALUE]pelo seu personal token
curl --request POST --url https://api.azion.com/v4/workspace/workloads --header 'Accept: application/json' --header 'Authorization: Token [TOKEN VALUE]' --header 'Content-Type: application/json' --data '{"name": "object storage domain","active": true,"infrastructure": 1,"protocols": { "http": { "versions": [ "http1", "http2" ] }},"workload_domain_allow_access": true}'- Você deve receber uma resposta semelhante a esta:
{"state": "pending","data": { "id": "workload_id", "name": "object storage domain", "active": true, "last_editor": "your-email@example.com", "last_modified": "2025-07-25T18:58:25.817955Z", "infrastructure": 1, "tls": { "certificate": null, "ciphers": 7, "minimum_version": "tls_1_3" }, "protocols": { "http": { "versions": [ "http1", "http2" ], "http_ports": [ 80 ], "https_ports": [ 443 ], "quic_ports": null } }, "mtls": { "verification": null, "certificate": null, "crl": null }, "domains": [], "workload_domain_allow_access": true, "workload_domain": "xxxxxxxxxxx.azionedge.net", "product_version": "1.0"}}-
Copie a URL no valor
workload_domaine cole-a em um editor de texto para acessar mais tarde. -
Execute a seguinte requisição
POSTpara vincular o Workload à sua Applications, substituindo[TOKEN VALUE]pelo seu personal token,<edge_application_id>pelo ID da application e<workload_id>pelo ID do Workload.
curl --request POST --url https://api.azion.com/v4/workspace/workloads/<workload_id>/deployments --header 'Accept: application/json' --header 'Authorization: Token [TOKEN VALUE]' --header 'Content-Type: application/json' --data '{"name": "Object Storage App","current": true,"active": true,"strategy": { "type": "default", "attributes": { "edge_application": "<edge_application_id>" }}}'- Execute a seguinte requisição
POSTno seu terminal para criar uma regra do Rules Engine, substituindo a variável<edge_application_id>pelo ID da Applications e<connector_id>pelo ID do Connector que você copiou anteriormente:
curl --request POST --url https://api.azion.com/v4/edge_application/applications/<edge_application_id>/request_rules --header 'Accept: application/json' --header 'Authorization: Token [TOKEN VALUE]' --header 'Content-Type: application/json' --data '{"name": "string","active": true,"criteria": [ { "conditional": "if", "variable": "${uri}", "operator": "starts_with", "argument": "/" } ]],"behaviors": [ { "type": "set_edge_connector", "attributes": { "value": "<connector_id>" } }]}'- Você deve receber uma resposta semelhante a esta:
{"state": "pending","data": { "id": "<rule_id>", "name": "string", "active": true, "criteria": [ [ { "conditional": "if", "variable": "${uri}", "operator": "starts_with", "argument": "/" } ] ], "behaviors": [ { "type": "set_edge_connector", "attributes": { "value": "<connector_id>" } } ], "description": "", "order": 1, "last_editor": "your-email@example.com", "last_modified": "2025-07-25T19:29:30.684210Z"}}- Aguarde algum tempo para que as alterações se propaguem.
Uma vez que as alterações tenham sido feitas, acesse o domínio que você criou, no formato http://xxxxxxxxxx.map.azionedge.net/index.html, para ver o arquivo HTML que você carregou com o estilo CSS aplicado.
Aprenda como usar um bucket do Object Storage como a origem de uma application estática. Assista ao vídeo abaixo: