

# Amazon EC2 인스턴스에서 Amazon S3 사용
<a name="AmazonS3"></a>

Amazon Simple Storage Service(Amazon S3)는 업계 최고의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다. Amazon S3를 사용하여 Amazon EC2 인스턴스 또는 인터넷을 통해 데이터 레이크, 웹 사이트, 백업 및 빅 데이터 분석과 같은 다양한 사용 사례에 대해 원하는 양의 데이터를 저장하고 검색할 수 있습니다. 자세한 내용은 [Amazon S3란 무엇인가?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)를 참조하세요

Amazon EC2 인스턴스에서 Amazon S3 데이터에 액세스하는 두 가지 방법이 있습니다.
+ **파일 액세스** - [Amazon S3 Files](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files.html)를 사용하여 S3 버킷을 인스턴스에 고성능 파일 시스템으로 탑재합니다.
+ **객체 액세스** - [Amazon S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/), AWS CLI, AWS SDK 또는 wget과 같은 도구를 사용하여 S3에서 또는 S3로 객체를 복사합니다.

## Amazon S3 Files를 사용하는 파일 액세스
<a name="S3FilesAccess"></a>

Amazon S3 Files는 S3 범용 버킷을 컴퓨팅 인스턴스에 고성능 파일 시스템으로 탑재할 수 있는 서버리스 파일 시스템입니다. S3 Files를 사용하면 로컬 탑재 경로에서 읽기 및 쓰기와 같은 표준 파일 시스템 작업을 통해 S3 객체를 파일로 액세스할 수 있습니다.

실행 중인 인스턴스에서 시작 시 또는 시작 후 S3 파일 시스템을 EC2 인스턴스에 탑재할 수 있습니다.

**사전 조건**

