AWS CLI로 S3에 파일 업로드하기: 포괄적인 가이드

Amazon S3 (Simple Storage Service)를 사용할 때, 아마도 S3 웹 콘솔을 사용하여 S3 버킷에 파일을 다운로드, 복사, 또는 업로드하고 있을 것입니다. 웹 콘솔을 사용하는 것은 완벽하게 괜찮습니다. 그것이 바로 시작부터 설계된 용도이기 때문입니다.

특히 키보드 명령보다 마우스 클릭에 익숙한 관리자들에게 웹 콘솔은 아마도 가장 쉬울 것입니다. 그러나, 관리자들은 결국 Amazon S3와 함께 대량 파일 작업을 수행해야 할 필요성을 마주하게 될 것입니다, 예를 들면 무인 파일 업로드 같은 것입니다. GUI는 이러한 작업에 가장 좋은 도구가 아닙니다.

Amazon Web Services, Amazon S3를 포함하여 이러한 자동화 요구사항에 대해, AWS CLI 도구는 Amazon S3 버킷과 객체를 관리하기 위한 명령줄 옵션을 관리자에게 제공합니다.

이 글에서는 AWS CLI 명령줄 도구를 사용하여 Amazon S3와 파일을 업로드, 복사, 다운로드, 동기화하는 방법을 배우게 될 것입니다. 또한 S3 버킷에 접근 권한을 제공하고 그 접근 프로필을 AWS CLI 도구와 함께 작동하도록 설정하는 기본사항도 배우게 될 것입니다.

사전 요구사항

이것은 어떻게 하는지에 대한 글이므로, 다음 섹션에서 예제와 시연이 있을 것입니다. 성공적으로 따라가려면, 여러가지 요구사항을 충족시켜야 합니다.

  • AWS 계정. 기존의 AWS 구독이 없다면, AWS 무료 티어로 가입할 수 있습니다.
  • AWS S3 버킷. 기존 버킷을 사용할 수도 있지만, 빈 버킷을 생성하는 것이 권장됩니다. 버킷 생성을 참조하십시오.
  • A Windows 10 computer with at least Windows PowerShell 5.1. In this article, PowerShell 7.0.2 will be used.
  • AWS CLI 버전 2 도구가 컴퓨터에 설치되어 있어야합니다.
  • Amazon S3와 업로드하거나 동기화 할 로컬 폴더 및 파일

AWS S3 액세스 준비

요구 사항을 이미 갖추고 있다고 가정합니다. S3 버킷과 함께 AWS CLI를 실행할 수 있을 것으로 생각합니다. 단순하지 않을까요?

Amazon S3 또는 AWS와 작업을 시작하기만 한 지 얼마 되지 않은 분들을 위해, 이 섹션은 S3 액세스 설정 및 AWS CLI 프로필 구성에 도움을 주기 위해 작성되었습니다.

AWS에서 IAM 사용자를 생성하는 전체 문서는 아래 링크에서 찾을 수 있습니다. AWS 계정에서 IAM 사용자 생성

S3 액세스 권한을 갖춘 IAM 사용자 생성

CLI를 사용하여 AWS에 액세스 할 때, 작업하려는 리소스에 대한 충분한 액세스 권한을 갖춘 하나 이상의 IAM 사용자를 생성해야합니다. 이 섹션에서는 Amazon S3에 액세스 할 수있는 IAM 사용자를 생성합니다.

Amazon S3에 액세스할 수 있는 IAM 사용자를 생성하려면 먼저 AWS IAM 콘솔에 로그인해야 합니다. 액세스 관리 그룹에서 사용자를 클릭하세요. 그런 다음 사용자 추가를 클릭하세요.

IAM Users Menu

생성할 IAM 사용자의 이름을 사용자 이름* 상자에 입력하세요. 예를 들어 s3Admin과 같이요. 액세스 유형* 선택에서 프로그래밍 방식 액세스에 체크하세요. 그런 다음 다음: 권한 버튼을 클릭하세요.

Set IAM user details

다음으로, 기존 정책 직접 연결을 클릭하세요. 그런 다음 AmazonS3FullAccess 정책 이름을 검색하고 체크하세요. 완료되면 다음: 태그를 클릭하세요.

Assign IAM user permissions

