WEB3DEV

Cover image for Execute o Indexador Algorand no Azure com a CLI do Azure
Banana Labs
Banana Labs

Posted on • Atualizado em

Execute o Indexador Algorand no Azure com a CLI do Azure

A blockchain da Algorand, como outras blockchains populares, gera uma enorme quantidade de dados. Um novo bloco é criado a cada 4 a 5 segundos com um número de transações variando de algumas dezenas a mais de cem transações em cada bloco. Ter uma maneira de fazer relatórios destes dados é crucial para qualquer aplicativo de negócios conectado à blockchain e isso requer um poderoso mecanismo de busca, capaz, por exemplo, de obter grandes transações conhecidas como “transações de baleias”, ou rastrear o saldo de uma conta específica.

O Indexador Algorand fornece recursos de pesquisa poderosos para a blockchain Algorand. Você pode consultar o indexador para transações, ativos, blocos, contas, fornecendo vários critérios. O Indexador requer um banco de dados PostgreSQL para armazenar os dados do livro-razão e uma conexão com um nó de arquivo Algorand para ler os dados. Já existe um guia completo de como instalar um Indexador no portal do desenvolvedor Algorand, mas este tutorial focará em fazê-lo no Microsoft Azure, o serviço de nuvem fornecido pela Microsoft. Primeiro, usaremos a Cli do Azure, que é uma interface de linha de comando para interagir com o Azure e, em seguida, o Azure ARM Template, que permite usar o modelo json para implementação, permitindo a automação da implementação.

Recursos completos podem ser encontrados no repositório do github.

Requisitos

Esperamos que você se sinta confortável com scripts de shell linux e tenha um entendimento básico de rede. Você também precisará de uma assinatura do Azure. O tutorial pode ser executado com uma conta gratuita do Azure, mas observe que o armazenamento do banco de dados na rede principal exigirá capacidade além do nível gratuito. Portanto, você pode executar todos os comandos com o nível gratuito, mas o comando que executa o indexador requer uma quantidade considerável de tempo e armazenamento para ser concluído. De acordo com este link, o tamanho do Indexador Algorand na rede principal era de 351 GB e 144 GB na TestNet em 2021-05-02. Eu aconselharia pelo menos 1 para o tamanho do armazenamento para que a recuperação seja bem-sucedida para um indexador na rede principal.

Os comandos no tutorial foram executados em uma máquina virtual Azure Ubuntu 18.04-LTS, mas você também pode executá-los em um sistema fora do Azure.

Se você é novo na CLI do Azure, consulte este documento: https://docs.microsoft.com/en-us/cli/azure/get-started-with-azure-cli. Certifique-se de seguir os links fornecidos no tutorial, pois não copiaremos a documentação do Azure aqui.

Passos

  1. CLI do Azure ou Azure ARM Template?
  2. Instale a CLI do Azure
  3. Entrar
  4. Configure seu ambiente de trabalho.
  5. Crie o banco de dados do indexador
  6. Crie a VM do Azure para instalar e executar os binários do Indexador.
  7. Teste sua conexão com o banco de dados
  8. Execute o indexador
  9. Exporte recursos para criar um ARM Template
  10. Resumo

1. CLI do Azure ou Azure ARM Template?

Quando você deseja automatizar a implantação de recursos no Azure, geralmente usa o ARM Template para definir seus recursos em arquivos JSON e colocá-los sob controle de versão, com o Git, por exemplo. O principal problema com o ARM Template é que, quando você tem implantações complexas com recursos vinculados uns aos outros, isso pode se tornar difícil. Você precisa saber alguns detalhes de configuração que estão ocultos ao usar o portal do Azure ou a CLI do Azure.

Para este tutorial, usaremos primeiro a Cli do Azure para implantar nossos recursos e, em seguida, exportaremos todos os recursos criados como um modelo do Azure. E após algumas limpezas necessárias nos arquivos exportados, vamos reimplantar nossa stack usando o modelo.

2. Instale a CLI do Azure

A CLI do Azure é a interface de linha de comando fornecida pela Microsoft para provisionar recursos no Azure. Também é seu amigo quando você deseja integrar a implantação do Azure a um fluxo de trabalho automatizado. Execute os comandos abaixo para instalá-la.

 #Install dependencies
sudo apt-get update
sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg

#Install Microsoft signing key
curl -sL https://packages.microsoft.com/keys/microsoft.asc |
    gpg --dearmor |
    sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null

#Add the Azure CLI software repository
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" |
    sudo tee /etc/apt/sources.list.d/azure-cli.list

