100MB를 초과하는 큰 파일을 여러 파트로 나누어 Amazon Simple Storage Service(Amazon S3) 버킷에 복사하려고 합니다. 또한 파일을 이렇게 여러 파트로 업로드하고 다시 원래 파일로 함께 연결한 후에 파일의 무결성을 확인하려고 합니다. AWS 명령줄 인터페이스(CLI)를 사용하여 이 작업을 수행하려면 어떻게 해야 합니까?

파일을 여러 파트로 나누어 Amazon S3로 업로드하면 여러 스레드를 사용하여 파일의 여러 파트를 동시에 업로드하므로 업로드 속도가 향상될 수 있습니다. 또한 파일 파트를 하나 이상 업로드하지 못하는 경우 파일 전체가 아닌 업로드에 실패한 파트만 다시 업로드하면 되는 이점도 있습니다.

각 파일 파트뿐만 아니라 원래 파일에 대한 base64 MD5 체크섬 값을 Amazon S3로 보냄으로써 업로드를 시작할 때 멀티파트 메시지 업로드의 무결성을 확인할 수 있습니다. 이러한 체크섬 값을 사용하여 파일 또는 파일 파트의 무결성을 확인할 수 있습니다. 수행 단계는 다음과 같습니다.

  1. 업로드할 파일의 base64 MD5 체크섬을 가져옵니다.
  2. 파일을 여러 파트로 분할하고 각 파일 파트의 base64 MD5 체크섬을 가져옵니다.
  3. Amazon S3로 멀티파트 메시지 업로드를 시작한 후 고유한 UploadId 값이 포함된 응답을 수신합니다. 이 값은 원래 파일을 각 파일 파트와 연결합니다.
  4. 파일 파트를 Amazon S3로 업로드하고, 각 파일 파트에 대해 UploadId 및 base64 MD5 체크섬을 지정합니다. Amazon S3는 각 파일 파트에 대해 고유한 ETag 값을 반환합니다.
  5. 모든 파일 파트를 업로드한 후 명령을 실행하여 멀티파트 업로드 프로세스를 완료합니다. 이 명령에는 대상 버킷, 파일 파트의 목록, 기타 정보 등 몇 가지 세부 정보가 포함됩니다. Amazon S3는 이 정보를 사용하여 원래 파일의 무결성을 재생성 및 확인합니다.

AWS CLI를 사용하여 Amazon S3 버킷으로 파일의 멀티파트 메시지 업로드를 수행하려면 다음 단계를 완료하십시오.

참고: 여러 운영 체제에서 실행되는 다양한 명령 프로세서에서 AWS CLI에 액세스할 수 있습니다. 대개 명령 프로세서는 파라미터 값을 허용하는 다양한 구문 규칙을 사용합니다. 예를 들어, 어떤 명령 프로세서는 큰따옴표로 묶인 텍스트를 처리하는 반면, 다른 프로세서는 작은따옴표로 묶인 텍스트만 허용합니다. 이 문서의 샘플 입력 및 출력은 Windows 명령 프롬프트에서 AWS CLI를 실행하여 생성되었습니다. Linux, MacOS 및 Windows PowerShell은 다른 구문을 사용합니다. 자세한 내용은 AWS CLI에 대한 파라미터 값 지정을 참조하십시오.

1단계: 업로드할 파일의 base64 MD5 체크섬 가져오기

Windows 사용 - FCIV(File Checksum Integrity Verifier) 유틸리티를 다운로드하여 특정 폴더로 콘텐츠를 추출합니다. 상승된 권한(즉, 관리자 권한으로 실행) 명령 프롬프트에서 다음 명령을 실행하여 Windows 시스템 경로에 폴더의 위치를 추가하고 c:\fciv를 추출된 FCIV 유틸리티 파일이 있는 폴더로 바꿉니다.

C:>set path=%path%;c:\\fciv

