기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
coreHTTP 기본 S3 다운로드 데모
중요
이 문서는 FreeRTOS 릴리스 202210.00에서 사용하기 위한 FreeRTOS 사용 설명서의 보관 버전입니다. 이 문서의 최신 버전은 FreeRTOS 사용 설명서를 참조하세요.
소개
이 데모는 범위 요청HTTPClient_AddRangeHeader
를 사용하면 coreHTTP API에서 범위 요청이 기본적으로 지원됩니다. 마이크로컨트롤러 환경에서는 범위 요청을 적극 권장합니다. 큰 파일을 단일 요청 대신 별도의 범위로 다운로드하면 네트워크 소켓을 차단하지 않고 파일의 각 섹션을 처리할 수 있습니다. 범위 요청을 사용하면 TCP 연결에서 재전송이 필요한 패킷 손실의 위험이 줄어들어 디바이스의 전력 소비가 향상됩니다.
이 예제에서는 mbedTLS를 사용하는 네트워크 전송 인터페이스
참고
FreeRTOS 데모를 설정하고 실행하려면 FreeRTOS 시작하기의 단계를 따릅니다.
단일 스레드와 다중 스레드
coreHTTP 사용 모델에는 단일 스레드와 다중 스레드(멀티태스킹)의 두 가지가 있습니다. 이 섹션의 데모는 하나의 스레드에서 HTTP 라이브러리를 실행하지만 실제로는 단일 스레드 환경에서 coreHTTP를 사용하는 방법을 보여줍니다(데모에서는 하나의 태스크만 HTTP API를 사용함). 단일 스레드 애플리케이션은 HTTP 라이브러리를 반복적으로 직접 호출해야 하지만, 다중 스레드 애플리케이션은 대신 에이전트(또는 대몬(daemon)) 태스크 내에서 백그라운드로 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 IAM Identity Center, AWS 계정 루트 사용자활성화 및 생성합니다.
보안 AWS 계정 루트 사용자
-
루트 사용자를 선택하고 AWS 계정 이메일 주소를 입력하여 계정 소유자AWS Management Console
로에 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다. 루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 AWS 로그인 User Guide의 루트 사용자로 로그인을 참조하세요.
-
루트 사용자의 다중 인증(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 액세스 포털에 로그인을 참조하세요.
추가 사용자에게 액세스 권한 할당
-
IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.
지침은AWS IAM Identity Center 사용 설명서의 Create a permission set를 참조하세요.
-
사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.
지침은 AWS IAM Identity Center 사용 설명서의 Add groups를 참조하세요.
액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요:
-
의 사용자 및 그룹 AWS IAM Identity Center:
권한 세트를 생성합니다. AWS IAM Identity Center 사용 설명서의 권한 세트 생성의 지침을 따릅니다.
-
보안 인증 공급자를 통해 IAM에서 관리되는 사용자:
ID 페더레이션을 위한 역할을 생성합니다. IAM 사용 설명서의 Create a role for a third-party identity provider (federation)의 지침을 따릅니다.
-
IAM 사용자:
-
사용자가 맡을 수 있는 역할을 생성합니다. IAM 사용 설명서에서 Create a role for an IAM user의 지침을 따릅니다.
-
(권장되지 않음)정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. IAM 사용 설명서에서 사용자(콘솔)에 권한 추가의 지침을 따르세요.
-
-
Amazon Simple Storage Service 사용 설명서의 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