

# RDS for PostgreSQL DB 인스턴스에서 Amazon S3로 데이터 내보내기
<a name="postgresql-s3-export"></a>

RDS for PostgreSQL DB 인스턴스에서 데이터를 쿼리하여 Amazon S3 버킷에 저장된 파일로 직접 내보낼 수 있습니다. 이 작업을 수행하려면 먼저 RDS for PostgreSQL `aws_s3` 확장을 설치해야 합니다. 이 확장은 쿼리 결과를 Amazon S3로 내보내는 데 사용하는 기능을 제공합니다. 다음에서는 확장 프로그램을 설치하는 방법과 Amazon S3로 데이터를 내보내는 방법을 확인할 수 있습니다.

**참고**  
Amazon S3로 계정 간 내보내기는 지원되지 않습니다.

현재 사용 가능한 모든 RDS PostgreSQL 버전은 Amazon Simple Storage Service로 데이터 내보내기를 지원합니다. 자세한 버전 정보는 *Amazon RDS for PostgreSQL 릴리스 정보*에서 [Amazon RDS for PostgreSQL 업데이트](https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/postgresql-versions.html)를 참조하세요.

내보내기용으로 버킷을 설정하지 않은 경우 *Amazon Simple Storage Service 사용 설명서*의 다음 주제를 참조하세요.
+ [Amazon S3 설정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/setting-up-s3.html)
+ [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)

기본적으로 RDS for PostgreSQL에서 Amazon S3로 내보낸 데이터는 AWS 관리형 키를 통한 서버 측 암호화를 사용합니다. 버킷 암호화를 사용하는 경우 Amazon S3 버킷은 AWS Key Management Service(AWS KMS) 키(SSE-KMS)로 암호화되어야 합니다. 현재 Amazon S3 관리형 키(SSE-S3)로 암호화된 버킷은 지원되지 않습니다.

**참고**  
AWS Management Console, AWS CLI 또는 Amazon RDS API를 사용하여 DB 스냅샷 데이터를 Amazon S3에 저장할 수 있습니다. 자세한 내용은 [Amazon S3 for Amazon RDS로 DB 스냅샷 데이터 내보내기](USER_ExportSnapshot.md) 단원을 참조하세요.