#Install
sudo apt-get update
sudo apt-get install azure-cli
Enter fullscreen mode Exit fullscreen mode

3. Entrar

Quando a instalação estiver concluída, você precisa fazer o login.

az login

Se você executar isso em um sistema com uma GUI, ele abrirá uma página da Web em seu navegador para você autenticar. Caso contrário, ele exibirá um código que você precisa inserir em outro dispositivo no qual você tenha um navegador da web. Acesse https://aka.ms/devicelogin e digite o código quando solicitado. Se, como eu, você executa em um sistema sem navegador disponível, execute az login --use-device-code diretamente.

4. Configure seu ambiente de trabalho.

Antes de criar qualquer recurso no Azure, a primeira escolha que você precisa fazer é a localização de seus recursos. O Azure fornece regiões e zonas de disponibilidade que definem onde seus recursos estarão fisicamente localizados. Nem todos os recursos e serviços estão disponíveis em todas as regiões. Exceto para um propósito de teste muito curto, você não deve selecionar um local aleatório para seus recursos.

O grupo de recursos do Azure é um recurso de gerenciamento que permite agrupar recursos relacionados e aplicar a configuração global neles. Todos os recursos que criaremos para este tutorial pertencerão ao mesmo grupo de recursos. Isso é muito útil, pois excluir o grupo de recursos no final do tutorial excluirá todos os recursos criados no grupo.

export ALGORAND_RESOURCE_GROUP=algorand-resource-group
export ALGORAND_LOCATION=WestEurope
export ALGORAND_VNET=algorand-vnet
export ALGORAND_DB_SUBNET=algorand-subnet-db
export ALGORAND_VM_SUBNET=algorand-subnet-vm

#Set the default location to apply to all resources
az configure --defaults location=$ALGORAND_LOCATION
#create resource group
az group create --name $ALGORAND_RESOURCE_GROUP
#Set default resource group
az configure --defaults group=$ALGORAND_RESOURCE_GROUP
Enter fullscreen mode Exit fullscreen mode

5. Crie o banco de dados do indexador

No momento da redação deste tutorial, a última versão do Indexador Algorand é a 2.9.0 e foi testada com o Postgres 13. Existem dois serviços diferentes fornecidos pelo Azure para implantar um servidor PostgreSQL gerenciado: servidor único do Azure e servidor flexível do Azure.

Uma das principais diferenças entre ambos é que o último tem como alvo a carga de trabalho de missão crítica. O servidor único do Azure seria suficiente para nosso tutorial, mas apenas o servidor flexível do Azure oferece suporte ao PostgreSQL 13 no momento da redação deste tutorial.
Use os comandos de criação de servidor flexível az postgres para criar seu banco de dados.

export DB_USER=algorandindexer
export DB_PASSWORD=xxxxxxxx
export DB_NAME=algorand-indexer-db

az postgres flexible-server create --name algorand-indexer-flexible-server \
  --vnet $ALGORAND_VNET --subnet $ALGORAND_DB_SUBNET --address-prefixes 172.0.0.0/16 --subnet-prefixes 172.0.0.0/24\
  --admin-user $DB_USER --admin-password $DB_PASSWORD \
  --sku-name Standard_B1ms --tier Burstable --storage-size 1024  --tags "Billing=algorand" --version 13 \
  --database-name $DB_NAME --yes
Enter fullscreen mode Exit fullscreen mode

Quando você cria um servidor flexível, uma Vnet (rede virtual) e uma sub-rede são necessárias. Você pode usar uma Vnet existente, mas uma sub-rede dedicada é necessária e será usada apenas para os recursos criados no servidor flexível. Você não pode criar outro tipo de recursos nessa sub-rede. Se a Vnet e/ou a sub-rede não existirem, a cli do azure poderá criá-los automaticamente antes de criar o servidor de banco de dados. É por isso que fornecemos --address-prefixes e --subnet-prefixes. Também podemos criar a Vnet e a sub-rede usando os comandos az network vnet create e az network vnet subnet create da rede virtual do Azure e, em seguida, passar os nomes da vnet e da sub-rede para o comando de banco de dados.

O parâmetro --yes é obrigatório se você usar o comando com um fluxo de trabalho automatizado. Ele confirma automaticamente a criação da Vnet e da sub-rede. Se você não usá-lo, a cli do azure solicitará que você confirme a criação.

