Demonstração de upload da coreHTTP básica do Amazon 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 upload da coreHTTP básica do Amazon 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

Este exemplo demonstra como enviar uma solicitação PUT ao servidor HTTP do Amazon Simple Storage Service (Amazon S3) e fazer upload de um arquivo pequeno. Ele também executa uma solicitação GET para verificar o tamanho do arquivo após o upload. 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 tópico, ela realmente demonstra como usar a coreHTTP em um ambiente de tópico único. A API HTTP é usada somente por uma tarefa nesta 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 arquivo fonte de demonstração tem um nome http_demo_s3_upload.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. Crie um bucket no Amazon S3 seguindo as etapas em Como criar um bucket do S3? no Guia do usuário do Amazon Simple Storage Service.

  2. Faça upload de um arquivo no Amazon 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 no arquivo FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py.

    Para obter instruções de uso, consulte o arquivo FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md.

Funcionalidade

A demonstração primeiro se conecta ao servidor HTTP do Amazon S3 com a autenticação do servidor TLS. Em seguida, cria uma solicitação HTTP para carregar os dados especificados em democonfigDEMO_HTTP_UPLOAD_DATA. E verifica se o arquivo foi carregado com êxito solicitando o tamanho do arquivo, depois de fazer upload do arquivo. O código-fonte da demonstração pode ser encontrado no GitHubsite.

Conexão ao servidor HTTP do Amazon S3

A connectToServerWithBackoffRetriesfunção 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. A função connectToServerWithBackoffRetries retorna 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. Ela usa a interface de transporte baseada em mbedTLS que é implementada no arquivo FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c. A definição de prvConnectToServer pode ser encontrada no GitHubsite.

Upload de dados

A função prvUploadS3ObjectFile demonstra como criar uma solicitação PUT e especificar o arquivo para fazer upload. O bucket do Amazon S3 para o qual é feito o upload do arquivo e o nome desse arquivo são especificados na URL pré-assinada. Para economizar memória, o mesmo buffer é usado para os cabeçalhos de solicitação e para receber a resposta. A resposta é recebida de forma síncrona usando a função de API HTTPClient_Send. Um código de status de resposta 200 OK é esperado do servidor HTTP do Amazon S3. Qualquer outro código de status é um erro.

O código-fonte do prvUploadS3ObjectFile() pode ser encontrado no GitHubsite.

Verificação do upload

A função prvVerifyS3ObjectFileSize chama prvGetS3ObjectFileSize para recuperar o tamanho do objeto no bucket do S3. Atualmente, o servidor HTTP do Amazon S3 é compatível com 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 é esperada do servidor. Qualquer outro código de status de resposta é um erro.

O código-fonte do prvGetS3ObjectFileSize() pode ser encontrado no GitHubsite.