Amazon EC2 인스턴스와 함께 Amazon S3 사용하기

Amazon EC2 인스턴스와 함께 Amazon S3 사용하기

Amazon Simple Storage Service(Amazon S3)는 업계 최고 수준의 확장성, 데이터 가용성, 보안, 성능을 제공하는 객체 스토리지 서비스예요. 이 절에서 EC2 인스턴스에서 Amazon S3 데이터에 접근하는 두 가지 방법을 살펴볼게요.

출처: 문서

본문

Amazon Simple Storage Service(Amazon S3)는 업계 최고 수준의 확장성, 데이터 가용성, 보안, 성능을 제공하는 객체 스토리지 서비스예요. Amazon S3를 사용해 데이터 레이크, 웹사이트, 백업, 빅 데이터 분석 같은 다양한 사용 사례를 위해 Amazon EC2 인스턴스에서 또는 인터넷 어디에서든 어떤 양의 데이터든 저장·검색할 수 있어요. 자세한 내용은 What is Amazon S3?를 참고하세요.

Amazon EC2 인스턴스에서 Amazon S3 데이터에 접근하는 두 가지 방법이 있어요.

  • 파일 접근(File access) – Amazon S3 Files를 사용해 S3 버킷을 인스턴스의 고성능 파일 시스템으로 마운트해요.
  • 객체 접근(Object access) – Amazon S3 API, AWS CLI, AWS SDK, 또는 wget 같은 도구를 사용해 S3로 객체를 복사해요.

Amazon S3 Files로 파일 접근

Amazon S3 Files는 S3 범용 버킷을 컴퓨팅 인스턴스의 고성능 파일 시스템으로 마운트할 수 있게 해주는 서버리스 파일 시스템이에요. S3 Files를 사용하면 로컬 마운트 경로에서 읽기·쓰기 같은 표준 파일 시스템 작업으로 S3 객체를 파일로 접근할 수 있어요.

S3 파일 시스템을 시작 시 또는 시작 후 실행 중인 인스턴스에서 EC2 인스턴스에 마운트할 수 있어요.

사전 요구 사항

EC2 인스턴스에서 S3 Files를 설정하기 전에 다음을 확인하세요.

  • S3 파일 시스템과 available 상태의 마운트 대상(mount target)이 최소 하나. S3 파일 시스템을 만드는 방법은 Amazon S3 User Guide의 Working with Amazon S3 Files를 참고하세요.
  • 인스턴스 프로필이 연결된 EC2 Linux 인스턴스. 파일 시스템을 마운트하는 데 필요한 권한은 Amazon S3 User Guide의 IAM roles and policies를 참고하세요.
  • 인스턴스와 파일 시스템의 마운트 대상 사이에 NFS 트래픽(포트 2049)을 허용하는 보안 그룹. 필요한 보안 그룹 설정은 Amazon S3 User Guide의 Security groups를 참고하세요.
EC2 콘솔로 시작 시 EC2 인스턴스에 파일 시스템을 마운트하려면
  • Amazon EC2 콘솔을 https://console.aws.amazon.com/ec2/에서 엽니다.
  • Launch instance를 선택합니다.
  • Network settings에서 다음을 수행합니다.
    • Edit을 선택합니다.
    • Subnet에서 서브넷을 선택합니다.
    • 기본 보안 그룹을 선택해 EC2 인스턴스가 S3 파일 시스템에 접근할 수 있게 합니다. 이 보안 그룹으로는 SSH(Secure Shell)로 EC2 인스턴스에 접근할 수 없어요. SSH 접근을 위해서는 나중에 기본 보안 그룹을 편집해 SSH를 허용하는 규칙을 추가하거나, SSH를 허용하는 새 보안 그룹을 추가할 수 있어요. 다음 설정을 사용할 수 있어요.
      • Type: SSH
      • Protocol: TCP
      • Port Range: 22
      • Source: Anywhere 0.0.0.0/0
  • Configure storage에서 다음을 수행합니다.
    • File systems 아래에서 S3 Files를 선택합니다.
    • Add shared file system을 선택합니다.
    • S3 file system에서, Network settings에서 선택한 서브넷을 기준으로 가용 영역에 내 파일 시스템이 나타나요. 마운트할 S3 파일 시스템을 선택합니다. 파일 시스템이 없으면 Create a new file system을 선택해 새로 만듭니다.
    • 파일 시스템을 마운트할 EC2 인스턴스의 로컬 마운트 경로를 입력합니다(예: /mnt/s3files).
    • 파일 시스템을 마운트하고 fstab에 추가하는 명령이 생성돼요. 이 명령을 Advanced details 아래의 User data 필드에 추가할 수 있어요. 그러면 EC2 인스턴스가 시작 시와 재부팅할 때마다 S3 파일 시스템을 마운트하도록 구성돼요. 인스턴스가 시작된 후에 이 명령을 EC2 인스턴스에서 직접 실행해도 돼요.
  • Advanced details 아래에서 인스턴스에 인스턴스 프로필을 연결합니다. IAM 역할에 파일 시스템을 마운트하고 S3 버킷에 접근할 권한이 있어야 해요. 필요한 권한에 대한 자세한 내용은 Amazon S3 User Guide의 IAM roles and policies를 참고하세요.
  • Launch instance를 선택합니다.

인스턴스가 시작된 후에는 필요한 소프트웨어 유틸리티가 설치되고 파일 시스템이 마운트돼요. 로컬 마운트 경로로 이동해 파일 시스템을 볼 수 있어요.

