本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
coreHTTP 基本 Amazon S3 上傳示範
重要
這是 FreeRTOS 使用者指南的封存版本,可與 FreeRTOS 版本 202210.00 搭配使用。如需本文件的最新版本,請參閱 FreeRTOS 使用者指南。
簡介
此範例示範如何將 PUT 請求傳送至 Amazon Simple Storage Service (Amazon S3) HTTP 伺服器並上傳小型檔案。它也會執行 GET 請求,以在上傳後驗證檔案大小。此範例使用使用 mbedTLS 的網路傳輸界面
注意
若要設定和執行 FreeRTOS 示範,請遵循中的步驟FreeRTOS 入門。
單一執行緒與多執行緒
有兩種 coreHTTP 使用模式:單一執行緒和多執行緒 (多工)。雖然本節中的示範會在執行緒中執行 HTTP 程式庫,但實際上示範如何在單一執行緒環境中使用 coreHTTP。此示範中只有一個任務使用 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 帳戶
請遵循線上指示進行。
註冊程序的一部分包括接聽電話或文字訊息,並在電話鍵盤上輸入驗證碼。
當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務。
AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 https://aws.amazon.com/
建立具有管理存取權的使用者
註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立 管理使用者,以免將根使用者用於日常任務。
保護您的 AWS 帳戶根使用者
-
選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console
身分登入 。在下一頁中,輸入您的密碼。 如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入。
-
若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。
如需說明,請參閱《IAM 使用者指南》中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬 MFA 裝置。
建立具有管理存取權的使用者
-
啟用 IAM Identity Center。
如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的啟用 AWS IAM Identity Center。
-
在 IAM Identity Center 中,將管理存取權授予使用者。
如需使用 IAM Identity Center 目錄 做為身分來源的教學課程,請參閱AWS IAM Identity Center 《 使用者指南》中的使用預設值設定使用者存取 IAM Identity Center 目錄。
以具有管理存取權的使用者身分登入
-
若要使用您的 IAM Identity Center 使用者簽署,請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。
如需使用 IAM Identity Center 使用者登入的說明,請參閱AWS 登入 《 使用者指南》中的登入 AWS 存取入口網站。
指派存取權給其他使用者
若要提供存取權,請新增權限至您的使用者、群組或角色:
-
中的使用者和群組 AWS IAM Identity Center:
建立權限合集。請按照 AWS IAM Identity Center 使用者指南 中的 建立權限合集 說明進行操作。
-
透過身分提供者在 IAM 中管理的使用者:
建立聯合身分的角色。遵循「IAM 使用者指南」的為第三方身分提供者 (聯合) 建立角色中的指示。
-
IAM 使用者:
-
建立您的使用者可擔任的角色。請按照「IAM 使用者指南」的為 IAM 使用者建立角色中的指示。
-
(不建議) 將政策直接附加至使用者,或將使用者新增至使用者群組。請遵循 IAM 使用者指南的新增許可到使用者 (主控台) 中的指示。
-
-
遵循《Amazon S3 Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體?中的步驟,在 Amazon S3 中建立儲存貯體。
-
遵循如何將檔案和資料夾上傳至 Amazon S3 儲存貯體中的步驟,將檔案上傳至 Amazon 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
檔案。
功能
示範會先使用 TLS 伺服器身分驗證連線至 Amazon S3 HTTP 伺服器。然後,它會建立 HTTP 請求來上傳 中指定的資料democonfigDEMO_HTTP_UPLOAD_DATA
。上傳檔案之後,它會請求 檔案大小,以檢查檔案是否已成功上傳。您可以在 GitHub
連線至 Amazon S3 HTTP 伺服器
connectToServerWithBackoffRetriesconnectToServerWithBackoffRetries
則函數會傳回失敗狀態。
prvConnectToServer
函數示範如何僅使用伺服器身分驗證建立與 Amazon S3 HTTP 伺服器的連線。它使用 FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c
檔案中實作的 mbedTLS 型傳輸界面。您可以在 GitHubprvConnectToServer
找到 的定義。
上傳資料
prvUploadS3ObjectFile
函數示範如何建立 PUT 請求並指定要上傳的檔案。上傳檔案的 Amazon S3 儲存貯體和要上傳的檔案名稱會在預先簽章的 URL 中指定。為了節省記憶體,請求標頭和 都會使用相同的緩衝區來接收回應。使用 HTTPClient_Send
API 函數同步接收回應。回應200 OK
狀態碼預期來自 Amazon S3 HTTP 伺服器。任何其他狀態碼都是錯誤。
您可以在 GitHubprvUploadS3ObjectFile()
找到 的原始碼。
驗證上傳
prvVerifyS3ObjectFileSize
函數會呼叫 prvGetS3ObjectFileSize
來擷取 S3 儲存貯體中物件的大小。Amazon S3 HTTP 伺服器目前不支援使用預先簽章 URL 的 HEAD 請求,因此請求第 0 個位元組。檔案的大小包含在回應的Content-Range
標頭欄位中。預期來自伺服器的206 Partial Content
回應。任何其他回應狀態碼都是錯誤。
您可以在 GitHubprvGetS3ObjectFileSize()
找到 的原始碼。