**Topics**
+ [aws\$1s3 확장 설치](#USER_PostgreSQL.S3Export.InstallExtension)
+ [Amazon S3으로 데이터 내보내기 개요](#postgresql-s3-export-overview)
+ [내보낼 Amazon S3 파일 경로 지정](#postgresql-s3-export-file)
+ [Amazon S3 버킷에 대한 액세스 권한 설정](postgresql-s3-export-access-bucket.md)
+ [aws\$1s3.query\$1export\$1to\$1s3 함수를 사용하여 쿼리 데이터 내보내기](postgresql-s3-export-examples.md)
+ [함수 참조](postgresql-s3-export-functions.md)
+ [Amazon S3 액세스 문제 해결](postgresql-s3-export-troubleshoot.md)

## aws\$1s3 확장 설치
<a name="USER_PostgreSQL.S3Export.InstallExtension"></a>

Amazon Simple Storage Service를 RDS for PostgreSQL DB 인스턴스와 함께 사용하려면 먼저 `aws_s3` 확장을 설치해야 합니다. 이 확장은 RDS for PostgreSQL DB 인스턴스의 라이터 인스턴스에서 Amazon S3 버킷으로 데이터를 내보내는 기능을 제공합니다. Amazon S3에서 데이터를 가져오기 위한 함수도 제공합니다. 자세한 내용은 [PostgreSQL DB 인스턴스용 RDS로 Amazon S3 데이터 가져오기](USER_PostgreSQL.S3Import.md) 단원을 참조하세요. `aws_s3` 확장은 필요할 때 자동으로 설치되는 `aws_commons` 확장의 일부 도우미 기능에 따라 다릅니다.

**`aws_s3` 확장을 설치하려면**

1. psql(또는 PGAdmin)을 사용하여 RDS for PostgreSQL DB 인스턴스에 `rds_superuser` 권한을 가진 사용자로 연결합니다. 설정 과정에서 기본 이름을 계속 사용했다면 `postgres`로 연결합니다.

   ```
   psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. 다음 명령을 실행하여 확장을 생성합니다.

   ```
   postgres=> CREATE EXTENSION aws_s3 CASCADE;
   NOTICE: installing required extension "aws_commons"
   CREATE EXTENSION
   ```

1. 확장 프로그램이 설치되었는지 확인하려면 psql `\dx` 메타 명령을 사용하면 됩니다.

   ```
   postgres=> \dx
          List of installed extensions
       Name     | Version |   Schema   |                 Description
   -------------+---------+------------+---------------------------------------------
    aws_commons | 1.2     | public     | Common data types across AWS services
    aws_s3      | 1.1     | public     | AWS S3 extension for importing data from S3
    plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
   (3 rows)
   ```

이제 Amazon S3에서 데이터를 가져오고 Amazon S3로 데이터를 내보내는 기능을 사용할 수 있습니다.

### RDS for PostgreSQL 버전에서 Amazon S3로 내보내기를 지원하는지 확인
<a name="postgresql-s3-supported"></a>

`describe-db-engine-versions` 명령을 사용하여 RDS for PostgreSQL 버전이 Amazon S3로 내보내기를 지원하는지 확인할 수 있습니다. 다음 예에서는 버전 10.14에 대한 지원을 확인합니다.

```
aws rds describe-db-engine-versions --region us-east-1
--engine postgres --engine-version 10.14 | grep s3Export
```

출력에 `"s3Export"` 문자열이 포함된 경우 엔진은 Amazon S3 내보내기를 지원합니다. 그렇지 않으면 엔진이 이 내보내기를 지원하지 않습니다.

## Amazon S3으로 데이터 내보내기 개요
<a name="postgresql-s3-export-overview"></a>

RDS for PostgreSQL 데이터베이스에 저장된 데이터를 Amazon S3 버킷으로 내보내려면 다음 절차를 따르세요.

**데이터를 S3로 내보내려면**

1. 데이터를 내보내는 데 사용할 Amazon S3 파일 경로를 식별합니다. 이 프로세스에 대한 자세한 내용은 [내보낼 Amazon S3 파일 경로 지정](#postgresql-s3-export-file) 단원을 참조하십시오.

1. Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다.

   Amazon S3 파일로 데이터를 내보내려면 RDS for PostgreSQL DB 인스턴스에 내보내기 시 스토리지에 사용할 Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다. 여기에는 다음 단계가 포함됩니다.

   1. 내보낼 Amazon S3 버킷에 대한 액세스를 제공하는 IAM 정책을 생성합니다.

   1. IAM 역할 생성.

   1. 생성한 정책을 생성한 역할에 연결하십시오.

   1. 이 IAM 역할을 DB 인스턴스에 추가합니다.

   이 프로세스에 대한 자세한 내용은 [Amazon S3 버킷에 대한 액세스 권한 설정](postgresql-s3-export-access-bucket.md) 단원을 참조하십시오.

1. 데이터를 가져올 데이터베이스 쿼리를 식별합니다. `aws_s3.query_export_to_s3` 함수를 호출하여 쿼리 데이터를 내보냅니다.

   앞의 준비 작업을 완료한 후 [aws\$1s3.query\$1export\$1to\$1s3](postgresql-s3-export-functions.md#aws_s3.export_query_to_s3) 함수를 사용하여 쿼리 결과를 Amazon S3으로 내보냅니다. 이 프로세스에 대한 자세한 내용은 [aws\$1s3.query\$1export\$1to\$1s3 함수를 사용하여 쿼리 데이터 내보내기](postgresql-s3-export-examples.md) 단원을 참조하세요.

## 내보낼 Amazon S3 파일 경로 지정
<a name="postgresql-s3-export-file"></a>

다음 정보를 지정하여 데이터를 내보낼 Amazon S3 위치를 식별합니다.
+ 버킷 이름 – *버킷*은 Amazon S3 객체 또는 파일을 위한 컨테이너입니다.

  Amazon S3을 이용한 데이터 저장에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [Creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 및 [Working with objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/uploading-downloading-objects.html)를 참조하세요.
+ 파일 경로 – 파일 경로는 내보낸 데이터가 Amazon S3 버킷에서 저장되는 위치를 식별합니다. 파일 경로는 다음과 같이 구성됩니다.
  + 가상 폴더 경로를 식별하는 선택적 경로 접두사입니다.
  + 저장할 하나 이상의 파일을 식별하는 파일 접두사입니다. 내보내는 데이터가 클 경우 각각 최대 크기가 약 6GB인 여러 파일에 저장됩니다. 추가 파일 이름의 파일 접두사도 동일하지만 `_partXX`가 추가됩니다. `XX`는 2, 3 등을 나타냅니다.

  예를 들어 `exports` 폴더와 `query-1-export` 파일 접두사가 있는 파일 경로는 `/exports/query-1-export`입니다.
+ AWS 리전(선택 사항) – Amazon S3 버킷이 위치한 AWS 리전입니다. AWS 리전 값을 지정하지 않으면 Amazon RDS는 DB 인스턴스 내보내기와 동일한 AWS 리전의 Amazon S3에 파일을 저장합니다.
**참고**  
현재 AWS 리전은 내보내는 DB 인스턴스의 리전과 동일해야 합니다.

  AWS 리전 이름 및 연결된 값의 목록은 [리전, 가용 영역 및 로컬 영역](Concepts.RegionsAndAvailabilityZones.md) 섹션을 참조하십시오.

내보내는 데이터를 저장할 위치에 대한 Amazon S3 파일 정보를 보관하려면 [aws\$1commons.create\$1s3\$1uri](postgresql-s3-export-functions.md#aws_commons.create_s3_uri) 함수를 사용하여 다음과 같이 `aws_commons._s3_uri_1` 복합 구조를 생성할 수 있습니다.

```
psql=> SELECT aws_commons.create_s3_uri(
   'amzn-s3-demo-bucket',
   'sample-filepath',
   'us-west-2'
) AS s3_uri_1 \gset
```

나중에 이 `s3_uri_1` 값을 [aws\$1s3.query\$1export\$1to\$1s3](postgresql-s3-export-functions.md#aws_s3.export_query_to_s3) 함수에 대한 호출의 파라미터로 제공합니다. 예제는 [aws\$1s3.query\$1export\$1to\$1s3 함수를 사용하여 쿼리 데이터 내보내기](postgresql-s3-export-examples.md)을 참조하세요.

# Amazon S3 버킷에 대한 액세스 권한 설정
<a name="postgresql-s3-export-access-bucket"></a>

데이터를 Amazon S3으로 내보내려면 PostgreSQL DB 인스턴스에 파일이 저장될 Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다.

이렇게 하려면 다음 절차를 따르십시오.

**IAM 역할을 통해 PostgreSQL DB 인스턴스에 액세스할 수 있는 권한을 Amazon S3에 부여하려면**

1. IAM 정책을 생성합니다.

   이 정책은 PostgreSQL DB 인스턴스가 Amazon S3에 액세스할 수 있도록 허용하는 권한을 버킷 및 객체에 부여합니다.

   이 정책을 생성하는 과정에서 다음 단계를 수행하십시오.

   1. 다음과 같은 필수 작업을 정책에 포함하여 PostgreSQL DB 인스턴스에서 Amazon S3 버킷으로 파일 전송을 허용합니다.
      + `s3:PutObject`
      + `s3:AbortMultipartUpload`

   1. Amazon S3 버킷과 버킷의 객체를 식별하는 Amazon 리소스 이름(ARN)을 포함합니다. Amazon S3에 액세스하기 위한 ARN 형식은 `arn:aws:s3:::amzn-s3-demo-bucket/*`입니다.

   PostgreSQL용 Amazon RDS에 대한 IAM 정책 생성에 대한 자세한 내용은 [IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용](UsingWithRDS.IAMDBAuth.IAMPolicy.md) 단원을 참조하십시오. *IAM 사용 설명서*의 [자습서: 첫 번째 고객 관리형 정책 생성 및 연결](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html)도 참조하십시오.

   다음 AWS CLI 명령은 이 옵션으로 `rds-s3-export-policy`라는 IAM 정책을 만듭니다. *amzn-s3-demo-bucket*이라는 버킷에 대한 액세스 권한을 부여합니다.
**주의**  
특정 버킷에 액세스하도록 구성된 엔드포인트 정책이 있는 프라이빗 VPC 내에 데이터베이스를 설정하는 것이 좋습니다. 자세한 내용은 Amazon VPC 사용 설명서의 [Amazon S3용 엔드포인트 정책 사용](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html#vpc-endpoints-policies-s3)을 참조하십시오.  
모든 리소스에 액세스할 수 있는 정책은 생성하지 않는 것이 좋습니다. 이러한 액세스 권한은 데이터 보안에 위협이 될 수 있습니다. `S3:PutObject`를 사용하여 모든 리소스에 액세스할 수 있는 권한을 `"Resource":"*"`에 부여하는 정책을 생성하면 내보내기 권한이 있는 사용자가 계정의 모든 버킷으로 데이터를 내보낼 수 있습니다. 또한 사용자는 *AWS 리전 내의 공개적으로 쓰기 가능한 버킷*으로 데이터를 내보낼 수 있습니다.

   정책을 만든 후에 정책의 Amazon 리소스 이름(ARN)을 기록하십시오. IAM 역할에 정책을 연결할 때 이후 단계에 ARN이 필요합니다.

   ```
   aws iam create-policy  --policy-name rds-s3-export-policy  --policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "s3export",
            "Action": [
              "s3:PutObject*",
              "s3:ListBucket",
              "s3:GetObject*",
              "s3:DeleteObject*",
              "s3:GetBucketLocation",
              "s3:AbortMultipartUpload"
            ],
            "Effect": "Allow",
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ] 
          }
        ] 
      }'
   ```

1. IAM 역할 생성.

   Amazon RDS이 이 IAM 역할을 수임하여 사용자 대신 Amazon S3 버킷에 액세스할 수 있도록 역할을 생성합니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자에게 권한을 위임하기 위한 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)을 참조하세요.

   서비스 권한을 특정 리소스로 제한하는 리소스 기반 정책의 `[aws:SourceArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)` 및 `[aws:SourceAccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)` 전역 조건 컨텍스트 키를 사용하는 것이 좋습니다. 이는 [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)를 방지하는 가장 효과적인 방법입니다.

   두 전역 조건 컨텍스트 키와 계정 ID를 포함한 `aws:SourceArn` 값을 모두 사용하는 경우, `aws:SourceAccount` 값 및 `aws:SourceArn` 값의 계정은 동일한 정책 문에서 사용될 경우 반드시 같은 계정 ID를 사용해야 합니다. 
   + 단일 리소스에 대한 교차 서비스 액세스를 원하는 경우 `aws:SourceArn`을 사용하세요.
   + 해당 계정의 모든 리소스가 교차 서비스 사용과 연결되도록 허용하려는 경우 `aws:SourceAccount`를 사용하세요.

    정책에서는 리소스의 전체 ARN이 포함된 `aws:SourceArn` 전역 조건 컨텍스트 키를 사용해야 합니다. 다음 예제에서는 AWS CLI 명령을 사용하여 `rds-s3-export-role`이라는 역할을 생성하는 방법을 보여줍니다.  
**Example**  

   대상 LinuxmacOS, 또는Unix:

   ```
   aws iam create-role  \
       --role-name rds-s3-export-role  \
       --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                   "aws:SourceAccount": "111122223333",
                   "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname"
                   }
                }
          }
        ] 
      }'
   ```

   Windows의 경우:

   ```
   aws iam create-role  ^
       --role-name rds-s3-export-role  ^
       --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                   "aws:SourceAccount": "111122223333",
                   "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname"
                   }
                }
          }
        ] 
      }'
   ```

1. 생성한 IAM 역할에 생성한 IAM 정책을 연결합니다.

   다음 AWS CLI 명령은 앞서 생성한 정책을 `rds-s3-export-role.`라는 역할에 연결합니다. `your-policy-arn`을 이전 단계에서 기록한 정책 ARN으로 바꿉니다.

   ```
   aws iam attach-role-policy  --policy-arn your-policy-arn  --role-name rds-s3-export-role  
   ```

1. IAM 역할을 DB 인스턴스에 추가합니다. 이렇게 하려면 다음에 설명한 대로 AWS Management Console 또는 AWS CLI를 사용합니다.

## 콘솔
<a name="collapsible-section-1"></a>

**콘솔을 사용하여 PostgreSQL DB 인스턴스에 대해 IAM 역할을 추가하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. 세부 정보를 표시하고자 하는 PostgreSQL DB 인스턴스 이름을 선택합니다.

1. **Connectivity & security(연결성 및 보안)** 탭에 있는 **Manage IAM roles(IAM 역할 관리)** 섹션의 **이 인스턴스에 IAM 역할 추가**에서 추가할 역할을 선택합니다.

1. **기능**에서 **s3Export**를 선택합니다.

1. [**Add role**]을 선택합니다.

## AWS CLI
<a name="collapsible-section-2"></a>

**CLI를 사용하여 PostgreSQL DB 인스턴스에 대해 IAM 역할을 추가하려면**
+ 다음 명령을 사용해 `my-db-instance`라는 PostgreSQL DB 인스턴스에 역할을 추가합니다. *`your-role-arn`*을 이전 단계에서 기록한 정책 ARN으로 교체합니다. `s3Export` 옵션의 값에 대해 `--feature-name`를 사용합니다.  
**Example**  

  대상 LinuxmacOS, 또는Unix:

  ```
  aws rds add-role-to-db-instance \
     --db-instance-identifier my-db-instance \
     --feature-name s3Export \
     --role-arn your-role-arn   \
     --region your-region
  ```

  Windows의 경우:

  ```
  aws rds add-role-to-db-instance ^
     --db-instance-identifier my-db-instance ^
     --feature-name s3Export ^
     --role-arn your-role-arn ^
     --region your-region
  ```

# aws\$1s3.query\$1export\$1to\$1s3 함수를 사용하여 쿼리 데이터 내보내기
<a name="postgresql-s3-export-examples"></a>

[aws\$1s3.query\$1export\$1to\$1s3](postgresql-s3-export-functions.md#aws_s3.export_query_to_s3) 함수를 호출하여 PostgreSQL 데이터를 Amazon S3으로 내보냅니다.

**Topics**
+ [사전 조건](#postgresql-s3-export-examples-prerequisites)
+ [aws\$1s3.query\$1export\$1to\$1s3 호출](#postgresql-s3-export-examples-basic)
+ [사용자 지정 구분 기호를 사용하는 CSV 파일로 내보내기](#postgresql-s3-export-examples-custom-delimiter)
+ [인코딩을 사용하여 이진 파일로 내보내기](#postgresql-s3-export-examples-encoded)

## 사전 조건
<a name="postgresql-s3-export-examples-prerequisites"></a>

`aws_s3.query_export_to_s3` 함수를 사용하기 전에 다음 사전 조건을 충족해야 합니다.
+ [Amazon S3으로 데이터 내보내기 개요](postgresql-s3-export.md#postgresql-s3-export-overview)에 설명된 대로 필요한 PostgreSQL 확장을 설치합니다.
+ [내보낼 Amazon S3 파일 경로 지정](postgresql-s3-export.md#postgresql-s3-export-file)에 설명된 대로 데이터를 내보낼 Amazon S3 위치를 결정합니다.
+ [Amazon S3 버킷에 대한 액세스 권한 설정](postgresql-s3-export-access-bucket.md)에 설명된 대로 Amazon S3에 대한 내보내기 액세스 권한이 DB 인스턴스에 있는지 확인합니다.

다음 예제에서는 `sample_table`이라는 데이터베이스 테이블을 사용합니다. 이 예제에서는 *amzn-s3-demo-bucket*이라는 버킷으로 데이터를 내보냅니다. 예제 테이블과 데이터는 psql에서 다음 SQL 문을 사용하여 생성됩니다.

```
psql=> CREATE TABLE sample_table (bid bigint PRIMARY KEY, name varchar(80));
psql=> INSERT INTO sample_table (bid,name) VALUES (1, 'Monday'), (2,'Tuesday'), (3, 'Wednesday');
```

## aws\$1s3.query\$1export\$1to\$1s3 호출
<a name="postgresql-s3-export-examples-basic"></a>

다음은 [aws\$1s3.query\$1export\$1to\$1s3](postgresql-s3-export-functions.md#aws_s3.export_query_to_s3) 함수를 호출하는 기본 방법을 보여줍니다.

이 예제에서는 `s3_uri_1` 변수를 사용하여 Amazon S3 파일을 식별하는 정보가 포함된 구조를 식별합니다. [aws\$1commons.create\$1s3\$1uri](postgresql-s3-export-functions.md#aws_commons.create_s3_uri) 함수를 사용하여 구조를 생성합니다.

```
psql=> SELECT aws_commons.create_s3_uri(
   'amzn-s3-demo-bucket',
   'sample-filepath',
   'us-west-2'
) AS s3_uri_1 \gset
```

파라미터가 다음 두 `aws_s3.query_export_to_s3` 함수 호출에 따라 달라도 이러한 예제에 대한 결과는 동일합니다. `sample_table` 표의 모든 행은 *amzn-s3-demo-bucket*이라는 버킷으로 내보내집니다.

```
psql=> SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', :'s3_uri_1');

psql=> SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', :'s3_uri_1', options :='format text');
```

파라미터는 다음과 같이 설명됩니다.
+ `'SELECT * FROM sample_table'` – 첫 번째 파라미터는 SQL 쿼리를 포함하는 필수 텍스트 문자열입니다. PostgreSQL 엔진은 이 쿼리를 실행합니다. 쿼리 결과는 다른 파라미터에서 식별된 S3 버킷에 복사됩니다.
+ `:'s3_uri_1'` – 이 파라미터는 Amazon S3 파일을 식별하는 구조입니다. 이 예제에서는 변수를 사용하여 이전에 생성된 구조를 식별합니다. 대신 다음과 같이 `aws_commons.create_s3_uri` 함수 호출 내에 `aws_s3.query_export_to_s3` 함수 호출을 인라인을 포함시켜 구조를 생성할 수 있습니다.

  ```
  SELECT * from aws_s3.query_export_to_s3('select * from sample_table', 
     aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'sample-filepath', 'us-west-2') 
  );
  ```
+ `options :='format text'` – `options` 파라미터는 PostgreSQL `COPY` 인수를 포함하는 선택적 텍스트 문자열입니다. 복사 프로세스에서는 [PostgreSQL COPY](https://www.postgresql.org/docs/current/sql-copy.html) 명령의 인수 및 형식을 사용합니다.

지정된 파일이 Amazon S3 버킷에 없으면 생성됩니다. 파일이 이미 있는 경우 파일을 덮어씁니다. Amazon S3에서 내보낸 데이터에 액세스하는 구문은 다음과 같습니다.

```
s3-region://bucket-name[/path-prefix]/file-prefix
```

내보내는 데이터가 클 경우 각각 최대 크기가 약 6GB인 여러 파일에 저장됩니다. 추가 파일 이름의 파일 접두사도 동일하지만 `_partXX`가 추가됩니다. `XX`는 2, 3 등을 나타냅니다. 예를 들어 데이터 파일을 저장하는 경로를 다음과 같이 지정한다고 가정합니다.

```
s3-us-west-2://amzn-s3-demo-bucket/my-prefix
```

내보내기 시 세 개의 데이터 파일을 만들어야 하는 경우 Amazon S3 버킷에 다음 데이터 파일이 포함됩니다.

```
s3-us-west-2://amzn-s3-demo-bucket/my-prefix
s3-us-west-2://amzn-s3-demo-bucket/my-prefix_part2
s3-us-west-2://amzn-s3-demo-bucket/my-prefix_part3
```

이 함수에 대한 전체 참조 및 이 함수를 호출하는 추가 방법은 [aws\$1s3.query\$1export\$1to\$1s3](postgresql-s3-export-functions.md#aws_s3.export_query_to_s3) 단원을 참조하세요. Amazon S3에서 파일에 액세스하는 방법에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [객체 보기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/OpeningAnObject.html)를 참조하세요.

## 사용자 지정 구분 기호를 사용하는 CSV 파일로 내보내기
<a name="postgresql-s3-export-examples-custom-delimiter"></a>

다음 예제에서는 [aws\$1s3.query\$1export\$1to\$1s3](postgresql-s3-export-functions.md#aws_s3.export_query_to_s3) 함수를 호출하여 사용자 지정 구분 기호를 사용하는 파일로 데이터를 내보내는 방법을 보여줍니다. 이 예제에서는 [PostgreSQL COPY](https://www.postgresql.org/docs/current/sql-copy.html) 명령의 인수를 사용하여 쉼표로 구분된 값(CSV) 형식과 콜론(:) 구분 기호를 지정합니다.

```
SELECT * from aws_s3.query_export_to_s3('select * from basic_test', :'s3_uri_1', options :='format csv, delimiter $$:$$');
```

## 인코딩을 사용하여 이진 파일로 내보내기
<a name="postgresql-s3-export-examples-encoded"></a>

다음 예제에서는 [aws\$1s3.query\$1export\$1to\$1s3](postgresql-s3-export-functions.md#aws_s3.export_query_to_s3) 함수를 호출하여 Windows-1253 인코딩이 있는 이진 파일로 데이터를 내보내는 방법을 보여줍니다.

```
SELECT * from aws_s3.query_export_to_s3('select * from basic_test', :'s3_uri_1', options :='format binary, encoding WIN1253');
```

# 함수 참조
<a name="postgresql-s3-export-functions"></a>

**Topics**
+ [aws\$1s3.query\$1export\$1to\$1s3](#aws_s3.export_query_to_s3)
+ [aws\$1commons.create\$1s3\$1uri](#aws_commons.create_s3_uri)

## aws\$1s3.query\$1export\$1to\$1s3
<a name="aws_s3.export_query_to_s3"></a>

PostgreSQL 쿼리 결과를 Amazon S3 버킷으로 내보냅니다. `aws_s3` 확장은 `aws_s3.query_export_to_s3` 함수를 제공합니다.

두 가지 필수 파라미터는 `query` 및 `s3_info`입니다. 이러한 파라미터는 내보낼 쿼리를 정의하고 내보낼 Amazon S3 버킷을 식별합니다. 다양한 내보내기 파라미터를 정의하기 위해 `options`라는 선택적 파라미터가 제공됩니다. `aws_s3.query_export_to_s3` 함수 사용 예는 [aws\$1s3.query\$1export\$1to\$1s3 함수를 사용하여 쿼리 데이터 내보내기](postgresql-s3-export-examples.md) 단원을 참조하십시오.

**구문**:

```
aws_s3.query_export_to_s3(
    query text,    
    s3_info aws_commons._s3_uri_1,    
    options text,
    kms_key text
)
```입력 파라미터

*query*  
PostgreSQL 엔진이 실행하는 SQL 쿼리를 포함하는 필수 텍스트 문자열입니다. 이 쿼리의 결과는 `s3_info` 파라미터에서 식별된 S3 버킷에 복사됩니다.

*s3\$1info*  
S3 객체에 대한 다음 정보를 포함하는 `aws_commons._s3_uri_1` 복합 키입니다.  
+ `bucket` – 파일을 포함할 Amazon S3 버킷의 이름입니다.
+ `file_path` – Amazon S3 파일 이름 및 경로입니다.
+ `region` - 버킷이 있는 AWS 리전입니다. AWS 리전 이름 및 연결된 값의 목록은 [리전, 가용 영역 및 로컬 영역](Concepts.RegionsAndAvailabilityZones.md) 섹션을 참조하십시오.

  현재, 이 값은 내보내는 DB 인스턴스의 AWS 리전과 동일해야 합니다. 기본값은 내보내는 DB 인스턴스의 AWS 리전입니다.
`aws_commons._s3_uri_1` 복합 구조를 생성하려면 [aws\$1commons.create\$1s3\$1uri](#aws_commons.create_s3_uri) 함수를 참조하십시오.

*options*  
PostgreSQL `COPY` 명령에 대한 인수를 포함하는 선택적 텍스트 문자열입니다. 이러한 인수는 내보낼 때 데이터를 복사하는 방법을 지정합니다. 자세한 내용은 [PostgreSQL COPY 설명서](https://www.postgresql.org/docs/current/sql-copy.html)를 참조하십시오.

*kms\$1key text*  
데이터를 내보낼 S3 버킷의 고객 관리형 KMS 키가 포함된 선택적 텍스트 문자열입니다.

### 대체 입력 파라미터
<a name="aws_s3.export_query_to_s3-alternate-parameters"></a>

`s3_info` 파라미터 대신에 확장 파라미터 세트를 사용하면 테스트에 도움이 됩니다. 다음은 `aws_s3.query_export_to_s3` 함수에 대한 추가 구문 변형입니다.

`s3_info` 파라미터를 사용해 Amazon S3 파일을 식별하는 대신 `bucket`, `file_path` 및 `region` 파라미터의 조합을 사용하십시오.

```
aws_s3.query_export_to_s3(
    query text,    
    bucket text,    
    file_path text,    
    region text,    
    options text,
    kms_key text
)
```

*query*  
PostgreSQL 엔진이 실행하는 SQL 쿼리를 포함하는 필수 텍스트 문자열입니다. 이 쿼리의 결과는 `s3_info` 파라미터에서 식별된 S3 버킷에 복사됩니다.

*bucket*  
파일이 들어 있는 Amazon S3 버킷의 이름이 포함된 필수 텍스트 문자열입니다.

*file\$1path*  
파일 경로를 포함한 Amazon S3 파일 이름이 포함된 필수 텍스트 문자열입니다.

*리전*  
버킷이 있는 AWS 리전을 포함하는 선택적 텍스트 문자열입니다. AWS 리전 이름 및 연결된 값의 목록은 [리전, 가용 영역 및 로컬 영역](Concepts.RegionsAndAvailabilityZones.md) 섹션을 참조하십시오.  
현재, 이 값은 내보내는 DB 인스턴스의 AWS 리전과 동일해야 합니다. 기본값은 내보내는 DB 인스턴스의 AWS 리전입니다.

*options*  
PostgreSQL `COPY` 명령에 대한 인수를 포함하는 선택적 텍스트 문자열입니다. 이러한 인수는 내보낼 때 데이터를 복사하는 방법을 지정합니다. 자세한 내용은 [PostgreSQL COPY 설명서](https://www.postgresql.org/docs/current/sql-copy.html)를 참조하십시오.

*kms\$1key text*  
데이터를 내보낼 S3 버킷의 고객 관리형 KMS 키가 포함된 선택적 텍스트 문자열입니다.

### 출력 파라미터
<a name="aws_s3.export_query_to_s3-output-parameters"></a>

```
aws_s3.query_export_to_s3(
    OUT rows_uploaded bigint,
    OUT files_uploaded bigint,
    OUT bytes_uploaded bigint
)
```

*rows\$1uploaded*  
지정된 쿼리에 대해 Amazon S3에 성공적으로 업로드된 테이블 행 수입니다.

*files\$1uploaded*  
Amazon S3에 업로드된 파일 수입니다. 파일은 약 6GB 크기로 생성됩니다. 생성된 각 추가 파일 이름에 `_partXX`가 추가됩니다. `XX`는 2, 3 등을 나타냅니다.

*bytes\$1uploaded*  
Amazon S3에 업로드된 총 바이트 수입니다.

### 예제
<a name="aws_s3.export_query_to_s3-examples"></a>

```
psql=> SELECT * from aws_s3.query_export_to_s3('select * from sample_table', 'amzn-s3-demo-bucket', 'sample-filepath');
psql=> SELECT * from aws_s3.query_export_to_s3('select * from sample_table', 'amzn-s3-demo-bucket', 'sample-filepath','us-west-2');
psql=> SELECT * from aws_s3.query_export_to_s3('select * from sample_table', 'amzn-s3-demo-bucket', 'sample-filepath','us-west-2','format text');
```

## aws\$1commons.create\$1s3\$1uri
<a name="aws_commons.create_s3_uri"></a>

Amazon S3 파일 정보를 저장할 `aws_commons._s3_uri_1` 구조를 생성합니다. `aws_commons.create_s3_uri` 함수의 `s3_info` 파라미터에서 [aws\$1s3.query\$1export\$1to\$1s3](#aws_s3.export_query_to_s3) 함수의 결과를 사용합니다. `aws_commons.create_s3_uri` 함수 사용 예는 [내보낼 Amazon S3 파일 경로 지정](postgresql-s3-export.md#postgresql-s3-export-file) 단원을 참조하십시오.

**구문**:

```
aws_commons.create_s3_uri(
   bucket text,
   file_path text,
   region text
)
```입력 파라미터

*버킷*  
파일의 Amazon S3 버킷 이름이 포함된 필수 텍스트 문자열입니다.

*file\$1path*  
파일 경로를 포함한 Amazon S3 파일 이름이 포함된 필수 텍스트 문자열입니다.

*리전*  
파일이 위치한 AWS 리전이 포함된 필수 텍스트 문자열입니다. AWS 리전 이름 및 연결된 값의 목록은 [리전, 가용 영역 및 로컬 영역](Concepts.RegionsAndAvailabilityZones.md) 섹션을 참조하십시오.

# Amazon S3 액세스 문제 해결
<a name="postgresql-s3-export-troubleshoot"></a>

데이터를 Amazon S3로 내보내려고 할 때 연결 문제가 발생하면 먼저 DB 인스턴스에 연결된 VPC 보안 그룹의 아웃바운드 액세스 규칙이 네트워크 연결을 허용하는지 확인합니다. 특히 보안 그룹에는 DB 인스턴스가 TCP 트래픽을 포트 443 및 IPv4 주소(0.0.0.0/0)로 보낼 수 있도록 허용하는 규칙이 있어야 합니다. 자세한 내용은 [보안 그룹을 생성하여 VPC 내부의 DB 인스턴스에 대한 액세스를 제공](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)을 참조하세요.

권장 사항은 다음을 참조하세요.
+ [Amazon RDS 자격 증명 및 액세스 문제 해결](security_iam_troubleshoot.md)
+ [Amazon Simple Storage Service 사용 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshooting.html)의 *Amazon S3 문제 해결*
+ *IAM 사용 설명서*의 [Amazon S3 문제 해결 및 IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_iam-s3.html)