Com relação a --sku-name, --tier e --storage-size, esses parâmetros são sobre o poder de computação do seu servidor de banco de dados. Você deve selecionar valores que correspondam à sua necessidade e verificar o preço. Observe, no entanto, que a unidade --storage-size é GB, então temos 1 TB aqui. Ao usar uma conta de nível gratuito, como o tamanho do armazenamento é limitado, você provavelmente precisará reduzir esse valor. Infelizmente, o indexador pode, portanto, não ter espaço suficiente para concluir sua inicialização.

A saída do comando exibirá o nome DNS privado do banco de dados no campo host da saída json. Você precisa mantê-lo para uso posterior ao executar os binários do indexador. Veja a Figura 5-1 para o nome DNS gerado em nosso exemplo.

output
Figura 5-1 Exibição do comando de saída mostrando o nome DNS privado

6. Crie a VM do Azure para instalar e executar os binários do Indexador.

A VM do Azure é usada para criar máquinas virtuais. Usaremos uma para instalar e executar os binários do indexador Algorand. Ao criar uma máquina virtual, você precisa configurar como fará login no servidor. Uma prática recomendada é usar chaves SSH e evitar uma autenticação simples de usuário/senha. O Azure também permite criar e gerenciar chaves SSH.

#First create a subnet for all your vms
az network vnet subnet create --vnet-name $ALGORAND_VNET --address-prefixes 172.0.1.0/24 --name $ALGORAND_VM_SUBNET

#create ssh key for the vm. the private key will be saved on 
#the local computer under ~/.ssh/
az sshkey create --name "algorand-key"

#create vm
az vm create --name algorand-indexer-vm --image Canonical:UbuntuServer:18.04-LTS:latest \
  --admin-username algoranduser --ssh-key-name algorand-key \
  --size Standard_B2s --public-ip-address-allocation static \
  --subnet $ALGORAND_VM_SUBNET --vnet-name $ALGORAND_VNET \
  --custom-data ./install-indexer-binaries.yml
Enter fullscreen mode Exit fullscreen mode

O segundo comando irá gerar um par de chaves pública/privada e armazená-los em ~/.ssh/ em seu computador (verifique a saída do comando para a localização exata). Certifique-se de executar chmod 600 na chave privada antes de usá-la, caso contrário, seu cliente ssh reclamará. A CLI do Azure carregará a chave pública para o Azure e você poderá fazer referência a ela pelo nome ao criar sua VM. Ao fazer isso, a chave pública será implantada no ~/.ssh/authorized_keys de sua vm azure.

--public-ip-address-allocation static criará um endereço IP estático para sua VM. --size definirá o poder de computação da sua vm. Você pode executar az vm list-skus para exibir os valores disponíveis e também verificar esta página para obter uma descrição das configurações disponíveis.

--image permite selecionar o sistema operacional que será instalado em sua vm. Consulte esta página para obter informações adicionais sobre as imagens disponíveis.

--custom-data permite que você passe um arquivo de inicialização cloud init que será executado assim que sua vm for criada. Nós o usamos aqui para baixar os binários do Indexador Algorand e instalá-los. Aqui está o conteúdo do arquivo yaml referenciado no comando.

#cloud-config

runcmd:
  - mkdir /run/algorand
  - wget https://github.com/algorand/indexer/releases/download/2.9.0/algorand-indexer_linux_amd64_2.9.0.tar.bz2 -O /run/algorand/algorand-indexer_linux_amd64_2.9.0.tar.bz2
  - wget https://raw.githubusercontent.com/algorand/go-algorand/master/installer/genesis/betanet/genesis.json -O /run/algorand/betanet_genesis.json
  - mv /run/algorand/algorand-indexer_linux_amd64_2.9.0.tar.bz2 /home/algoranduser/
  - mv /run/algorand/betanet_genesis.json /home/algoranduser/
  - chown algoranduser /home/algoranduser/algorand-indexer_linux_amd64_2.9.0.tar.bz2
  - chown algoranduser /home/algoranduser/betanet_genesis.json
  - runuser -u algoranduser mkdir /home/algoranduser/indexer
  - runuser -c "tar -xf /home/algoranduser/algorand-indexer_linux_amd64_2.9.0.tar.bz2 -C /home/algoranduser/indexer" - algoranduser
  - runuser -c "mv /home/algoranduser/betanet_genesis.json /home/algoranduser/indexer" - algoranduser
Enter fullscreen mode Exit fullscreen mode

