Demonstração de download de coreHTTP básica do S3 - FreeRTOS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Demonstração de download de coreHTTP básica do S3

Importante

Esta é uma versão arquivada do Guia do usuário do FreeRTOS para usar com a versão 202210.00 do FreeRTOS. Para obter a versão mais recente deste documento, consulte o Guia do usuário do FreeRTOS.

Introdução

Esta demonstração mostra como usar solicitações de intervalo para fazer download de arquivos do servidor HTTP do Amazon S3. As solicitações de intervalo têm suporte nativo na API do coreHTTP quando você usa HTTPClient_AddRangeHeader para criar a solicitação HTTP. As solicitações de intervalo são altamente recomendadas para um ambiente de microcontrolador. Ao baixar um arquivo grande em intervalos separados e não em uma única solicitação, cada seção do arquivo pode ser processada sem bloquear o soquete da rede. As solicitações de intervalo diminuem o risco de perda de pacotes, que exigem retransmissões na conexão TCP e, portanto, melhoram o consumo de energia do dispositivo.

Este exemplo usa uma interface de transporte de rede que usa mbedTLS para estabelecer uma conexão mutuamente autenticada entre um cliente de dispositivo de IoT executando coreHTTP e o servidor HTTP do Amazon S3.

nota

Para configurar e executar as demonstrações do FreeRTOS, siga as etapas em Conceitos básicos do FreeRTOS.

Thread único versus thread múltiplo

Existem dois modelos de uso da coreHTTP, com thread único e com threads múltiplos (multitarefas). Embora a demonstração nesta seção execute a biblioteca HTTP em um thread, ela realmente demonstra como usar a coreHTTP em um ambiente com thread único (somente uma tarefa usa a API HTTP na demonstração). Embora as aplicações com thread único devam chamar repetidamente a biblioteca HTTP, as aplicações com threads múltiplos podem enviar solicitações HTTP em segundo plano em uma tarefa de agente (ou daemon).

Organização de código-fonte

O projeto de demonstração tem um nome http_demo_s3_download.c e pode ser encontrado no freertos/demos/coreHTTP/ diretório e no GitHubsite.

Configuração de conexão do servidor HTTP do Amazon S3

Esta demonstração usa uma URL pré-assinada para se conectar ao servidor HTTP do Amazon S3 e autorizar o acesso ao objeto para download. A conexão TLS do servidor HTTP do Amazon S3 usa somente a autenticação do servidor. No nível da aplicação, o acesso ao objeto é autenticado com os parâmetros na consulta de URL pré-assinada. Siga as etapas abaixo para configurar sua conexão com a AWS.

Inscreva-se para um Conta da AWS

Se você não tiver um Conta da AWS, conclua as etapas a seguir para criar um.

Para se inscrever em um Conta da AWS
  1. Abra a https://portal.aws.amazon.com/billing/inscrição.

  2. Siga as instruções online.

    Parte do procedimento de inscrição envolve receber uma chamada telefônica ou mensagem de texto e inserir um código de verificação no teclado do telefone.

    Quando você se inscreve em um Conta da AWS, um Usuário raiz da conta da AWSé criado. O usuário-raiz tem acesso a todos os Serviços da AWS e recursos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar tarefas que exigem acesso de usuário-raiz.

AWS envia um e-mail de confirmação após a conclusão do processo de inscrição. A qualquer momento, você pode visualizar a atividade atual da sua conta e gerenciar sua conta acessando https://aws.amazon.com/e escolhendo Minha conta.

Criar um usuário com acesso administrativo

Depois de se inscrever em um Conta da AWS, proteja seu Usuário raiz da conta da AWS AWS IAM Identity Center, habilite e crie um usuário administrativo para que você não use o usuário root nas tarefas diárias.

Proteja seu Usuário raiz da conta da AWS
  1. Faça login AWS Management Consolecomo proprietário da conta escolhendo Usuário raiz e inserindo seu endereço de Conta da AWS e-mail. Na próxima página, insira a senha.

    Para obter ajuda ao fazer login usando o usuário-raiz, consulte Fazer login como usuário-raiz no Guia do usuário do Início de Sessão da AWS .

  2. Habilite a autenticação multifator (MFA) para o usuário-raiz.

    Para obter instruções, consulte Habilitar um dispositivo de MFA virtual para seu usuário Conta da AWS raiz (console) no Guia do usuário do IAM.