시작 후 EC2 인스턴스에 파일 시스템을 마운트하려면
  • SSH(Secure Shell)로 또는 EC2 콘솔의 EC2 Instance Connect를 사용해 EC2 인스턴스에 연결합니다.
  • S3 파일 시스템을 마운트하려면 마운트 헬퍼 유틸리티 amazon-efs-utils를 사용합니다. Linux 배포판에 따라 다음 명령 중 하나를 사용해 amazon-efs-utils 패키지를 설치합니다.
    • Amazon Linux를 사용한다면 Amazon의 리포지토리에서 efs-utils를 설치하려면 다음 명령을 실행합니다.
sudo yum -y install amazon-efs-utils
curl https://amazon-efs-utils.aws.com/efs-utils-installer.sh | sudo sh -s -- --install
  • 다른 Linux 배포판은 GitHub의 efs-utils 리포지토리를 참고하세요.
  • 다음 명령으로 파일 시스템 마운트 지점용 디렉터리를 만듭니다.
sudo mkdir {path/to/mount}
  • S3 파일 시스템을 마운트합니다.
FS="{YOUR_FILE_SYSTEM_ID}"
sudo mount -t s3files $FS:/ {path/to/mount}
  • 파일 시스템이 마운트되었는지 확인합니다.
df -h {path/to/mount}
S3 버킷의 객체를 파일로 보려면

앞의 절차를 완료했다면 이제 표준 파일 시스템 작업으로 로컬 마운트 경로에서 S3 객체를 파일로 읽고 쓸 수 있어요. S3 버킷에 객체가 있다면 다음 명령으로 그 객체들을 파일로 볼 수 있어요.

ls {path/to/mount}

객체 기반 접근

S3 API, AWS CLI, AWS SDK, 표준 HTTP 도구를 사용해 Amazon S3로 또는 Amazon S3에서 파일을 복사할 수 있어요. 필요한 권한이 있다면 다음 방법 중 하나로 Amazon S3와 내 인스턴스 사이에 파일을 복사할 수 있어요.

wget —

참고

이 방법은 공용 객체에서만 작동해요. 객체가 공개되지 않았다면 ERROR 403: Forbidden 메시지를 받아요. 이 오류를 받으면 Amazon S3 콘솔, AWS CLI, AWS API, AWS SDK, AWS Tools for Windows PowerShell 중 하나를 사용해야 하고, 필요한 권한이 있어야 해요. 자세한 내용은 Amazon S3 User Guide의 Identity and access management for Amazon S3와 Downloading an object를 참고하세요.

wget 유틸리티는 Amazon S3에서 공용 객체를 다운로드하는 데 사용할 수 있는 HTTP 및 FTP 클라이언트예요. Amazon Linux와 대부분의 다른 배포판에 기본으로 설치되어 있고, Windows에서도 다운로드할 수 있어요. Amazon S3 객체를 다운로드하려면 다음 명령을 사용하고, 다운로드할 객체의 URL로 바꾸세요.

[ec2-user ~]$ wget https://amzn-s3-demo-bucket.s3.amazonaws.com/path-to-file

PowerShell —

AWS Tools for Windows PowerShell을 사용해 Amazon S3로 객체를 이동할 수 있어요.

Copy-S3Object cmdlet을 사용해 Amazon S3 객체를 Windows 인스턴스로 다음과 같이 복사합니다.

Copy-S3Object `
-BucketName amzn-s3-demo-bucket `
-Key path-to-file `
-LocalFile my_copied_file.ext

또는 Windows 인스턴스의 웹 브라우저로 Amazon S3 콘솔을 열 수 있어요.

AWS CLI —

AWS Command Line Interface(AWS CLI)를 사용해 Amazon S3에서 제한된 항목을 다운로드하고 항목을 업로드할 수 있어요. 도구 설치·구성 방법 같은 자세한 내용은 AWS Command Line Interface detail page를 참고하세요.

aws s3 cp 명령은 Unix cp 명령과 비슷해요. Amazon S3에서 인스턴스로 파일을 복사하고, 인스턴스에서 Amazon S3로 파일을 복사하고, 한 Amazon S3 위치에서 다른 위치로 파일을 복사할 수 있어요.

다음 명령으로 Amazon S3에서 인스턴스로 객체를 복사합니다.

aws s3 cp s3://amzn-s3-demo-bucket/my_folder/my_file.ext my_copied_file.ext

다음 명령으로 인스턴스에서 Amazon S3로 객체를 다시 복사합니다.

aws s3 cp my_copied_file.ext s3://amzn-s3-demo-bucket/my_folder/my_file.ext

aws s3 sync 명령은 전체 Amazon S3 버킷을 로컬 디렉터리 위치와 동기화할 수 있어요. 이는 데이터 세트를 다운로드하고 로컬 복사본을 원격 세트와 최신 상태로 유지하는 데 유용할 수 있어요. Amazon S3 버킷에 적절한 권한이 있다면, 명령에서 소스와 대상 위치를 바꿔 작업을 마친 후 로컬 디렉터리를 클라우드로 다시 푸시할 수 있어요.

다음 명령으로 전체 Amazon S3 버킷을 인스턴스의 로컬 디렉터리에 다운로드합니다.

aws s3 sync s3://amzn-s3-demo-source-bucket local_directory

Amazon S3 API —

API를 사용해 Amazon S3의 데이터에 접근할 수 있어요. 이 API를 사용해 애플리케이션을 개발하고 다른 API·SDK와 통합할 수 있어요. 자세한 내용은 Amazon Simple Storage Service API Reference의 Code examples for Amazon S3 using AWS SDKs를 참고하세요.

더 알아보기