Observe que o script de inicialização é executado como root, portanto, você precisa executar os comandos apropriados (ou seja, runuser e/ou chown) para utilizar o usuário criado para sua VM acima. Aqui, apenas baixamos o arquivo binário e o arquivo genesis para Algorand Betanet (por exemplo, se planejamos executar um Indexador no Betanet). Mais tarde, nos conectaremos à vm para executar o indexador. Mas antes disso, precisamos ter certeza de que nossa vm pode se conectar ao banco de dados.

7. Teste sua conexão com o banco de dados

Quando você cria uma VM no Azure, algumas regras, por padrão, de rede são aplicadas aos seus recursos. Por exemplo, todos os recursos criados em uma Vnet podem acessar um ao outro, você não precisa adicionar regras específicas. A regra AllowVnetInbound é anexada automaticamente à interface de rede de sua vm. Isso significa que nossa vm Indexador já pode acessar o banco de dados.

#connect to the indexer vm from the computer on which you installed azure-cli
ssh -i /home/<user>/.ssh/<generated_ssh_private_key_path> algoranduser@<vm_ip_static_adress>

az postgres flexible-server connect --admin-user algorandindexer --name algorand-indexer-flexible-server --interactive
Enter fullscreen mode Exit fullscreen mode

Digite a senha do banco de dados quando solicitado e você deverá obter uma linha de comando no formulário do servidor de banco de dados para enviar comandos postgresql. Digite exit para voltar ao indexador vm.

8. Execute o indexador

Agora você precisa usar os binários baixados no script acima do cloud init para executar o indexador

cd /home/algoranduser/indexer
./algorand-indexer daemon -P "host=algorand-indexer-flexible-server.postgres.database.azure.com port=5432 user=algorandindexer password= dbname=postgres sslmode=require" --algod-net="archive_node_url" --algod-token="archive_node_token_access" --genesis [path_to_genesis_file]
Enter fullscreen mode Exit fullscreen mode

Observe que o processo será executado por alguns dias para ser concluído se você executá-lo em BetaNet, TestNet ou MainNet.

9. Exporte recursos para criar um ARM Template

Agora é hora de criar um template correspondente a todos os nossos recursos do indexador. Também é hora de você ver quantos recursos foram criados automaticamente para você ao usar a CLI do Azure.

az group export --name algorand-indexer-deployment > algorand_indexer_deployment.json
Enter fullscreen mode Exit fullscreen mode

É possível filtrar os recursos que são exportados para a implantação, mas como usamos um grupo de recursos específico para este tutorial, exportaremos tudo.
Agora você precisa limpar o template porque ele contém muitos valores estáticos que são válidos apenas para sua implantação atual. Para reutilizá-lo facilmente, você deve:

Atualizar o recurso de VM.

Localize o recurso VM, que tem o tipo:"Microsoft.Compute/virtualMachines"
e remova os campos properties.storageProfile.osDisk.managedDisk.id, properties.osProfile.requireGuestProvisionSignal. Acrescente um novo campo properties.osProfile.customData que deve conter a versão codificada em base64 do script cloud init que utilizamos no passo 6.

Atualizar o servidor de banco de dados.

Localize o recurso do servidor de banco de dados que tem o tipo: Microsoft.DBforPostgreSQL/flexibleServers e acrescente o campo properties.administratorLoginPassword. Como se trata de uma senha, você deve certificar-se de não usar uma string visível como valor. Por favor, consulte o modelo que eu forneci no repositório do Github para um exemplo.

Mais limpeza.

Existem muitos recursos do tipo Microsoft.DBforPostgreSQL/flexibleServers/configurations. Eu não os incluí no template do repositório Github para simplificar. Eles contêm configurações padrão que serão criadas automaticamente. Você pode removê-los.

Se você quiser testar o template, execute az deployment group create --resource-group $ALGORAND_RESOURCE_GROUP --parameters @full_deployment_parameters.json --template-file ./full_deployment_template.json. O arquivo full_deployment_parameters.json contém os parâmetros necessários para a implantação. Por favor, verifique o repositório Github para um exemplo.

10. Sumário

Neste tutorial, abordamos as etapas necessárias para configurar e executar um Indexador Algorand na nuvem do Microsoft Azure, primeiro usando a CLI do Azure, a interface de linha de comando do Azure, depois usando modelos do Azure ARM criados exportando todos os recursos criados com a CLI do Azure. A segunda opção habilita o controle de versão do seu recurso.

Observe que tópicos como alta disponibilidade não foram abordados neste tutorial, que é fornecido para fins de aprendizado e não se destina a executar infraestrutura pronta para produção.


Esse artigo é uma tradução de Dame Seiel feita por @bananlabs. Você pode encontrar o artigo original aqui

Top comments (0)