태그 추가 페이지에서 태그를 만드는 것은 선택 사항이며, 이를 건너뛸 수 있고 다음: 검토 버튼을 클릭할 수 있습니다.

IAM user tags

검토 페이지에서 새로 생성된 계정의 요약이 표시됩니다. 사용자 만들기를 클릭하세요.

IAM user summary

마지막으로, 사용자가 생성되면 액세스 키 ID비밀 액세스 키 값을 복사하여 나중에 사용할 수 있도록 저장해야 합니다. 이 값들을 볼 수 있는 유일한 시간입니다.

IAM user key credentials

컴퓨터에 AWS CLI 프로필 설정하기

Amazon S3에 적절한 액세스 권한을 가진 IAM 사용자를 생성했다면, 다음 단계는 컴퓨터에 AWS CLI 프로필을 설정하는 것입니다.

이 섹션은 이미 필요한 대로 AWS CLI 버전 2 도구를 설치한 것으로 가정합니다. 프로필 생성을 위해 다음 정보가 필요합니다:

  • IAM 사용자의 액세스 키 ID.
  • IAM 사용자와 관련된 비밀 액세스 키.
  • 기본 리전 이름은 AWS S3 버킷의 위치와 해당됩니다. 다음 링크를 사용하여 엔드포인트 목록을 확인할 수 있습니다. 이 문서에서는 AWS S3 버킷이 아시아 태평양(시드니) 지역에 있으며, 해당 엔드포인트는 ap-southeast-2입니다.
  • 기본 출력 형식입니다. 이 경우에는 JSON을 사용하십시오.

프로필을 생성하려면 PowerShell을 열고 아래 명령을 입력한 다음 프롬프트에 따릅니다.

aws configure

액세스 키 ID, 비밀 액세스 키, 기본 리전 이름, 그리고 기본 출력 이름을 입력하십시오. 아래 예제를 참조하십시오.

Configure an AWS CLI profile

AWS CLI 액세스 테스트

AWS CLI 프로필을 구성한 후에는 PowerShell에서 아래 명령을 실행하여 프로필이 작동하는지 확인할 수 있습니다.

aws s3 ls

위의 명령은 계정에 있는 Amazon S3 버킷 목록을 표시해야 합니다. 아래 예제는 명령이 실행되는 모습을 보여줍니다. 결과에서 사용 가능한 S3 버킷 목록을 확인할 수 있으므로 프로필 구성이 성공적으로 이루어진 것입니다.

List S3 buckets

Amazon S3에 특화된 AWS CLI 명령어에 대해 알아보려면 AWS CLI 명령어 참조 S3 페이지를 방문하십시오.

S3에서 파일 관리하기

AWS CLI를 사용하면 S3에 파일을 업로드하고 S3에서 파일을 다운로드하며 S3에서 객체를 삭제하고 S3 객체를 다른 S3 위치로 복사하는 등 일반적인 파일 관리 작업을 수행할 수 있습니다. 이 모든 것은 올바른 명령어, 구문, 매개변수 및 옵션을 알면 됩니다.

다음 섹션에서는 다음 환경을 사용합니다.

  • 두 개의 S3 버킷, 즉 atasync1atasync2. 아래 스크린샷은 Amazon S3 콘솔에 있는 기존 S3 버킷을 보여줍니다.
List of available S3 bucket names in the Amazon S3 console
  • c:\sync 폴더 아래에 있는 로컬 디렉토리 및 파일
Local Directory

S3에 개별 파일 업로드하기

S3에 파일을 업로드할 때, 한 번에 하나의 파일을 업로드하거나 여러 파일과 폴더를 재귀적으로 업로드할 수 있습니다. 요구 사항에 따라 적절한 방법을 선택할 수 있습니다.

파일을 S3에 업로드하려면 aws s3 cp 명령에 두 개의 인수(소스 및 대상)를 제공해야 합니다.

예를 들어, 파일 c:\sync\logs\log1.xmlatasync1 버킷의 루트에 업로드하려면 아래 명령을 사용할 수 있습니다.

aws s3 cp c:\sync\logs\log1.xml s3://atasync1/

참고: S3 버킷 이름은 AWS CLI와 함께 사용될 때 항상 S3://로 시작됩니다.

