# Edge Services

O **Azion Edge Services** é um módulo do produto **Orchestrator** que permite o gerenciamento de serviços orquestrados em seus próprios nodes, habilitando o cadastro de recursos e demais configurações via [Azion Console](https://console.azion.com) e a criação e customização de serviços para que possam ser orquestrados nos Edge Nodes definidos.

Configure os gatilhos de instalação, desinstalação e recarregamento e defina as dependências entre os recursos necessários para a execução de seu serviço na sua rede Edge.

---

## Implementação

| Escopo | Guia |
| - | - | 
| Edge Services| [Criando um edge service](/pt-br/documentacao/produtos/guias/orchestrator/criando-edge-service/) |

---

## Como funciona

Ao utilizar a Azion como sua plataforma de Edge, você pode criar e customizar serviços para serem executados na sua rede Edge privada e híbrida. O Azion Edge Services funciona por meio de gatilhos para instalação, desinstalação e recarregamento, com definição das dependências entre os recursos, e implementa nativamente um conjunto de funcionalidades da Azion, como Applications, Firewall e Functions, utilizando como base a tecnologia de Azion Cells. 

Dessa forma, permite construir Applications para uma grande variedade de casos de uso, que variam desde uma CDN de alta escala e qualidade até a hospedagem de aplicações web, aplicações de AI, VR e muitas outras. Para isso, *ative* o **Azion Cells** e defina os **Edge Nodes** que devem receber determinadas aplicações, tudo controlado pelo painel de controle da Azion ou APIs, em uma interface centralizada e com diferentes controles de acesso.

## Resources

Para poder orquestrar serviços em seu dispositivo, você precisa configurar todos os **resources** (recursos) necessários para instalar, desinstalar e recarregar seus serviços.

Um recurso do tipo **Text** indica que o conteúdo será copiado como texto simples para o dispositivo. Esses tipos de recursos normalmente são usados para arquivos de configuração. 

Um recurso do tipo **Shell Script** indica que o recurso será instalado e executado conforme o **trigger** selecionado. O agente do Orchestrator utiliza o *sh-bang* informado no cabeçalho do conteúdo para a execução do script; na ausência de um, é utilizado o **shell** compatível com o padrão POSIX no dispositivo (*/bin/sh*). 

Ambos os tipos de recursos são compatíveis com o uso de **variables** (variáveis) e **facts** (fatos), desde que a etiqueta ``{{ VARNAME }}`` ou ``{{ FACT_NAME }}`` esteja incluída.

Todos os recursos são executados usando o *Path* referido no registro. O campo *Path* refere-se ao caminho absoluto do diretório. Caminhos relativos não serão aceitos e não são suportados.

**Nota:** Há um problema conhecido quando se usa a sintaxe `{#`. Se você usar `{#` e não usar` #}` como fechamento, o resource não será processado e não será provisionado nos edges. Se você usar `{#` e depois usar `#}`, o conteúdo dentro do bloco é considerado um comentário. Neste caso, o arquivo é processado e provisionado, mas sem o conteúdo dentro do comentário. Para provisionar um resource com `{# meu conteúdo #}` você deve usar o seguinte padrão: ``{{'{# meu conteúdo #}'}}``. Nossa equipe de engenharia está ciente do problema e está trabalhando para resolvê-lo.

## Variables

As variáveis são valores dinâmicos que afetam os Edge Services que serão orquestrados e executados em Edge Nodes. Em outras palavras, é possível orquestrar e executar o mesmo serviço, em dispositivos diferentes, com valores diferentes para as configurações, como configurar um serviço na porta 3306 em um dispositivo, e na porta 3307 em outro dispositivo.

Variáveis  podem ser usadas no conteúdo do recurso se a *tag* ``{{VARNAME }}`` for utilizada. Por exemplo:<br /> ``port = {{ PORT_HTTP }}``

Há algumas variáveis especiais pré-definidas que, como fatos, não podem ser sobrescritas. Veja a lista na tabela abaixo:

| Variável               | Descrição                                                    | Valor  | Observação                                                   |
| ---------------------- | ------------------------------------------------------------ | ------ | ------------------------------------------------------------ |
| **CHANGESET_RM_PATH**  | Contém um *path* para um arquivo que contém uma lista de *paths* de todos os arquivos **removidos** ou **modificados** no manifesto atual. | STRING | Está disponível somente enquanto o manifesto está sendo aplicado. Cada linha tem um único *path*. |
| **CHANGESET_ADD_PATH** | Contém um *path* para um arquivo que contém uma lista de *paths* de todos os arquivos **adicionados** ou **modificados** no manifesto atual. | STRING | Está disponível somente enquanto o manifesto está sendo aplicado. Cada linha tem um único *path*. |

## Facts

Em complemento às variáveis definidas, você também pode utilizar **Facts** que são informações técnicas disponíveis sobre seu node, tais como arquitetura, versão do cliente, sistema operacional e versão do sistema operacional. Você pode usá-los, por exemplo, se você estiver configurando múltiplos nodes. 

Esses valores não podem ser sobrescritos e podem ser usados em **resources** usando a tag  `{{ FACT_NAME }}`. Por exemplo:<br />   `{{CLIENT_VERSION}}`.

| Fact | Descrição | Valor | Observação |
| :--- | :---: | :---: | :---: |
| **CLIENT_VERSION** | Versão do Orchestrator agent | MAJOR.MINOR.PATCH | Exemplo: 1.10.3, onde 1 é MAJOR, 10 é MINOR e 3 é PATCH. |
| **ARCH** | Arquitetura do processador | ARM ou; AMD (x86), ambos com 32 ou 64 bits |  |
| **OS_NAME** | Nome do Sistema Operacional | macOS; Linux; FreeBSD; OpenBSD; DragonFlyBSD; NetBSD ou; Solaris |  |
| **OS_DISTRO** | Nome da distribuição do Sistema Operacional, apenas para sistemas baseados em Linux | NAME + RELEASE | NAME: Debian; Ubuntu; openSUSE; Mint Linux; Gentoo; Fedora; CentOS; Arch Linux ou; Kali Linux <br /> <br /> RELEASE: primeiramente obtendo via LSB Release, caso não exista busca em <br/>/etc/os-release o valor de VERSION_ID ou DISTRIB_RELEASE <br /> <br /> No caso dos demais Sistemas Operacionais o valor será sempre vazio. |
| **OS_VERSION** | Versão do sistema operacional, apenas para MacOS | MAJOR.MINOR | Exemplo: 10.5. Para demais Sistemas Operacionais será sempre vazio |
| **CPUS** | Número de CPUs disponíveis | INTEGER | Exemplo: 1, 2, 4. |
| **RAM_SIZE** | Memória total do sistema | BYTES | Exemplo: 1048576 |

## Triggers

Ao configurar resources do tipo **Shell Script**, é necessário definir quais serão os gatilhos (triggers) que farão com que o recurso seja executado.

Os gatilhos são: *"Install"*, *"Reload"* e *"Uninstall"*, tendo cada uma deles uma função e ordem de execução:

**1) Install:** é o primeiro a ser executado e deve ter em seu conteúdo o script necessário para a instalação do serviço.

**2) Reload:** quando configurado, será executado ao final da instalação de todos os resources e também sempre que houver alteração nos vínculos entre Edge Service e Edge Node - por exemplo, uma alteração nos valores de variáveis.

**3) Uninstall:** é executado toda vez que o vínculo entre Edge Services e Edge Node é desfeito, ou seja, sempre que o serviço for apagado dos Edge Nodes nos quais está provisionado.

## Vínculo ao Edge Node

Todos os serviços cadastrados podem ser orquestrados e executados em um ou mais Edge Nodes existentes na sua rede privada.

Apenas os serviços ativos estarão disponíveis para orquestração no Edge Node; após o seu vínculo, você pode alterar o valor das variáveis existentes, apagar ou adicionar novos serviços ao dispositivo.





---