EC2 인스턴스에서 S3 Files를 설정하기 전에 다음 조건을 갖추었는지 확인합니다.
+ S3 파일 시스템 및 사용 가능한 상태의 탑재 대상 하나 이상. S3 파일 시스템 생성에 대한 자세한 내용은 *Amazon S3 사용 설명서*의 [Working with Amazon S3 Files](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files.html)를 참조하세요.
+ 인스턴스 프로파일이 연결된 EC2 Linux 인스턴스. 파일 시스템을 탑재하는 데 필요한 권한에 대한 자세한 내용은 *Amazon S3 사용 설명서*의 [IAM roles and policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files-prereq-policies.html#s3-files-prereq-iam)를 참조하세요.
+ 인스턴스와 파일 시스템의 탑재 대상 사이에서 NFS 트래픽(포트 2049)을 허용하는 보안 그룹. 필요한 보안 그룹 설정에 대한 자세한 내용은 *Amazon S3 사용 설명서*의 [Security groups](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files-prereq-policies.html#s3-files-prereq-security-groups)를 참조하세요.

**EC2 콘솔을 사용하여 시작 시 파일 시스템을 EC2 인스턴스에 탑재하는 방법**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. **인스턴스 시작**을 선택합니다.

1. **Network settings**(네트워크 설정)에서 다음을 수행합니다.

   1. **편집**을 선택합니다.

   1. **서브넷**에서 서브넷을 선택합니다.

   1. 기본 보안 그룹을 선택하여 EC2 인스턴스에서 S3 파일 시스템에 액세스할 수 있는지 확인하세요. 이 보안 그룹을 사용하여 Secure Shell(SSH)로 EC2 인스턴스에 액세스할 수 없습니다. SSH 액세스의 경우 나중에 기본 보안을 편집하고 SSH를 허용하는 규칙을 추가하거나 SSH를 허용하는 새 보안 그룹을 추가할 수 있습니다. 다음 설정을 사용할 수 있습니다.

      1. **유형:** SSH 

      1. **프로토콜**: TCP 

      1. **포트 범위:** 22 

      1. **소스:** 위치 무관 0.0.0.0/0

1. **스토리지 구성**에서 다음 작업을 수행하세요.

   1. **파일 시스템**에서 **S3 Files**를 선택하세요.

   1. **공유 파일 시스템 추가(Add shared file system)**를 선택합니다.

   1. **S3 파일 시스템**의 경우 네트워크 설정에서 선택한 서브넷을 기반으로 파일 시스템이 가용 영역에 나타납니다. 탑재할 S3 파일 시스템을 선택하세요. 파일 시스템이 없는 경우 **새 파일 시스템 생성**을 선택하여 새 항목을 생성하세요.

   1. 파일 시스템을 탑재하려는 EC2 인스턴스의 로컬 탑재 경로(예: `/mnt/s3files`)를 입력하세요.

   1. 파일 시스템을 탑재하고 fstab에 추가하기 위한 명령이 생성됩니다. **고급 세부 정보**의 **사용자 데이터** 필드에 이 명령을 추가할 수 있습니다. 이제 EC2 인스턴스는 시작될 때와 재부팅될 때마다 S3 파일 시스템을 탑재하도록 구성됩니다. 시작된 후에도 EC2 인스턴스에서 이러한 명령을 실행할 수 있습니다.

1. **고급 세부 정보**에서 인스턴스 프로파일을 인스턴스에 연결하세요. IAM 역할에는 파일 시스템을 탑재하고 S3 버킷에 액세스하기 위한 권한이 있어야 합니다. 필요한 권한에 대한 자세한 내용은 *Amazon S3 사용 설명서*의 [IAM roles and policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-files-prereq-policies.html#s3-files-prereq-iam)를 참조하세요.

1. **인스턴스 시작**을 선택합니다.

   인스턴스가 시작되면 필요한 소프트웨어 유틸리티가 설치되고 파일 시스템이 탑재됩니다. 로컬 탑재 경로로 이동하여 파일 시스템을 볼 수 있습니다.

**시작 후 EC2 파일 시스템을 인스턴스에 탑재하는 방법**

1. Secure Shell(SSH)을 통해 또는 EC2 콘솔에서 EC2 Instance Connect를 사용하여 [EC2 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)하세요.

1. S3 파일 시스템을 탑재하려면 탑재 헬퍼 유틸리티 `amazon-efs-utils`를 사용하세요. Linux 배포에 따라 다음 명령 중 하나를 사용하여 `amazon-efs-utils` 패키지를 설치하세요.

   1. Amazon Linux를 사용하는 경우 다음 명령을 실행하여 Amazon 리포지토리에서 efs-utils를 설치하세요.

      ```
      sudo yum -y install amazon-efs-utils
      ```

   1. 기타 [지원되는 Linux 배포](https://github.com/aws/efs-utils/?tab=readme-ov-file#efs-utils)를 사용하는 경우 다음 명령을 실행하세요.

      ```
      curl https://amazon-efs-utils.aws.com/efs-utils-installer.sh | sudo sh -s -- --install
      ```

   1. 기타 Linux 배포는 *GitHub*의 [efs-utils](https://github.com/aws/efs-utils/?tab=readme-ov-file#on-other-linux-distributions) 리포지토리를 참조하세요.

1. 다음 명령을 사용하여 파일 시스템 탑재 지점으로 사용할 디렉터리를 생성하세요.

   ```
   sudo mkdir {path/to/mount}
   ```

1. S3 파일 시스템을 탑재하세요.

   ```
   FS="{YOUR_FILE_SYSTEM_ID}"
   sudo mount -t s3files $FS:/ {path/to/mount}
   ```

1. 파일 시스템이 탑재되었는지 확인하세요.

   ```
   df -h {path/to/mount}
   ```

**S3 버킷의 객체를 파일로 보는 방법**  
이전 절차를 완료했으면 이제 표준 파일 시스템 작업을 사용하여 로컬 탑재 경로에서 S3 객체를 파일로 읽고 쓸 수 있습니다. S3 버킷에 객체가 있는 경우 다음 명령을 사용하여 객체를 파일로 볼 수 있습니다.

```
ls {path/to/mount}
```

## 객체 기반 액세스
<a name="objectaccess"></a>

S3 API, AWS CLI, AWS SDK 또는 표준 HTTP 도구를 사용하여 Amazon S3에서 또는 해당 위치로 파일을 복사할 수 있습니다. 필요한 권한이 있으면 다음 방법 중 하나를 사용하여 Amazon S3 및 사용자 인스턴스로 또는 해당 위치에서 파일을 복사할 수 있습니다.

------
#### [ wget ]

**참고**  
이 메서드는 퍼블릭 객체에만 적용됩니다. 객체가 퍼블릭이 아닌 경우 `ERROR 403: Forbidden` 메시지가 표시됩니다. 이 오류가 발생하는 경우 Amazon S3 콘솔, AWS CLI, AWS API, AWS SDK 또는 AWS Tools for Windows PowerShell을 사용해야 하며, 필요한 권한이 있어야 합니다. 자세한 내용은 *Amazon S3 사용 설명서*에서 [Amazon S3의 자격 증명 및 액세스 관리](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html) 및 [객체 다운로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)를 참조하세요.

**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](https://aws.amazon.com/powershell/)을 사용하여 Amazon S3 사이에서 객체를 이동할 수 있습니다.

다음과 같이 [Copy-S3Object](https://docs.aws.amazon.com/powershell/latest/reference/items/Copy-S3Object.html) 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 세부 정보 페이지](https://aws.amazon.com/cli/) 단원을 참조하십시오.

[aws s3 cp](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html) 명령은 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](https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html) 명령은 전체 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 참조*의 [AWS SDK를 사용하는 Amazon S3의 코드 예제](https://docs.aws.amazon.com/AmazonS3/latest/API/service_code_examples.html)를 참조하세요.

------