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

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

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

重要

これは、FreeRTOS リリース 202210.00 で使用する「FreeRTOS ユーザーガイド」のアーカイブ版です。このドキュメントの最新バージョンについては、FreeRTOS ユーザーガイドを参照してください。

序章

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

注記

FreeRTOS デモをセットアップして実行するには、FreeRTOS の開始方法 の手順に従います。

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

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への接続を設定します。

にサインアップする AWS アカウント

がない場合は AWS アカウント、次の手順を実行して作成します。

にサインアップするには AWS アカウント
  1. https://portal.aws.amazon.com/billing/signup を開きます。

  2. オンラインの手順に従います。

    サインアップ手順の一部では、電話またはテキストメッセージを受信し、電話のキーパッドに検証コードを入力します。

    にサインアップすると AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティベストプラクティスとして、ユーザーに管理アクセス権を割り当て、ルートユーザーアクセスが必要なタスクの実行にはルートユーザーのみを使用するようにしてください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/[マイアカウント] をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

管理アクセスを持つユーザーを作成する

にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 を保護し AWS IAM Identity Center、 を有効にして管理ユーザーを作成します。

を保護する AWS アカウントのルートユーザー
  1. ルートユーザーを選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者AWS Management Consoleとして にサインインします。次のページでパスワードを入力します。

    ルートユーザーを使用してサインインする方法については、AWS サインイン ユーザーガイドルートユーザーとしてサインインするを参照してください。

  2. ルートユーザーの多要素認証 (MFA) を有効にします。

    手順については、IAM ユーザーガイドの AWS アカウント 「ルートユーザー (コンソール) の仮想 MFA デバイスを有効にする」を参照してください。

管理アクセスを持つユーザーを作成する
  1. IAM アイデンティティセンターを有効にします。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Centerの有効化」を参照してください。

  2. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

    を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、AWS IAM Identity Center 「 ユーザーガイド」の「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ」を参照してください。

管理アクセス権を持つユーザーとしてサインインする
  • IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

    IAM Identity Center ユーザーを使用してサインインする方法については、AWS サインイン 「 ユーザーガイド」の AWS 「 アクセスポータルにサインインする」を参照してください。

追加のユーザーにアクセス権を割り当てる
  1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「権限設定を作成するを参照してください

  2. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「グループの結合」を参照してください。

アクセス権限を付与するにはユーザー、グループ、またはロールにアクセス許可を追加します。

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

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

  3. 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 サーバーに接続する

connectToServerWithBackoffRetries 関数は HTTP サーバーへの TCP 接続を試みます。接続が失敗すると、タイムアウト後に接続を再試行します。タイムアウト値は、最大試行回数に達するか、最大タイムアウト値に達するまで、指数関数的に増加します。connectToServerWithBackoffRetries 関数は、設定された試行回数に達してもサーバーへの 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 ウェブサイトに記載されています。