PowerShell에서 위의 명령을 실행하되, 환경에 맞게 소스와 대상을 변경하세요. 결과는 아래의 데모와 유사하게 나와야 합니다.

Upload file to S3

위의 데모에서는 오류 없이 파일 c:\sync\logs\log1.xml이 S3 대상 s3://atasync1/에 업로드되었습니다.

아래의 명령을 사용하여 S3 버킷의 루트에 있는 객체를 나열할 수 있습니다.

aws s3 ls s3://atasync1/

PowerShell에서 위의 명령을 실행하면 아래의 데모와 유사한 결과가 나옵니다. 아래의 출력에서 볼 수 있듯이, 파일 log1.xml이 S3 위치의 루트에 존재합니다.

List the uploaded file in S3

여러 파일과 폴더를 S3에 재귀적으로 업로드하기

이전 섹션에서는 단일 파일을 S3 위치에 복사하는 방법을 보여줬습니다. 그렇다면 여러 파일을 한 번에 업로드해야 한다면, 서로 다른 파일 이름에 대해 동일한 명령을 여러 번 실행하고 싶지 않을 것입니다. 맞나요?

aws s3 cp 명령에는 파일과 폴더를 재귀적으로 처리하는 --recursive 옵션이 있습니다.

예를 들어, 디렉토리 c:\sync에는 166개의 객체(파일과 하위 폴더)가 있습니다.

The folder containing multiple files and sub-folders

--recursive 옵션을 사용하면 c:\sync 폴더의 모든 내용이 S3로 업로드되고 폴더 구조도 유지됩니다. 테스트를 위해 아래의 예제 코드를 사용하세요. 단, 소스와 대상을 환경에 맞게 변경해야 합니다.

아래의 코드에서 소스는 c:\sync이고 대상은 s3://atasync1/sync입니다. S3 버킷 이름 뒤에 있는 /sync 키는 AWS CLI에게 S3의 /sync 폴더에 있는 파일을 업로드하라는 것을 나타냅니다. /sync 폴더가 S3에 없으면 자동으로 생성됩니다.

aws s3 cp c:\sync s3://atasync1/sync --recursive

위의 코드는 아래의 예시처럼 결과를 출력합니다.

Upload multiple files and folders to S3

여러 파일과 폴더를 선택적으로 S3에 업로드하기

모든 유형의 파일을 업로드하는 것이 항상 최선인 경우는 아닙니다. 특정 파일 확장자 (예: *.ps1)를 가진 파일만 업로드해야 할 때도 있습니다. cp 명령에 사용 가능한 두 가지 옵션은 --include--exclude입니다.

이전 섹션에서 사용한 명령은 재귀적으로 모든 파일을 포함하지만, 아래의 명령은 *.ps1 파일 확장자와 일치하는 파일만 업로드하고 다른 모든 파일은 제외합니다.

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.ps1

아래의 예시는 코드가 실행될 때 위의 코드가 어떻게 작동하는지 보여줍니다.

Upload files that matched a specific file extension

또 다른 예시는 여러 다른 파일 확장자를 포함하려는 경우입니다. --include 옵션을 여러 번 지정해야 합니다.

아래의 예시 명령은 *.csv와 *.png 파일만 복사 명령에 포함합니다.

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.csv --include *.png

PowerShell에서 위의 코드를 실행하면 아래의 예시와 유사한 결과가 표시됩니다.

Upload files with multiple include options

S3에서 객체 다운로드

이 섹션에서 배운 예제를 기반으로, 복사 작업을 반대로 수행할 수도 있습니다. 즉, S3 버킷 위치에서 객체를 로컬 기기로 다운로드할 수 있습니다.

S3에서 로컬로 복사하는 경우 소스와 대상의 위치를 바꾸어야 합니다. 소스는 S3 위치이고 대상은 로컬 경로입니다. 아래에 표시된 것과 같습니다.

aws s3 cp s3://atasync1/sync c:\sync

S3에서 로컬로 객체를 다운로드할 때 업로드할 때 사용한 동일한 옵션도 적용됩니다. 예를 들어, 아래 명령을 사용하여 모든 객체를 다운로드하려면 --recursive 옵션을 사용하십시오.

aws s3 cp s3://atasync1/sync c:\sync --recursive

S3 간 객체 복사

