S3 서버에 대용량 파일 업로드(feat, AWS CLI) - 내용 추가

2022. 8. 13. 21:32·개발일기/DB, SQL
728x90
반응형

 

개발자 관련 글도 올려봐야지 하고.... 미루고 미루다 올리는 첫 게시글!!

이번에 오라클 디비를 백업하면서 aws s3에 1.6테라 파일을 올리고 싶었다.

aws cli를 이용하면 대용량 파일을 멀티 파트로 업로드해 준다는 글을 보고 열심히 cli 설치하고... 계정 연결하고.... 업로드를 했는디.....!

우리 쪽 서버가 문제인 건지 뭐가 문제인 건지 잘 모르겠지만 계속 RequestTimeout이 발생했다..... 해당 오류를 검색해 보면 몇 년 전부터 꾸준히 발생하고 있는 오류인 거 같은데... 아직도 해결이 안 된듯하다.

멀티 파트 업로드 진행 목록을 보면 올라와 있긴 하던데.... 쨌든 안됨....

 

그래서 다른 방안을 검색해 보면 REST API나 aws SDK를 이용한 방법이 있다고 하는데 글을 읽어봐도 무슨 소린지 잘 모르겠다..... 흑....

그러던 중 발견한 aws s3api 명령! 하위 수준의 명령어라고 하는 데 왜 하위 수준일까??

 

처음에 cli를 이용하여 시도했던 명령어(RequestTimeout이 발생한)는

aws s3 cp [localfilepath] s3://[bucketname]/[filename]
or
upload:[localfilepath] to s3://[bucketname]/[filename]
 

해당 명령어였고

//public 읽기 권한 부여
aws s3 cp [localfilepath] s3://[bucketname]/[filename] --acl public-read

//파일 다운로드
aws s3 cp s3://[bucketname]/[filename] [localfilepath]

//파일 삭제
aws s3 rm s3://[bucketname]/[filename]
 

추가로 이런 명령어들도 있었다.

 


다시 돌아와서 처음부터....

파일이 5GB보다 작을 경우

 

1. aws cli 설치 되어있는지 확인

  1. aws --version
  2. 설치가 되어 있지 않다면 
    더보기
    닫기
    https://mingzz1.github.io/pentesting/cloud/2020/03/07/aws_cli.html/
        

2. 현재 계정에 생성된 bucket 목록 확인

 

aws s3 ls

 

 

3. 현재 계정의 bucket 내 파일 목록 확인

aws s3 ls s3://[bucketname]

 

 

4. 파일 업로드

aws s3 cp [localfilepath] s3://[bucketname]/[filename]
or
upload:[localfilepath] to s3://[bucketname]/[filename]

//public 읽기 권한 부여
aws s3 cp [localfilepath] s3://[bucketname]/[filename] --acl public-read

 

 

5. 파일 다운로드

aws s3 cp s3://[bucketname]/[filename] [localfilepath]

 

 

6. 파일 삭제

aws s3 rm s3://[bucketname]/[filename]

 

 


 

 

파일이 5GB를 초과한다면 멀티파트 업로드를 진행해야함!

 

https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-multipart-upload-cli/

위의 문서를 차근차근 따라 해보았다.

 

1. 우선 리눅스 서버에서 파일을 일정한 크기로 잘라줬다.

split -d -b 5G -a 3 220714_test.dump
 

-d : 분할 파일 이름을 숫자로 표시

-b : 파일 크기로 분할 → 5G

-a : 파일 이름 숫자 표기 자릿수

⇒ x000

x001 이런 식으로 파일이 분할됨

 

2. 멀티 파트 업로드 시작

#bucket, key 수정
aws s3api create-multipart-upload --bucket [awsexamplebucket] --key [large_test_file]
 

여기에서 사용되는 key 값이 나중에 업로드 완료했을 때 파일명이 된다....

위의 명령어를 실행하면

{
    "AbortDate": "Mon, 03 Jun 2019 00:00:00 GMT",
    "AbortRuleId": "multipartcleanup",
    "Bucket": "awsexamplebucket",
    "Key": "large_test_file",
    "UploadId": "exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk"
}
 

이런 출력을 뱉는다. 이 값들 중 UploadId를 아래에서 사용.

 

3. 자른 파일 업로드

#bucket, key, part-number, body, uploadid 수정
aws s3api upload-part --bucket [awsexamplebucket] --key [large_test_file] --part-number [number] --body [filename] --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk
 

올릴 파일이 꽤 많았기 때문에 shell을 하나 작성했다.

#!/bin/bash

