coreHTTP 基本 Amazon S3 アップロードのデモ - 無料RTOS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

coreHTTP 基本 Amazon S3 アップロードのデモ

重要

このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon-FreeRTOS Github リポジトリ移行ガイド」を参照してください。

序章

この例では、Amazon Simple Storage Service (Amazon S3) HTTP サーバーに PUT リクエストを送信し、小さなファイルをアップロードする方法を示します。また、アップロード後に GET リクエストを実行して、ファイルのサイズを確認します。この例で使用するネットワークトランスポートインターフェイスは、mbedTLS を使用して、coreHTTP を実行する IoT デバイスクライアントと Amazon S3 HTTP サーバー間に相互認証された接続を確立します。

注記

FreeRTOS デモをセットアップして実行するには、無料利用開始RTOS の手順に従います。

シングルスレッドとマルチスレッド

coreHTTP には、シングルスレッドとマルチスレッド (マルチタスク) の 2 つの使用モデルがあります。このデモは、このセクションでは 1 つのスレッドで HTTP ライブラリを実行しますが、実際にはシングルスレッド環境で coreHTTP を使用する方法を示しています。このデモでは、1 つのタスクのみが HTTP API を使用します。シングルスレッドアプリケーションは HTTP ライブラリを繰り返し呼び出す必要がありますが、マルチスレッドアプリケーションは、代わりにエージェント (またはデーモン) タスク内でバックグラウンドで HTTP リクエストを送信できます。

ソースコードの編成

デモソースファイルの名前は http_demo_s3_upload.c で、 freertos/demos/coreHTTP/ ディレクトリと GitHubウェブサイトにあります。

Amazon S3 HTTP サーバー接続の設定

このデモでは、署名付き URL を使用して Amazon S3 HTTP サーバーに接続し、ダウンロードするオブジェクトへのアクセスを許可します。Amazon S3 HTTP サーバーの TLS 接続では、サーバー認証のみが使用されます。アプリケーションレベルでは、オブジェクトへのアクセスは、署名付き URL クエリのパラメータを使用して認証されます。以下のステップに従って、 AWSへの接続を設定します。

  1. AWS アカウントをセットアップします。

    1. まだ作成していない場合は、 AWS アカウント を作成します

    2. アカウントとアクセス許可は AWS Identity and Access Management (IAM) を使用して設定されます。IAM は、アカウント内の各ユーザーのアクセス権限の管理に使用します。デフォルトでは、ルート所有者によって付与されるまで、ユーザーにはアクセス権限がありません。

      1. AWS アカウントにユーザーを追加するには、IAM ユーザーガイド を参照してください。

      2. このポリシーを追加して、FreeRTOS および にアクセスするためのアクセス許可 AWS IoT を AWS アカウントに付与します。

        • AmazonS3FullAccess

  2. Amazon Simple Storage Service ユーザーガイドS3 バケットを作成する方法に従って、Amazon S3 にバケットを作成します。

  3. S3 バケットにファイルとフォルダをアップロードする方法のステップに従って、Amazon S3 にファイルをアップロードします。

  4. FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py ファイルにあるスクリプトを使用して、署名付き URL を生成します。

    使用手順については、FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md ファイルを参照してください。

機能

このデモでは、まず TLS サーバー認証を使用して Amazon S3 HTTP サーバーに接続します。次に、HTTP リクエストを作成して、democonfigDEMO_HTTP_UPLOAD_DATA に指定されているデータをアップロードします。ファイルをアップロードした後、ファイルのサイズをリクエストして、ファイルが正常にアップロードされたことを確認します。デモのソースコードは、 GitHubウェブサイトにあります。

Amazon S3 HTTP サーバーに接続する

connectToServerWithBackoff再試行関数は、HTTP サーバーへの TCP 接続を試みます。接続が失敗すると、タイムアウト後に接続を再試行します。タイムアウト値は、最大試行回数に達するか、最大タイムアウト値に達するまで、指数関数的に増加します。connectToServerWithBackoffRetries 関数は、設定された試行回数に達してもサーバーへの TCP 接続を確立できない場合に、失敗ステータスを返します。

prvConnectToServer 関数は、サーバー認証のみを使用して Amazon S3 HTTP サーバーへの接続を確立する方法を示します。この関数は、FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c ファイルで実装されている mbedTLS ベースのインターフェイスを使用します。の定義はprvConnectToServerGitHubウェブサイトで確認できます。

データをアップロードする

prvUploadS3ObjectFile 関数は、PUT リクエストの作成方法とアップロードするファイルの指定方法を示します。ファイルのアップロード先の Amazon S3 バケットと、アップロードするファイルの名前は、署名付き URL に指定されます。メモリを節約するために、リクエストヘッダーとレスポンスの受信の両方に同じバッファが使用されます。レスポンスは、HTTPClient_Send API 関数を使用して同期的に受信されます。200 OK レスポンスステータスコードが Amazon S3 HTTP サーバーから返されることが想定されます。その他のステータスコードはエラーです。

のソースコードprvUploadS3ObjectFile()は、 GitHubウェブサイトにあります。

アップロードを検証する

prvVerifyS3ObjectFileSize 関数は、prvGetS3ObjectFileSize を呼び出して S3 バケットのオブジェクトのサイズを取得します。Amazon S3 HTTP サーバーは、現在署名付き URL を使用した HEAD リクエストをサポートしていないため、0 番目のバイトがリクエストされます。ファイルのサイズは、レスポンスの Content-Range ヘッダーフィールドに含まれています。206 Partial Content レスポンスがサーバーから返されることが想定されます。その他のレスポンスステータスコードはエラーです。

のソースコードprvGetS3ObjectFileSize()は、 GitHubウェブサイトにあります。