AWS CLI를 사용하여 파일과 폴더를 업로드하고 다운로드하는 것 외에도, 두 개의 S3 버킷 위치 간에 파일을 복사하거나 이동할 수도 있습니다.

아래 명령은 하나의 S3 위치를 소스로 사용하고 다른 S3 위치를 대상으로 사용하는 것을 알 수 있습니다.

aws s3 cp s3://atasync1/Log1.xml s3://atasync2/

아래 예시는 위의 명령을 사용하여 소스 파일이 다른 S3 위치로 복사되는 것을 보여줍니다.

Copy objects from one S3 location to another S3 location

S3와 파일 및 폴더 동기화

지금까지 AWS CLI 명령을 사용하여 S3에서 파일을 업로드, 다운로드 및 복사하는 방법을 배웠습니다. 이 섹션에서는 S3에 대한 AWS CLI에서 사용 가능한 또 하나의 파일 작업 명령인 sync 명령에 대해 알아보겠습니다. sync 명령은 업데이트된, 새로운 및 삭제된 파일만 처리합니다.

일부 경우에는 S3 버킷의 내용을 로컬 서버의 디렉토리와 동기화하여 최신 상태로 유지해야 할 필요가 있습니다. 예를 들어, 서버에 거래 로그를 S3와 주기적으로 동기화해야 하는 요구사항이 있을 수 있습니다.

아래의 명령을 사용하면 로컬 서버의 c:\sync 폴더에 있는 *.XML 로그 파일이 S3 위치인 s3://atasync1에 동기화됩니다.

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml

아래의 데모에서는 PowerShell에서 위의 명령을 실행한 후 모든 *.XML 파일이 S3 대상인 s3://atasync1/에 업로드된 것을 보여줍니다.

Synchronizing local files to S3

S3와의 새로운 및 업데이트된 파일 동기화

다음 예제에서는 로그 파일 Log1.xml의 내용이 수정되었다고 가정합니다. sync 명령은 해당 수정 내용을 인식하고 로컬 파일에서 S3로 변경 사항을 업로드해야 합니다. 아래의 데모에서 확인할 수 있습니다.

사용할 명령은 이전 예제와 동일합니다.

Synchronizing changes to S3

위의 출력에서 볼 수 있듯이 로컬에서 변경된 파일은 Log1.xml 하나뿐이므로, S3와 동기화된 파일도 해당 파일 하나뿐입니다.

S3와의 삭제 동기화

기본적으로 sync 명령은 삭제 작업을 처리하지 않습니다. 원본 위치에서 삭제된 파일은 대상에서 제거되지 않습니다. 하지만 --delete 옵션을 사용하면 제거할 수 있습니다.

다음 예제에서는 원본에서 파일인 Log5.xml이 삭제되었습니다. 파일을 동기화하는 명령에 --delete 옵션이 추가됩니다. 아래의 코드에서 확인할 수 있습니다.

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml --delete

PowerShell에서 위의 명령을 실행하면, 삭제된 파일인 Log5.xml이 대상 S3 위치에서도 삭제됩니다. 샘플 결과는 아래에 표시됩니다.

Synchronize file deletions to S3

요약

Amazon S3는 파일을 클라우드에 저장하는 데 탁월한 리소스입니다. AWS CLI 도구를 사용하면 Amazon S3를 더욱 활용하고 프로세스를 자동화할 수 있는 기회가 열립니다.

이 문서에서는 AWS CLI 도구를 사용하여 로컬 위치와 S3 버킷 간에 파일 및 폴더를 업로드, 다운로드 및 동기화하는 방법을 배웠습니다. 또한 S3 버킷의 내용을 다른 S3 위치로 복사하거나 이동할 수도 있다는 것을 배웠습니다.

Amazon S3와 함께 파일 관리를 자동화하기 위해 AWS CLI 도구를 사용하는 많은 유스케이스 시나리오가 있을 수 있습니다. PowerShell 스크립팅과 결합하여 재사용 가능한 도구나 자체 도구 또는 모듈을 만들어볼 수도 있습니다. 어떤 기회를 찾고 자신의 기술을 과시할지는 당신에게 달렸습니다.

추가 자료

Source:
https://adamtheautomator.com/upload-file-to-s3/