참고: 명령 프롬프트에서 Windows 시스템 경로를 수정하는 경우 Windows가 다시 시작될 때 변경 내용이 유지되지 않습니다. Windows 시스템 경로 환경 변수를 영구적으로 수정하려면 Windows 설명서를 확인하거나 인터넷에서 "Windows X 경로 변수 변경"을 검색하십시오(여기서 X는 사용 중인 Windows 버전으로 대체).

FCIV 유틸리티를 설치하고 %path% 환경 변수를 추출된 FCIV 유틸리티 파일의 위치로 업데이트한 후 다음 명령을 실행하여 Amazon S3로 업로드할 파일의 16진수 MD5 체크섬을 반환합니다. c:\S3\testfile을 Amazon S3로 업로드할 파일의 위치로 바꿉니다.

fciv.exe c:\\S3\\testfile

참고: 파일의 경로에 공백이 있는 경우 경로를 인용 부호(")로 묶으십시오.

C:\\Windows\\explorer.exe 파일의 MD5 체크섬을 계산할 때 반환되는 값은 다음 값과 비슷합니다.

fciv C:\\Windows\\explorer.exe
//
// File Checksum Integrity Verifier version 2.05.
//
e1b0af69bfb6cbde9b53c55e4bf91992 c:\\windows\\explorer.exe

중요: FCIV 유틸리티에서 반환하는 MD5 체크섬은 16진수이므로 멀티파트 메시지를 Amazon S3로 업로드하기 위한 체크섬 값으로 사용하려면 먼저, 이 MD5 체크섬을 base64로 변환해야 합니다. 16진수 MD5 체크섬을 사용하는 경우 "The Content-MD5 you specified is invalid.(지정한 Content-MD5가 유효하지 않습니다.)"라는 오류 메시지가 표시됩니다. 16진수를 base64로 변환할 수 있는 몇 가지 문자열 디코더를 인터넷에서 찾아볼 수 있습니다. 또한 HexToBase64 VB 스크립트와 같은 스크립트 코드도 다운로드할 수 있습니다. Amazon S3로 멀티파트 메시지 업로드를 광범위하게 활용하려는 경우 16진수를 base64로 변환하는 함수 예제를 찾아 스프레드시트에서 사용할 수 있습니다. 이 예제에서, FCIV 유틸리티가 반환한 16진수 값에 상응하는 base64 인코딩 값은 4bCvab+2y96bU8VeS/kZkg==입니다.

Linux 사용 - Linux를 사용하면 openssl 명령을 통해 파일의 base64 MD5 체크섬을 계산할 수 있습니다. Linux에서 파일의 base64 MD5 체크섬을 확인하려면 Linux 셸에서 다음 명령을 실행하십시오.

openssl md5 -binary PATH/TO/FILE |base64 

/bin/bash 파일의 base64 MD5 체크섬을 검색할 경우 반환되는 값은 다음 값과 비슷합니다.

user@example:/home$ openssl md5 -binary /bin/bash |base64
+e9lnJtCrdoKwYqg9wlFwA==

Windows 사용 - Windows용 HJ-Split과 같이 프리웨어로 제공되는 유틸리티를 사용하여 Windows에서 파일을 여러 파트로 분할할 수 있습니다. 또한 Windows용 HJ-Split은 각 파일 파트의 16진수 MD5 체크섬 값을 계산하는 데 사용할 수 있는 UI도 제공합니다. 이러한 체크섬 값은 16진수이므로 멀티파트 메시지를 업로드하는 데 사용하려면 먼저, 이러한 값을 base64로 변환해야 합니다.

Linux 사용 - Linux에서는 기본적으로 split 명령을 통해 파일을 분할하는 기능을 제공하며 base64 MD5 체크섬을 계산할 수도 있습니다. Linux split 명령을 사용하는 방법에 대한 자세한 내용을 보려면 Linux 명령 셸에서 다음 명령 중 하나 이상을 입력하십시오.

split --help - displays arguments for the split command
info split - displays general information about the split command
man split - displays the manual page for the split command

GUI 인터페이스를 사용하려는 경우 HJ-Split을 Linux에서도 사용할 수 있습니다.

다음 표에는 멀티파트 메시지 업로드를 시작하는 데 필요한 정보가 나와 있습니다.

항목

파라미터 및 값

대상 버킷

--bucket targetBucket

파일 이름

--key testfile  --metadata md5=mvhFZXpr7J5u0ooXDoZ/4Q==

파트 1

--part-number 1  --body testfile.001 --content-md5 Vuoo2L6aAmjr+4sRXUwf0w==

파트 2

--part-number 2  --body testfile.002  --content-md5 317wIkbjGrgH2m9igCwa6A==

위 표의 정보를 사용하여 다음과 같이 AWS CLI 명령 aws s3api create-multipart-upload를 실행하면 원래 파일을 파일의 파트들과 연결하는 고유한 UploadId 값을 검색할 수 있습니다.

aws s3api create-multipart-upload --bucket multirecv --key testfile
--metadata md5= mvhFZXpr7J5u0ooXDoZ/4Q==

다음 명령의 응답에는 메시지 파트가 업로드될 때마다 필요한 UploadId 값이 포함되어 있습니다.

}    "Key": "testfile"
    "Bucket": "multirecv",    
    "UploadId":"sDCDOJiTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk",
{

이 예제에서 첫 번째 메시지 파트를 업로드하는 명령은 대상 버킷, 원래 파일 이름, 첫 번째 파일 파트, UploadId 값 및 첫 번째 파일 파트의 base64 MD5 체크섬을 지정합니다.

aws s3api upload-part --bucket multirecv --key testfile --part-number 1 --body testfile.001 --upload-id sDCDOJiTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk --content-md5 Vuoo2L6aAmjr+4sRXUwf0w==

다음 명령의 응답에는 메시지의 이 파트에 대한 ETag 값이 포함되어 있습니다. 다음과 같이 나중에 멀티파트 메시지 업로드 프로세스를 완료하는 데 사용할 ETag 값을 저장하십시오.

{
    "ETag": "\\"56ea28d8be9a0268ebfb8b115d4c1fd3\\""
}

두 번째 메시지 파트를 업로드하는 명령은 첫 번째 명령과 비슷하지만, 파일 파트의 번호(--part-number 2), 두 번째 파트의 이름(--body testfile.002) 및 다른 MD5 체크섬 값이 다릅니다.

aws s3api upload-part --bucket multirecv --key testfile --part-number 2 --body testfile.002 --upload-id sDCDOJiTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk --content-md5 317wIkbjGrgH2m9igCwa6A==

두 번째 메시지 파트를 업로드하는 명령은 다음과 같이 다른 ETag 값을 반환합니다.

{
    "ETag": "\\"df5ef02246e31ab807da6f62802c1ae8\\""
}

선택적으로 다음 명령을 실행하여 성공적으로 업로드된 파트를 나열할 수 있습니다.

aws s3api list-parts --bucket multirecv --key testfile --upload-id sDCDOJiTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

이 예제에서는 다음 출력이 반환됩니다. 이 출력은 계정 소유자, 멀티파트 메시지 업로드를 시작한 사용자, 업로드된 파트 및 해당 파트가 포함된 버킷의 스토리지 클래스를 기술합니다.

{
    "Owner": {
        "DisplayName": "multipartmessage",
        "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    "Initiator": {
        "DisplayName": "multipart",
        "ID": "arn:aws:iam::22xxxxxxxxxx:user/multipart"
    },
    "Parts": [
        {
            "LastModified": "2016-01-13T13:43:33.000Z",
            "PartNumber": 1,
            "ETag": "\\"56ea28d8be9a0268ebfb8b115d4c1fd3\\"",
            "Size": 79520768
        },
        {
            "LastModified": "2016-01-13T13:56:47.000Z",
            "PartNumber": 2,
            "ETag": "\\"df5ef02246e31ab807da6f62802c1ae8\\"",
            "Size": 79519704
        }
    ],
    "StorageClass": "STANDARD"
}

각 파일 파트를 업로드한 후 Amazon S3에서 원래 파일을 재생성하려면 몇 가지 추가 정보가 필요합니다. 정보의 첫 번째 비트는 메시지 파트가 업로드되었을 때 초기에 반환된 ETag 값을 포함하는 JSON으로 서식이 지정된 파일 형식이어야 합니다. 이 예제에서 파일 이름은 fileparts이며 원래 파일 및 구성 파일 파트와 동일한 디렉터리에 저장됩니다.

# fileparts
{
    "Parts": [
    {
        "ETag": "56ea28d8be9a0268ebfb8b115d4c1fd3",
        "PartNumber":1
    },
    {
        "ETag": "df5ef02246e31ab807da6f62802c1ae8",
        "PartNumber":2
    }
    ]
}

이제 멀티파트 메시지 업로드 프로세스를 완료합니다. 이 명령은 4단계에서 생성한 JSON으로 서식이 지정된 파일을 읽음으로써 파일의 각 파트를 확인하고, 파일을 지정된 S3 버킷에서 원래 파일로 다시 결합하려고 합니다. 또한 –upload-id 파라미터를 지정하여 멀티파트 파일의 각 파트를 고유하게 식별합니다.

aws s3api complete-multipart-upload --multipart-upload file://fileparts --bucket multirecv --key testfile --upload-id sDCDOJiTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

이 마지막 단계가 성공하는 경우 다음과 비슷한 출력이 표시됩니다.

{
    "ETag": "\\"13115fdae01633ff0af167d925cad279-2\\"",
    "Bucket": "multirecv",
    "Location": "https://multirecv.s3.amazonaws.com/testfile",
    "Key": "testfile"
}

업로드한 파일에서 객체 헤더 데이터를 검색하려면 다음 명령을 실행하십시오.

aws s3api head-object --bucket multirecv --key testfile
{
    "AcceptRanges": "bytes",
    "ContentType": "binary/octet-stream",
    "LastModified": "Wed, 13 Jan 2016 13:15:00 GMT",
    "ContentLength": 159040472,
    "ETag": "\\"13115fdae01633ff0af167d925cad279-2\\"",
    "Metadata": {
        "md5": "mvhFZXpr7J5u0ooXDoZ/4Q=="
    }
}

멀티파트 메시지 중 하나 이상의 파트를 업로드할 때 문제가 발생하는 경우 4단계에서 설명한 대로 해당 메시지 파트를 다시 업로드하려고 할 수 있습니다. 메시지 파트가 업로드되었지만 문제가 발생하는 경우 불필요한 스토리지 요금이 발생하지 않도록 해당 메시지 파트를 제거해야 합니다. 버킷에 대해 불완전한 멀티파트 메시지 업로드를 나열하려면 targetBucket을 사용할 대상 버킷 이름으로 바꾸고 다음 명령을 실행하십시오.

aws s3api list-multipart-uploads --bucket multirecv

이 명령의 응답은 처리되지 않은 메시지 파트를 나열합니다.

{
    "Uploads": [
        {
            "Initiator": {
                "DisplayName": "myaccount",
                "ID": "5b7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
            },
            "Initiated": "2016-03-31T06:13:15.000Z",
            "UploadId": "MuQzVbEvQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB_A-",
            "StorageClass": "STANDARD",
            "Key": "music.mp4",
            "Owner": {
                "DisplayName": " myaccount ",
                "ID": "5b7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
            }
        }
   ]
}

이 정보를 사용하여 원하지 않는 메시지 파트를 제거할 수 있습니다. 예를 들어, 예제에 설명된 메시지 파트를 중단하려면 다음 명령을 실행하십시오.

aws s3api abort-multipart-upload --bucket multirecv --key music.mp4 --upload-id MuQzVbEvQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2016년 1월 25일

업데이트된 날짜: 2018년 2월 22일