coreHTTP 基本 Amazon S3 アップロードのデモ
重要
このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon FreeRTOS Github リポジトリ移行ガイド」を参照してください。
序章
この例では、Amazon Simple Storage Service (Amazon S3) HTTP サーバーに PUT リクエストを送信し、小さなファイルをアップロードする方法を示します。また、アップロード後に GET リクエストを実行して、ファイルのサイズを確認します。この例で使用するネットワークトランスポートインターフェイス
注記
FreeRTOS デモをセットアップして実行するには、FreeRTOS の開始方法 の手順に従います。
シングルスレッドとマルチスレッド
coreHTTP には、シングルスレッドとマルチスレッド (マルチタスク) の 2 つの使用モデルがあります。このデモは、このセクションでは 1 つのスレッドで HTTP ライブラリを実行しますが、実際にはシングルスレッド環境で coreHTTP を使用する方法を示しています。このデモでは、1 つのタスクのみが HTTP API を使用します。シングルスレッドアプリケーションは HTTP ライブラリを繰り返し呼び出す必要がありますが、マルチスレッドアプリケーションは、代わりにエージェント (またはデーモン) タスク内でバックグラウンドで HTTP リクエストを送信できます。
ソースコードの編成
デモソースファイルの名前は http_demo_s3_upload.c です。このファイルは、 ディレクトリと GitHubfreertos/demos/coreHTTP/
Amazon S3 HTTP サーバー接続の設定
このデモでは、署名付き URL を使用して Amazon S3 HTTP サーバーに接続し、ダウンロードするオブジェクトへのアクセスを許可します。Amazon S3 HTTP サーバーの TLS 接続では、サーバー認証のみが使用されます。アプリケーションレベルでは、オブジェクトへのアクセスは、署名付き URL クエリのパラメータを使用して認証されます。以下のステップに従って、AWS への接続を設定します。
-
AWS アカウントを次のようにセットアップします。
-
まだ行っていない場合は、AWS アカウントを作成
します。 -
アカウントとアクセス権限は、AWS Identity and Access Management (IAM) を使用して設定します。IAM は、アカウント内の各ユーザーのアクセス権限の管理に使用します。デフォルトでは、ルート所有者によって付与されるまで、ユーザーにはアクセス権限がありません。
-
ユーザーを AWS アカウントに追加する方法については、「IAM ユーザーガイド」を参照してください。
-
このポリシーを追加して、AWS アカウントに FreeRTOS と AWS IoT にアクセスする権限を付与します。
-
AmazonS3FullAccess
-
-
-
-
Amazon Simple Storage Service ユーザーガイドの S3 バケットを作成する方法に従って、Amazon S3 にバケットを作成します。
-
S3 バケットにファイルとフォルダをアップロードする方法のステップに従って、Amazon S3 にファイルをアップロードします。
-
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 サーバーに接続する
connectToServerWithBackoffRetriesconnectToServerWithBackoffRetries 関数は、設定された試行回数に達してもサーバーへの TCP 接続を確立できない場合に、失敗ステータスを返します。
prvConnectToServer 関数は、サーバー認証のみを使用して Amazon S3 HTTP サーバーへの接続を確立する方法を示します。この関数は、FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c ファイルで実装されている mbedTLS ベースのインターフェイスを使用します。prvConnectToServer の定義は、GitHub
データをアップロードする
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