Criar um usuário com acesso administrativo
  1. Habilita o Centro de Identidade do IAM.

    Para obter instruções, consulte Habilitar o AWS IAM Identity Center no Guia do usuário do AWS IAM Identity Center .

  2. No Centro de Identidade do IAM, conceda o acesso administrativo a um usuário.

    Para ver um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte Configurar o acesso do usuário com o padrão Diretório do Centro de Identidade do IAM no Guia AWS IAM Identity Center do usuário.

Iniciar sessão como o usuário com acesso administrativo
  • Para fazer login com o seu usuário do Centro de Identidade do IAM, use o URL de login enviado ao seu endereço de e-mail quando o usuário do Centro de Identidade do IAM foi criado.

    Para obter ajuda para fazer login usando um usuário do IAM Identity Center, consulte Como fazer login no portal de AWS acesso no Guia Início de Sessão da AWS do usuário.

Atribuir acesso a usuários adicionais
  1. No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.

    Para obter instruções, consulte Criar um conjunto de permissões no Guia do usuário do AWS IAM Identity Center .

  2. Atribua usuários a um grupo e, em seguida, atribua o acesso de autenticação única ao grupo.

    Para obter instruções, consulte Adicionar grupos no Guia do usuário do AWS IAM Identity Center .

Para conceder acesso, adicione as permissões aos seus usuários, grupos ou perfis:

  1. Criar um bucket no S3 seguindo as etapas em Como criar um bucket do S3? no console Guia do usuário do Amazon Simple Storage Service.

  2. Faça upload de um arquivo no S3 seguindo as etapas em Como fazer upload de arquivos e pastas em um bucket do S3?.

  3. Gere um URL pré-assinado usando o script localizado em FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py. Para obter instruções de uso, consulte FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md.

Funcionalidade

A demonstração recupera primeiro o tamanho do arquivo. Depois, solicita cada intervalo de bytes sequencialmente, em um loop, com tamanhos de intervalo de democonfigRANGE_REQUEST_LENGTH.

O código-fonte da demonstração pode ser encontrado no GitHubsite.

Conexão ao servidor HTTP do Amazon S3

A função connectToServerWithBackoffRetries() tenta fazer uma conexão TCP com o servidor HTTP. Se a conexão falhar, ela tentará novamente após um tempo limite. O valor do tempo limite aumentará exponencialmente até que o número máximo de tentativas ou o valor do tempo limite seja atingido. connectToServerWithBackoffRetries() retornará um status de falha se a conexão TCP com o servidor não puder ser estabelecida após o número configurado de tentativas.

A função prvConnectToServer() demonstra como estabelecer uma conexão com o servidor HTTP do Amazon S3 usando somente a autenticação do servidor. Ele usa a interface de transporte baseada em mbedTLS que é implementada no arquivo FreeRTOS- _mbedtls.c. Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using

O código-fonte de prvConnectToServer() pode ser encontrado em GitHub.

Criação de solicitação de intervalo

A função HTTPClient_AddRangeHeader() da API oferece suporte a serialização de um intervalo de bytes nos cabeçalhos da solicitação HTTP para formar uma solicitação de intervalo. As solicitações de intervalo são usadas nesta demonstração para recuperar o tamanho do arquivo e solicitar cada seção do arquivo.

A função prvGetS3ObjectFileSize() recupera o tamanho do arquivo no bucket do S3. O cabeçalho Connection: keep-alive é adicionado nessa primeira solicitação ao Amazon S3 para manter a conexão aberta após o envio da resposta. Atualmente, o servidor HTTP do S3 não oferece suporte às solicitações HEAD usando uma URL pré-assinada, portanto, o 0 (zero) byte é solicitado. O campo de cabeçalho da resposta Content-Range contém o tamanho do arquivo. Uma resposta 206 Partial Content do servidor é esperada; qualquer outro código de status de resposta recebido é um erro.

O código-fonte de prvGetS3ObjectFileSize() pode ser encontrado em GitHub.

Depois de recuperar o tamanho do arquivo, essa demonstração cria uma nova solicitação de intervalo para cada intervalo de bytes do arquivo a ser baixado. Ela usa HTTPClient_AddRangeHeader() para cada seção do arquivo.

Envio de solicitações e recebimento de respostas

A função prvDownloadS3ObjectFile() envia as solicitações de intervalo em um loop até que o arquivo inteiro seja baixado. A função HTTPClient_Send() da API envia uma solicitação e recebe a resposta de forma síncrona. Quando a função retorna, a resposta é recebida em um xResponse. Em seguida, o código de status é verificado como 206 Partial Content e o número de bytes baixados até o momento é incrementado pelo valor do cabeçalho Content-Length.

O código-fonte de prvDownloadS3ObjectFile() pode ser encontrado em GitHub.