翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
coreHTTP 基本 S3 ダウンロードのデモ
重要
これは、FreeRTOS リリース 202210.00 で使用する「FreeRTOS ユーザーガイド」のアーカイブ版です。このドキュメントの最新バージョンについては、FreeRTOS ユーザーガイドを参照してください。
序章
このデモでは、範囲リクエストHTTPClient_AddRangeHeader
を使用して HTTP リクエストを作成するときに coreHTTP API でネイティブにサポートされます。マイクロコントローラ環境では、範囲リクエストを使用することを強くお勧めします。単一のリクエストはなく、個別の複数の範囲リクエストで大きなファイルをダウンロードすることで、ネットワークソケットをブロックすることなくファイルの各セクションを処理できます。範囲リクエストを使用すると、パケットがドロップされて TCP 接続での再送が必要になるリスクが低くなるため、デバイスの消費電力が改善されます。
この例で使用するネットワークトランスポートインターフェイス
注記
FreeRTOS デモをセットアップして実行するには、FreeRTOS の開始方法 の手順に従います。
シングルスレッドとマルチスレッド
coreHTTP には、シングルスレッドとマルチスレッド (マルチタスク) の 2 つの使用モデルがあります。このデモは、このセクションでは 1 つのスレッドで HTTP ライブラリを実行しますが、実際にはシングルスレッド環境で coreHTTP を使用する方法を示しています (このデモでは、1 つのタスクのみが HTTP API を使用します)。シングルスレッドアプリケーションは HTTP ライブラリを繰り返し呼び出す必要がありますが、マルチスレッドアプリケーションは、代わりにエージェント (またはデーモン) タスク内でバックグラウンドで HTTP リクエストを送信できます。
ソースコードの編成
デモプロジェクトの名前は http_demo_s3_download.c
です。このプロジェクトは、
ディレクトリと GitHubfreertos
/demos/coreHTTP/
Amazon S3 HTTP サーバー接続の設定
このデモでは、署名付き URL を使用して Amazon S3 HTTP サーバーに接続し、ダウンロードするオブジェクトへのアクセスを許可します。Amazon S3 HTTP サーバーの TLS 接続では、サーバー認証のみが使用されます。アプリケーションレベルでは、オブジェクトへのアクセスは、署名付き URL クエリのパラメータを使用して認証されます。以下のステップに従って、 AWSへの接続を設定します。
にサインアップする AWS アカウント
がない場合は AWS アカウント、次の手順を実行して作成します。
にサインアップするには AWS アカウント
オンラインの手順に従います。
サインアップ手順の一部では、電話またはテキストメッセージを受信し、電話のキーパッドに検証コードを入力します。
にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティベストプラクティスとして、ユーザーに管理アクセス権を割り当て、ルートユーザーアクセスが必要なタスクの実行にはルートユーザーのみを使用するようにしてください。
AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/
管理アクセスを持つユーザーを作成する
にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 を保護し AWS IAM Identity Center、 を有効にして管理ユーザーを作成します。
を保護する AWS アカウントのルートユーザー
-
ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Console
として にサインインします。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドのルートユーザーとしてサインインするを参照してください。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、IAM ユーザーガイドの AWS アカウント 「ルートユーザー (コンソール) の仮想 MFA デバイスを有効にする」を参照してください。
管理アクセスを持つユーザーを作成する
-
IAM アイデンティティセンターを有効にします。
手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。
-
IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。
を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、AWS IAM Identity Center 「 ユーザーガイド」の「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。
管理アクセス権を持つユーザーとしてサインインする
-
IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。
IAM Identity Center ユーザーを使用してサインインする方法については、AWS サインイン 「 ユーザーガイド」の AWS 「 アクセスポータルにサインインする」を参照してください。
追加のユーザーにアクセス権を割り当てる
アクセス権限を付与するにはユーザー、グループ、またはロールにアクセス許可を追加します。
-
以下のユーザーとグループ AWS IAM Identity Center:
アクセス許可セットを作成します。「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成する」の手順に従ってください。
-
IAM 内で、ID プロバイダーによって管理されているユーザー:
ID フェデレーションのロールを作成します。詳細については「IAM ユーザーガイド」の「サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する」を参照してください。
-
IAM ユーザー:
-
ユーザーが担当できるロールを作成します。手順については「IAM ユーザーガイド」の「IAM ユーザーのロールの作成」を参照してください。
-
(お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。詳細については「IAM ユーザーガイド」の「ユーザー (コンソール) へのアクセス権限の追加」を参照してください。
-
-
Amazon Simple Storage Service Console ユーザーガイドの S3 バケットを作成する方法に従って、S3 にバケットを作成します。
-
S3 バケットにファイルとフォルダをアップロードする方法のステップに従って、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
」を参照してください。
機能
このデモは、まずファイルのサイズを取得します。次に、各バイト範囲をループ内で順番にリクエストします。範囲サイズは democonfigRANGE_REQUEST_LENGTH
で指定します。
デモのソースコードは GitHub
Amazon S3 HTTP サーバーに接続する
connectToServerWithBackoffRetries()connectToServerWithBackoffRetries()
は、設定された試行回数に達してもサーバーへの TCP 接続を確立できない場合に、失敗ステータスを返します。
prvConnectToServer()
関数は、サーバー認証のみを使用して Amazon S3 HTTP サーバーへの接続を確立する方法を示します。この関数は、FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c
prvConnectToServer()
のソースコードは、GitHub
範囲リクエストを作成する
HTTPClient_AddRangeHeader()
API 関数は、バイト範囲を HTTP リクエストヘッダーにシリアル化して、範囲リクエストを形成することをサポートします。このデモでは、範囲リクエストを使用して、ファイルサイズを取得し、ファイルの各セクションをリクエストします。
prvGetS3ObjectFileSize()
関数は、S3 バケットのファイルのサイズを取得します。Amazon S3 へのこの最初のリクエストには、レスポンスの送信後も接続を開いたままにするために Connection: keep-alive
ヘッダーが追加されます。S3 HTTP サーバーは、現在署名付き URL を使用した HEAD リクエストをサポートしていないため、0 番目のバイトがリクエストされます。ファイルのサイズは、レスポンスの Content-Range
ヘッダーフィールドに含まれています。206 Partial Content
レスポンスがサーバーから返されることが想定されます。受信するその他のレスポンスステータスコードはエラーです。
prvGetS3ObjectFileSize()
のソースコードは、GitHub
このデモは、ファイルサイズを取得した後、ダウンロードするファイルのバイト範囲ごとに新しい範囲リクエストを作成します。ファイルの各セクションについて HTTPClient_AddRangeHeader()
を使用します。
範囲リクエストの送信とレスポンスの受信
prvDownloadS3ObjectFile()
関数は、ファイル全体がダウンロードされるまで、範囲リクエストをループ内で送信します。HTTPClient_Send()
API 関数は、リクエストの送信とレスポンスの受信を同期的に行います。関数からのレスポンスは xResponse
で受信されます。その後、ステータスコードが 206 Partial Content
であることが検証され、これまでにダウンロードされたバイト数の増加が Content-Length
ヘッダー値で表されます。
prvDownloadS3ObjectFile()
のソースコードは、GitHub