S3tools / S3cmd 메일링 리스트:
S3cmd에는 Python 2.6 이상이 필요합니다. Python 3+도 S3cmd 버전 2부터 지원됩니다.
설치 지침을 참조하세요.
S3cmd( s3cmd
)는 Amazon S3 및 Google Cloud Storage 또는 DreamHost DreamObjects와 같이 S3 프로토콜을 사용하는 기타 클라우드 스토리지 서비스 제공업체에서 데이터를 업로드, 검색 및 관리하기 위한 무료 명령줄 도구이자 클라이언트입니다. 명령줄 프로그램에 익숙한 고급 사용자에게 가장 적합합니다. 또한 cron 등에서 트리거되는 배치 스크립트 및 S3에 대한 자동 백업에도 이상적입니다.
S3cmd는 Python으로 작성되었습니다. GNU Public License v2(GPLv2)에 따라 사용 가능한 오픈 소스 프로젝트이며 상업용 및 개인 용도 모두 무료입니다. 스토리지 사용에 대해서만 Amazon에 비용을 지불하면 됩니다.
2008년 첫 출시 이후 S3cmd에는 많은 기능과 옵션이 추가되었습니다.... 최근에는 멀티파트 업로드, 암호화, 증분 백업, s3 동기화, ACL 및 메타데이터 관리, S3를 포함하여 60개 이상의 명령줄 옵션이 포함되었습니다. 버킷 크기, 버킷 정책 등!
Amazon S3는 누구나 원하는 양의 데이터를 저장하고 나중에 다시 검색할 수 있는 인터넷 액세스가 가능한 관리형 스토리지 서비스를 제공합니다.
S3는 Amazon에서 운영하는 유료 서비스입니다. S3에 무엇이든 저장하기 전에 "AWS" 계정(AWS = Amazon Web Services)에 가입하여 식별자 쌍(액세스 키와 비밀 키)을 얻어야 합니다. 이 키를 S3cmd에 제공해야 합니다. S3 계정의 사용자 이름과 비밀번호인 것처럼 생각하세요.
이 글을 쓰는 시점에서 S3 사용 비용은 다음과 같습니다(USD).
사용된 저장 공간의 월별 GB당 $0.023
...을 더한
GB당 $0.00 - 업로드된 모든 데이터
...을 더한
GB당 $0.000 - 처음 1GB/월 데이터 다운로드 GB당 $0.090 - 최대 10TB/월 데이터 다운로드 GB당 $0.085 - 다음 40TB/월 데이터 다운로드 GB당 $0.070 - 다음 100TB/월 데이터 다운로드 GB당 $0.050 - 데이터 다운로드 150TB 초과/월
...을 더한
PUT, COPY 또는 LIST 요청 1,000건당 $0.005 GET 및 기타 모든 요청 10,000건당 $0.004
예를 들어 1월 1일에 뉴질랜드 휴가에서 JPEG로 2GB의 사진을 업로드한 경우, 1월 말에는 한 달 동안 2GB 저장 공간 사용에 대해 $0.05, 2GB 데이터 업로드에 대해 $0.0, 요청 비용은 몇 센트입니다. 소중한 휴가 사진을 완벽하게 백업하려면 $0.06가 약간 넘는 비용이 듭니다.
2월에는 만지지 마세요. 귀하의 데이터는 여전히 S3 서버에 있으므로 해당 2GB에 대해 0.06달러를 지불하지만 전송에 대해서는 1센트도 청구되지 않습니다. 이는 지속적인 백업 비용으로 0.05달러가 됩니다. 별로 나쁘지 않습니다.
3월에는 일부 사진에 대한 익명 읽기 액세스를 허용하고 친구는 그 중 1,500MB를 다운로드합니다. 파일은 귀하의 소유이므로 발생하는 비용은 귀하의 책임입니다. 즉, 3월 말에는 저장 비용으로 0.05달러, 친구가 생성한 다운로드 트래픽에 대해 0.045달러가 청구됩니다.
최소 월간 계약이나 설치 비용은 없습니다. 당신이 사용하는 것은 당신이 지불하는 것입니다. 처음에는 청구서가 미화 0.03달러 또는 0달러 정도였습니다.
간단히 말해서 이것이 Amazon S3의 가격 모델입니다. 자세한 내용은 Amazon S3 홈페이지를 확인하세요.
이 모든 비용이 Amazon 자체에서 청구된다는 것은 말할 필요도 없이 S3cmd 사용에 대한 지불은 분명히 없습니다 :-)
S3에 저장된 파일을 "객체"라고 하며 해당 파일의 이름은 공식적으로 "키"라고 합니다. 이것은 때때로 사용자에게 혼란을 주기 때문에 우리는 종종 객체를 "파일" 또는 "원격 파일"이라고 부릅니다. 각 객체는 정확히 하나의 "버킷"에 속합니다.
S3 스토리지의 객체를 설명하기 위해 우리는 다음 형식의 URI와 유사한 스키마를 개발했습니다.
s3://BUCKET
또는
s3://BUCKET/OBJECT
버킷은 몇 가지 제한 사항이 있는 디렉터리나 폴더와 비슷합니다.
DNS 호환 버킷 이름을 사용하는 것이 좋습니다. 예를 들어 대문자를 사용해서는 안 된다는 의미입니다. DNS 규정 준수가 엄격하게 요구되는 것은 아니지만 아래 설명된 일부 기능은 DNS와 호환되지 않는 명명된 버킷에 사용할 수 없습니다. 한 단계 더 나아가 버킷에 FQDN(정규화된 도메인 이름)을 사용하는 것입니다. 이는 훨씬 더 많은 이점을 제공합니다.
버킷이라는 FQDN에 대한 자세한 내용은 이 텍스트 뒷부분에서 "가상 호스트"를 찾아보세요.
버킷과 달리 객체 이름에는 거의 제한이 없습니다. 이는 최대 1024바이트 길이의 UTF-8 문자열일 수 있습니다. 흥미롭게도 개체 이름에는 슬래시 문자(/)가 포함될 수 있으므로 my/funny/picture.jpg
가 유효한 개체 이름입니다. my
및 funny
이라는 디렉터리나 버킷이 없다는 점에 유의하세요. 이는 실제로 my/funny/picture.jpg
라는 단일 개체 이름이며 S3에서는 디렉터리 구조처럼 보이는지 전혀 신경 쓰지 않습니다.
이러한 이미지의 전체 URI는 다음과 같습니다.
s3://my-bucket/my/funny/picture.jpg
S3에 저장된 파일은 비공개 또는 공개일 수 있습니다. 비공개는 업로드한 사용자만 읽을 수 있고, 공개는 누구나 읽을 수 있습니다. 또한 s3cmd
또는 유사한 도구를 사용하는 것뿐만 아니라 HTTP 프로토콜을 사용하여 공용 파일에 액세스할 수 있습니다.
파일의 ACL(액세스 제어 목록)은 업로드 시 s3cmd put
또는 s3cmd sync
명령과 함께 --acl-public
또는 --acl-private
옵션을 사용하여 설정할 수 있습니다(아래 참조).
또는 s3cmd setacl --acl-public
(또는 --acl-private
) 명령을 사용하여 기존 원격 파일에 대한 ACL을 변경할 수 있습니다.
https://aws.amazon.com/s3으로 이동하여 오른쪽 열의 "웹 서비스 가입" 버튼을 클릭하고 등록을 진행하세요. Amazon에서 S3 사용 요금을 청구하려면 신용 카드 정보를 제공해야 합니다. 마지막에는 액세스 키와 비밀 키가 있어야 합니다.
별도의 IAM 사용자를 설정하는 경우 해당 사용자의 액세스 키에는 작업을 수행하려면 최소한 다음 권한이 있어야 합니다.
다른 예제 정책은 https://docs.aws.amazon.com/AmazonS3/latest/dev/example-policies-s3.html에서 확인할 수 있습니다.
s3cmd --configure
실행두 개의 키를 입력하라는 메시지가 표시됩니다. 확인 이메일이나 Amazon 계정 페이지에서 키를 복사하여 붙여넣으세요. 복사할 때 주의하세요! 대소문자를 구분하므로 정확하게 입력해야 합니다. 그렇지 않으면 유효하지 않은 서명이나 이와 유사한 오류가 계속 발생합니다.
s3:ListAllMyBuckets 권한을 키에 추가해야 합니다. 그렇지 않으면 액세스를 테스트하는 동안 AccessDenied 오류가 발생합니다.
s3cmd ls
실행하여 모든 버킷을 나열합니다.방금 S3를 사용하기 시작하셨으므로 현재 귀하가 소유한 버킷이 없습니다. 따라서 출력은 비어 있습니다.
s3cmd mb s3://my-new-bucket-name
으로 버킷을 만듭니다. 위에서 언급한 것처럼 버킷 이름은 S3의 모든 사용자 간에 고유해야 합니다. 이는 "test" 또는 "asdf"와 같은 간단한 이름이 이미 사용되었으며 좀 더 독창적인 이름을 만들어야 함을 의미합니다. 가능한 한 많은 기능을 보여주기 위해 FQDN 이름의 버킷 s3://public.s3tools.org
만들어 보겠습니다.
$ s3cmd mb s3://public.s3tools.org
Bucket 's3://public.s3tools.org' created
s3cmd ls
사용하여 버킷을 다시 나열하십시오.이제 새로 생성된 버킷이 표시됩니다.
$ s3cmd ls
2009-01-28 12:34 s3://public.s3tools.org
$ s3cmd ls s3://public.s3tools.org
$
실제로는 비어 있습니다.
$ s3cmd put some-file.xml s3://public.s3tools.org/somefile.xml
some-file.xml -> s3://public.s3tools.org/somefile.xml [1 of 1]
123456 of 123456 100% in 2s 51.75 kB/s done
버킷의 가상 '디렉터리'에 2디렉토리 트리를 업로드합니다.
$ s3cmd put --recursive dir1 dir2 s3://public.s3tools.org/somewhere/
File 'dir1/file1-1.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-1.txt' [1 of 5]
File 'dir1/file1-2.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-2.txt' [2 of 5]
File 'dir1/file1-3.log' stored as 's3://public.s3tools.org/somewhere/dir1/file1-3.log' [3 of 5]
File 'dir2/file2-1.bin' stored as 's3://public.s3tools.org/somewhere/dir2/file2-1.bin' [4 of 5]
File 'dir2/file2-2.txt' stored as 's3://public.s3tools.org/somewhere/dir2/file2-2.txt' [5 of 5]
보시다시피 /somewhere
'디렉토리'를 만들 필요가 없었습니다. 실제로 이는 실제 디렉토리가 아닌 파일 이름 접두사일 뿐이므로 사전에 어떤 방식으로든 생성할 필요가 없습니다.
--recursive
옵션과 함께 put
사용하는 대신 sync
명령을 사용할 수도 있습니다.
$ s3cmd sync dir1 dir2 s3://public.s3tools.org/somewhere/
$ s3cmd ls s3://public.s3tools.org
DIR s3://public.s3tools.org/somewhere/
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
모든 원격 파일을 나열하려면 --recursive(또는 -r)를 사용하십시오.
$ s3cmd ls --recursive s3://public.s3tools.org
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
2009-02-10 05:13 18 s3://public.s3tools.org/somewhere/dir1/file1-1.txt
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir1/file1-2.txt
2009-02-10 05:13 16 s3://public.s3tools.org/somewhere/dir1/file1-3.log
2009-02-10 05:13 11 s3://public.s3tools.org/somewhere/dir2/file2-1.bin
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir2/file2-2.txt
$ s3cmd get s3://public.s3tools.org/somefile.xml some-file-2.xml
s3://public.s3tools.org/somefile.xml -> some-file-2.xml [1 of 1]
123456 of 123456 100% in 3s 35.75 kB/s done
$ md5sum some-file.xml some-file-2.xml
39bcb6992e461b269b95b3bda303addf some-file.xml
39bcb6992e461b269b95b3bda303addf some-file-2.xml
원본 파일의 체크섬은 검색된 파일 중 하나와 일치합니다. 효과가 있었던 것 같습니다 :-)
S3에서 전체 '디렉토리 트리'를 검색하려면 재귀적 가져오기를 사용하세요.
$ s3cmd get --recursive s3://public.s3tools.org/somewhere
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as './somewhere/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as './somewhere/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as './somewhere/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as './somewhere/dir2/file2-1.bin'
File s3://public.s3tools.org/somewhere/dir2/file2-2.txt saved as './somewhere/dir2/file2-2.txt'
대상 디렉터리가 지정되지 않았으므로 s3cmd
디렉터리 구조를 현재 작업 디렉터리('.')에 저장했습니다.
다음 사이에는 중요한 차이점이 있습니다.
get s3://public.s3tools.org/somewhere
그리고
get s3://public.s3tools.org/somewhere/
(후행 슬래시를 참고하세요)
s3cmd
항상 마지막 경로 부분, 즉 마지막 슬래시 뒤의 단어를 사용하여 파일 이름을 지정합니다.
s3://.../somewhere
의 경우 마지막 경로 부분은 'somewhere'이므로 재귀 get은 로컬 파일 이름을 어딘가/dir1, 어딘가/dir2 등으로 지정합니다.
반면에 s3://.../somewhere/
에서는 마지막 경로 부분이 비어 있고 s3cmd는 'somewhere/' 접두사 없이 'dir1'과 'dir2'만 생성합니다.
$ s3cmd get --recursive s3://public.s3tools.org/somewhere/ ~/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as '~/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as '~/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as '~/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as '~/dir2/file2-1.bin'
보다? 이전 예의 ~/dir1
~/somewhere/dir1
입니다.
s3://public.s3tools.org/somewhere/ 아래의 모든 항목을 제거합니다.
$ s3cmd del --recursive s3://public.s3tools.org/somewhere/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt deleted
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt deleted
...
이제 버킷을 제거해 보세요.
$ s3cmd rb s3://public.s3tools.org
ERROR: S3 error: 409 (BucketNotEmpty): The bucket you tried to delete is not empty
아야, s3://public.s3tools.org/somefile.xml
을 잊어버렸습니다. 어쨌든 버킷을 강제로 제거할 수 있습니다.
$ s3cmd rb --force s3://public.s3tools.org/
WARNING: Bucket is not empty. Removing all the objects from it first. This may take some time...
File s3://public.s3tools.org/somefile.xml deleted
Bucket 's3://public.s3tools.org/' removed
기본 사용법은 이전 섹션에서 설명한 것처럼 간단합니다.
-v
옵션을 사용하여 자세한 정보 수준을 높일 수 있으며, 프로그램이 보닛 아래에서 수행하는 작업을 알고 싶다면 -d
사용하여 실행하여 모든 '디버깅' 출력을 확인하세요.
--configure
로 구성한 후 사용 가능한 모든 옵션이 ~/.s3cfg
파일에 표시됩니다. 즐겨 사용하는 텍스트 편집기에서 수정할 준비가 된 텍스트 파일입니다.
전송 명령(put, get, cp, mv 및 sync)은 객체가 실패하더라도 전송을 계속합니다. 실패가 발생하면 실패는 stderr에 출력되고 종료 상태는 EX_PARTIAL(2)이 됩니다. --stop-on-error
옵션이 지정되거나 구성 옵션 stop_on_error가 true인 경우 전송이 중지되고 해당 오류 코드가 반환됩니다.
자세한 내용은 S3cmd / S3tools 홈페이지를 참조하세요.
저작권(C) 2007-2023 TGRMN 소프트웨어(https://www.tgrmn.com), Sodria SAS(https://www.sodria.com/) 및 기여자
이 프로그램은 무료 소프트웨어입니다. Free Software Foundation에서 발행한 GNU General Public License의 조건에 따라 재배포 및/또는 수정할 수 있습니다. 라이선스 버전 2 또는 (귀하의 선택에 따라) 이후 버전.
이 프로그램은 유용할 것이라는 희망으로 배포되지만 어떠한 보증도 제공하지 않습니다. 상품성이나 특정 목적에의 적합성에 대한 묵시적인 보증도 없이 말입니다. 자세한 내용은 GNU 일반 공중 사용 허가서를 참조하세요.