for a in $(seq -f %03g 0 10);
do
	partnumber=$(expr $a + 1)
	#여기 띄어쓰기 주의...
	#partnumber = $(expr $a + 1)
	# = 앞뒤에 띄어쓰기 넣으니까 실행 안되더라.....
	
	#partnumber=`expr $a + 1`
	#이것도 가능 ' 아님 주의

	#bucket, key, part-number, body, uploadid 수정
	aws s3api upload-part --bucket [awsexamplebucket] --key [large_test_file] --part-number $partnumber --body x$a --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk
done
 

자른 파일을 업로드 완료할 때마다

{
    "ETag": "\"428654a396830420046e715140c24002\""
}
 

ETag라는 값을 뱉어준다

 

 

4. 업로드 완료된 목록을 파일로 받기

aws s3api list-parts --bucket [awsexamplebucket] --key [large_test_file] --upload-id [exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk] > aws.log
 

5. 위에서 받은 파일을 아래의 형식으로 편집해서 json 파일로 저장

{
    "Parts": [{
        "ETag": "example8be9a0268ebfb8b115d4c1fd3",
        "PartNumber":1
    },

    ....

    {
        "ETag": "example246e31ab807da6f62802c1ae8",
        "PartNumber":4
    }]
}
 

모든 파일이 업로드 되면

 

6. 위의 파일을 이용해서 멀티 파트 업로드 종료 명령을 날려야 한다.

aws s3api complete-multipart-upload --multipart-upload file://filepart.json --bucket [awsexamplebucket] --key [large_test_file] --upload-id [exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk] 
 

위의 명령이 완료되면

{
    "Location": "https://awsexamplebucket.s3.ap-northeast-2.amazonaws.com/large_test_file",
    "Bucket": "awsexamplebucket",
    "Key": "large_test_file",
    "ETag": "\"429a7f226c5e08a38a6c9c22346607a9-337\""
}
 

이렇게 결과를 보여준다.

 

 

완료되지 않은 멀티 파트 삭제

 

  • 우선 진행 중인 멀티 파트 목록 가져오기
aws s3api list-multipart-uploads --bucket [awsexamplebucket]
 
  • 삭제
aws s3api abort-multipart-upload --bucket [awsexamplebucket] --key [large_test_file] --upload-id [exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk]
 
 

 

  • 참고
    • https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-multipart-cleanup-lifecycle-rule/
  • 멀티 파트 다운로드 관련 글
  • https://aws.amazon.com/ko/blogs/korea/amazon-s3-multi-part-dowload/

 

 

 

#aws #s3 #s3업로드 #대용량파일 #대용량업로드 #s3대용량업로드 #s3대용량파일업로드 #aws업로드 #awscli

#개발자 #리눅스

 

728x90
반응형

'개발일기 > DB, SQL' 카테고리의 다른 글

SQL - DML  (0) 2024.04.08
SQL - JOIN  (0) 2024.04.08
SQL - SELECT  (0) 2024.04.08
SQL - DDL  (0) 2024.04.08
오라클 데이터베이스 백업하기(feat, expdp / impdp)  (0) 2022.08.13
'개발일기/DB, SQL' 카테고리의 다른 글
  • SQL - JOIN
  • SQL - SELECT
  • SQL - DDL
  • 오라클 데이터베이스 백업하기(feat, expdp / impdp)
길동이이이잉
길동이이이잉
길동이이이잉
코딩 일기
길동이이이잉
코딩 일기일까......?
삽질...... 일기일까?
반응형
250x250
  • 모든 글 (97)
    • 개발일기 (9)
      • Project (9)
      • React (1)
      • DB, SQL (7)
      • Spring (5)
      • AWS (1)
    • 코딩 테스트 (63)
      • 1. String(문자열) (12)
      • 2. Array(1, 2차원 배열) (12)
      • 3. Tow pointers, Sliding wi.. (6)
      • 4. HashMap, HashSet, TreeSe.. (5)
      • 5. Stack, Queue (8)
      • 6. Sorting and Searching (8)
      • 7. Recursive, Tree, Graph (11)
      • 8. DFS, BFS 활용 (0)
      • 9. ... (1)
    • 갔다왔다 워홀! (2)

인기 글

태그

Strategic Design
아일랜드워홀
s3대용량파일업로드
전략적 설계
전술적 설계
달력프로젝트
아일랜드
SpringBoot
워홀
유럽
s3대용량업로드
워킹홀리데이
aws업로드
유럽워홀
Oracle
AWS
React
reactnative
spring
Tactical Design

최근 글

hELLO· Designed By정상우.v4.5.3
길동이이이잉
S3 서버에 대용량 파일 업로드(feat, AWS CLI) - 내용 추가

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.