

# Amazon S3 から Aurora PostgreSQL DB クラスター にデータをインポートする
<a name="USER_PostgreSQL.S3Import"></a>

Amazon Simple Storage Service を使用して保存されたデータを、Aurora PostgreSQL DB クラスターインスタンス 上のテーブルにインポートできます。これを行うには、Aurora PostgreSQL `aws_s3`拡張機能を最初にインストールします。この拡張機能には、Amazon S3 バケットからのデータのインポートに使用する関数が含まれます。*バケット*とは、Amazon S3 のオブジェクトおよびファイルのコンテナです。データは、カンマ区切り値 (CSV) ファイル、テキストファイル、または圧縮 (gzip) ファイルでインポートできます。次に、拡張機能のインストール方法と、Amazon S3 からテーブルにデータをインポートする方法について説明します。

Amazon S3 から にインポートするには、データベースで PostgreSQL バージョン 10.7 以降を実行している必要があります。Aurora PostgreSQL 

Amazon S3 にデータが保存されていない場合は、まずバケットを作成し、データを保存する必要があります。詳細については、*Amazon Simple Storage Service コンソールユーザーガイド*の以下のトピックを参照してください。
+ [バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)
+ [バケットにオブジェクトを追加する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#uploading-an-object-bucket) 

Amazon S3 からのクロスアカウントインポートがサポートされています。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[クロスアカウントアクセス許可の付与](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)」を参照してください。

S3 からデータをインポートする際は、カスタマーマネージドキーを暗号化に使用できます。詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[AWS KMS に保存される KMS キー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)」を参照してください。

**注記**  
Amazon S3 からデータをインポートすることは、Aurora Serverless v1 でサポートされていません。Aurora Serverless v2 に対してサポートされています。

**Topics**
+ [

# aws\$1s3 拡張機能のインストール
](USER_PostgreSQL.S3Import.InstallExtension.md)
+ [

# Amazon S3 データからのデータのインポートの概要
](USER_PostgreSQL.S3Import.Overview.md)
+ [

# Amazon S3 バケットへのアクセスを設定する
](USER_PostgreSQL.S3Import.AccessPermission.md)
+ [

# Amazon S3 から Aurora PostgreSQL DB クラスター にデータをインポートする
](USER_PostgreSQL.S3Import.FileFormats.md)
+ [

# 関数リファレンス
](USER_PostgreSQL.S3Import.Reference.md)

# aws\$1s3 拡張機能のインストール
<a name="USER_PostgreSQL.S3Import.InstallExtension"></a>

Aurora PostgreSQL DB クラスター で Amazon S3 を使用する前に、`aws_s3` 拡張機能をインストールする必要があります。この拡張機能には、Amazon S3 からデータをインポートするための関数が含まれます。また、Aurora PostgreSQL DB クラスターのインスタンス から Amazon S3 バケットへデータをエクスポートするための関数も含まれています。詳しくは、「[Aurora PostgreSQL DB クラスターから Amazon S3 へのデータのエクスポート](postgresql-s3-export.md)」を参照してください。`aws_s3` 拡張機能は `aws_commons` 拡張機能の一部のヘルパー関数に依存しており、必要に応じて自動的にインストールされます。

**`aws_s3` 拡張機能をインストールするには**

1. `rds_superuser` 権限があるユーザーとして、psql (または pgAdmin) を使用して Aurora PostgreSQL DB クラスターのライターインスタンス に接続します。設定プロセス中にデフォルトの名前を保持している場合は、`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 にエクスポートするための関数が使用できるようになりました。

# Amazon S3 データからのデータのインポートの概要
<a name="USER_PostgreSQL.S3Import.Overview"></a>

**S3 データを Aurora PostgreSQL にインポートするには**

まず、関数で指定する必要がある詳細情報を収集します。この情報には、Aurora PostgreSQL DB クラスターのインスタンス のテーブルの名前、バケット名、ファイルパス、ファイルタイプ、Amazon S3 データが保存される AWS リージョンが含まれます。詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[オブジェクトの表示](https://docs.aws.amazon.com/AmazonS3/latest/userguide/OpeningAnObject.html)」を参照してください。
**注記**  
Amazon S3 からのマルチパートデータインポートは現在サポートされていません。

1. `aws_s3.table_import_from_s3` 関数によってデータがインポートされるテーブルの名前を取得します。例えば、次のコマンドにより、後の手順で使用されるテーブル `t1` が作成されます。

   ```
   postgres=> CREATE TABLE t1 
       (col1 varchar(80), 
       col2 varchar(80), 
       col3 varchar(80));
   ```

1. Amazon S3 バケットの詳細とインポートするデータを取得します。これを実行するには、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開き、**[Bucket]** (バケット) を選択します。リストで、データを含むバケットを探します。バケットを選択し、オブジェクト概要ページを開き、[Properties] (プロパティ) を選択します。

   バケット名、パス、AWS リージョン、およびファイルタイプを書き留めておきます。IAM ロールによる Amazon S3 へのアクセスを設定するには、後で Amazon リソースネーム (ARN) が必要になります。詳細については、「[Amazon S3 バケットへのアクセスを設定する](USER_PostgreSQL.S3Import.AccessPermission.md)」を参照してください。次のイメージは例を示しています。  
![\[Amazon S3 バケット内のファイルオブジェクトの画像。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/images/aws_s3_import-export_s3_bucket-info.png)

1. AWS CLI コマンド `aws s3 cp` を使用して、Amazon S3 バケットのデータへのパスを確認できます。情報が正しい場合、このコマンドは Amazon S3 ファイルのコピーをダウンロードします。

   ```
   aws s3 cp s3://amzn-s3-demo-bucket/sample_file_path ./ 
   ```

1. Aurora PostgreSQL DB クラスター に対するアクセス許可を設定して、Amazon S3 バケット上のファイルへのアクセスを許可します。これを行うには、AWS Identity and Access Management (IAM) ロールまたはセキュリティ認証情報を使用します。詳しくは、「[Amazon S3 バケットへのアクセスを設定する](USER_PostgreSQL.S3Import.AccessPermission.md)」を参照してください。

1. 収集したパスと他の Amazon S3 オブジェクトの詳細 (ステップ 2 を参照) を `create_s3_uri` 関数で指定し、Amazon S3 URI オブジェクトを構成します。この関数の詳細については、「[aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri)」を参照してください。psql セッション中にこのオブジェクトを構成する例は次のとおりです。

   ```
   postgres=> SELECT aws_commons.create_s3_uri(
      'docs-lab-store-for-rpg',
      'versions_and_jdks_listing.csv',
      'us-west-1'
   ) AS s3_uri \gset
   ```

   次のステップでは、このオブジェクト (`aws_commons._s3_uri_1`) を `aws_s3.table_import_from_s3` 関数に渡して、データをテーブルにインポートします。

1. `aws_s3.table_import_from_s3` 関数を呼び出して、Amazon S3 からテーブルにデータをインポートします。参考情報については、「[aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3)」を参照してください。例については「[Amazon S3 から Aurora PostgreSQL DB クラスター にデータをインポートする](USER_PostgreSQL.S3Import.FileFormats.md)」を参照してください。

# Amazon S3 バケットへのアクセスを設定する
<a name="USER_PostgreSQL.S3Import.AccessPermission"></a>

Amazon S3 ファイルからデータをインポートするには、Aurora PostgreSQL DB クラスターに、ファイルが含まれている Amazon S3 バケットへのアクセス許可を与える必要があります。次のトピックで説明する 2 つの方法のいずれかで、Amazon S3 バケットへのアクセスを提供します。

**Topics**
+ [

## IAM ロールを使用した Amazon S3 バケットへのアクセス
](#USER_PostgreSQL.S3Import.ARNRole)
+ [

## セキュリティ認証情報を使用して Amazon S3 バケットにアクセスする
](#USER_PostgreSQL.S3Import.Credentials)
+ [

## Amazon S3 へのアクセスのトラブルシューティング
](#USER_PostgreSQL.S3Import.troubleshooting)

## IAM ロールを使用した Amazon S3 バケットへのアクセス
<a name="USER_PostgreSQL.S3Import.ARNRole"></a>

Amazon S3 ファイルからデータをロードするには、ファイルが含まれる Amazon S3 バケットへのアクセス許可を Aurora PostgreSQL DB クラスターに与えます。こうすれば、追加の認証情報を管理したり、[aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 関数呼び出しで提供したりする必要はありません。

これを行うには、Amazon S3 バケットへのアクセスを提供する IAM ポリシーを作成します。IAM ロールを作成して、ポリシーをロールにアタッチします。次に、IAM ロールを DB クラスターに割り当てます。

**注記**  
IAM ロールを Aurora Serverless v1 DB クラスターに関連付けることができないため、次の手順は適用されません。

**IAM ロールを使用して、Amazon S3 へのアクセス権を Aurora PostgreSQL DB クラスター に付与するには**

1. IAM ポリシーを作成します。

   ポリシーは、Aurora PostgreSQL DB クラスターに Amazon S3 へのアクセスを許可するバケットとオブジェクトのアクセス許可を付与します。

   ポリシーに、Amazon S3 バケットから Aurora PostgreSQL へのファイル転送を許可ための次の必須アクションを含めます。
   + `s3:GetObject` 
   + `s3:ListBucket` 

   ポリシーに次のリソースを含めて、Amazon S3 バケットとバケット内のオブジェクトを識別します。これは、Amazon S3 にアクセスするための Amazon リソースネーム (ARN) 形式を示しています。
   + arn:aws:s3:::*amzn-s3-demo-bucket*
   + arn:aws:s3:::*amzn-s3-demo-bucket*/\$1

   Aurora PostgreSQL の IAM ポリシーの作成の詳細については、「[IAM データベースアクセス用の IAM ポリシーの作成と使用](UsingWithRDS.IAMDBAuth.IAMPolicy.md)」を参照してください。*IAM ユーザーガイド*の「[チュートリアル: はじめてのカスタマー管理ポリシーの作成とアタッチ](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html)」も参照してください。

   以下の AWS CLI コマンドでは、これらのオプションを指定して、`rds-s3-import-policy` という名前の IAM ポリシーを作成します。*amzn-s3-demo-bucket* という名前のバケットへのアクセスを許可します。
**注記**  
このコマンドによって返されるポリシー のAmazon リソースネーム (ARN) をメモしておきます。ポリシーを IAM ロールにアタッチする場合、後続のステップで ARN が必要です。  
**Example**  

   Linux、macOS、Unix の場合:

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

   Windows の場合:

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

1. IAM ロールを作成します。

   これを行うと、Aurora PostgreSQL がユーザーに代わってこの 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)に対する最も効果的な保護方法です。

   グローバル条件コンテキストキーの両方を使用し、`aws:SourceArn` の値にアカウント ID が含まれている場合、同じポリシーステートメントで使用する場合は、`aws:SourceArn` の値と `aws:SourceAccount` の値のアカウントでは同じアカウント ID を使用する必要があります。
   + 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
   + そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

   ポリシーでは、必ずリソースの完全な ARN を持つ `aws:SourceArn` グローバル条件コンテキストキーを使用してください。以下の例は、AWS CLI コマンドを使用して、`rds-s3-import-role` という名前のロールを作成する方法を示しています。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws iam create-role \
      --role-name rds-s3-import-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:cluster:clustername"
                   }
                }
          }
        ] 
      }'
   ```

   Windows の場合:

   ```
   aws iam create-role ^
      --role-name rds-s3-import-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:cluster:clustername"
                   }
                }
          }
        ] 
      }'
   ```

1. 作成した IAM ポリシーを、作成した IAM ロールにアタッチします。

   次の AWS CLI コマンドは、先ほどのステップで作成したポリシーを `rds-s3-import-role` という名前のロールに添付し、`your-policy-arn` を前のステップでメモしたポリシー ARN に置き換えます。  
**Example**  

   Linux、macOS、Unix の場合:

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

   Windows の場合:

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

1. DB クラスターに IAM ロールを追加します。

   これを行うには、以下で説明するように、AWS マネジメントコンソール または AWS CLI を使用します。

### コンソール
<a name="collapsible-section-1"></a>

**コンソールを使用して PostgreSQL DB クラスターの IAM ロールを追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. 詳細を表示するには、PostgreSQL DB クラスターの名前を選択します。

1. [**接続とセキュリティ**] タブの [**IAM ロールの管理**] セクションで、**このクラスターに [IAM ロールを追加**] で追加するロールを選択します。

1. [**Feature**] で、[**s3Import**] を選択します。

1. [**Add role**] を選択します。

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

**CLI を使用して PostgreSQL DB クラスターの IAM ロールを追加するには**
+ 次のコマンドを使用して、`my-db-cluster` という名前の PostgreSQL DB クラスターにロールを追加します。*`your-role-arn`* を、以前のステップで書き留めたロール ARN に置き換えます。`s3Import` オプションの値に `--feature-name` を使用します。  
**Example**  

  Linux、macOS、Unix の場合:

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

  Windows の場合:

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

### RDS API
<a name="collapsible-section-3"></a>

Amazon RDS API を使用して PostgreSQL DB クラスターに IAM ロールを追加するには、[AddRoleToDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AddRoleToDBCluster.html) オペレーションを呼び出します。

## セキュリティ認証情報を使用して Amazon S3 バケットにアクセスする
<a name="USER_PostgreSQL.S3Import.Credentials"></a>

必要に応じて、IAM ロールでアクセスを提供する代わりに、セキュリティ認証情報を使用して Amazon S3 バケットへのアクセスを提供できます このためには、[aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 関数呼び出しで `credentials` パラメータを指定します。

`credentials` パラメータは、型の構造体 `aws_commons._aws_credentials_1` で、AWS 認証情報を含みます。[aws\$1commons.create\$1aws\$1credentials](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_aws_credentials) 関数を使用して、`aws_commons._aws_credentials_1` 構造でアクセスキーおよびシークレットキーを設定します。以下に例を示します。

```
postgres=> SELECT aws_commons.create_aws_credentials(
   'sample_access_key', 'sample_secret_key', '')
AS creds \gset
```

`aws_commons._aws_credentials_1 ` 構造を作成したら、以下に示すように、[aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 関数を `credentials` パラメータと共に使用してデータをインポートします。

```
postgres=> SELECT aws_s3.table_import_from_s3(
   't', '', '(format csv)',
   :'s3_uri', 
   :'creds'
);
```

または、[aws\$1commons.create\$1aws\$1credentials](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_aws_credentials) 関数の呼び出しのインラインを `aws_s3.table_import_from_s3` 関数の呼び出し内に含めることもできます。

```
postgres=> SELECT aws_s3.table_import_from_s3(
   't', '', '(format csv)',
   :'s3_uri', 
   aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
```

## Amazon S3 へのアクセスのトラブルシューティング
<a name="USER_PostgreSQL.S3Import.troubleshooting"></a>

Amazon S3 からデータをインポートしようとしたときに接続の問題が発生した場合は、次の推奨事項を参照してください。
+ [Amazon Aurora のアイデンティティおよびアクセスのトラブルシューティング](security_iam_troubleshoot.md)
+ *Amazon Simple Storage Service ユーザーガイド* の「[Troubleshooting Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshooting.html)」
+ *IAM ユーザーガイド* の [Amazon S3 のトラブルシューティングと IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_iam-s3.html)

# Amazon S3 から Aurora PostgreSQL DB クラスター にデータをインポートする
<a name="USER_PostgreSQL.S3Import.FileFormats"></a>

aws\$1s3 拡張機能の `table_import_from_s3` 関数を使用して Amazon S3 バケットからデータをインポートします。参考情報については、「[aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3)」を参照してください。

**注記**  
以下の例では、IAM ロールメソッドを使用して、Amazon S3 バケットへのアクセスを許可します。したがって、`aws_s3.table_import_from_s3` 関数呼び出しには認証情報パラメータは含まれません。

次の例は、代表的な例を示しています。

```
postgres=> SELECT aws_s3.table_import_from_s3(
   't1',
   '', 
   '(format csv)',
   :'s3_uri'
);
```

パラメータは次のとおりです。
+ `t1` - データのコピー先となる PostgreSQL DB クラスター内のテーブルの名前。
+ `''` - データベーステーブル内の列のオプションのリスト。S3 データをコピーする列とテーブル列を指定するには、このパラメータを使用します。列を指定しない場合は、すべての列がテーブルにコピーされます。列のリストの使用例については、[カスタム区切り文字を使用する Amazon S3 ファイルをインポートする](#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter) を参照してください。
+ `(format csv)` - PostgreSQL COPY 引数。このコピープロセスでは、[PostgreSQL COPY](https://www.postgresql.org/docs/current/sql-copy.html) コマンドの引数と形式を使用してデータをインポートします。フォーマットとしては、この例のようなカンマ区切り値 (CSV)、テキスト、およびバイナリを指定できます。デフォルトではテキストに設定されています。
+  `s3_uri` - Amazon S3 ファイルを識別する情報を含む構造。[aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri) 関数を使用して `s3_uri` 構造を作成する例については、「[Amazon S3 データからのデータのインポートの概要](USER_PostgreSQL.S3Import.Overview.md)」を参照してください。

この関数の詳細については、「[aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3)」を参照してください。

この`aws_s3.table_import_from_s3`関数はテキストを返します。Amazon S3 バケットからインポートする他の種類のファイルを指定するには、次の例のいずれかを参照してください。

**注記**  
0 バイトファイルをインポートすると、エラーが発生します。

**Topics**
+ [

## カスタム区切り文字を使用する Amazon S3 ファイルをインポートする
](#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter)
+ [

## Amazon S3 圧縮 (gzip) ファイルをインポートする
](#USER_PostgreSQL.S3Import.FileFormats.gzip)
+ [

## エンコードされた Amazon S3 ファイルをインポートする
](#USER_PostgreSQL.S3Import.FileFormats.Encoded)

## カスタム区切り文字を使用する Amazon S3 ファイルをインポートする
<a name="USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter"></a>

以下の例では、カスタム区切り文字を使用するファイルのインポート方法を示します。また、`column_list` 関数の [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) パラメータを使用して、データベースのデータを置く場所を制御する方法を示します。

この例では、次の情報が Amazon S3 ファイル内のパイプ区切りの列に編成されているとします。

```
1|foo1|bar1|elephant1
2|foo2|bar2|elephant2
3|foo3|bar3|elephant3
4|foo4|bar4|elephant4
...
```

**カスタム区切り文字を使用するファイルをインポートするには**

1. インポートされたデータのテーブルをデータベースに作成します。

   ```
   postgres=> CREATE TABLE test (a text, b text, c text, d text, e text);
   ```

1. データを Amazon S3 からインポートするには、次の形式の [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) 関数を使用します。

   または、[aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri) 関数の呼び出しのインラインを `aws_s3.table_import_from_s3` 関数の呼び出し内に含めて、ファイルを指定することもできます。

   ```
   postgres=> SELECT aws_s3.table_import_from_s3(
      'test',
      'a,b,d,e',
      'DELIMITER ''|''', 
      aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'pipeDelimitedSampleFile', 'us-east-2')
   );
   ```

データが、次の列のテーブル内に入りました。

```
postgres=> SELECT * FROM test;
a | b | c | d | e 
---+------+---+---+------+-----------
1 | foo1 | | bar1 | elephant1
2 | foo2 | | bar2 | elephant2
3 | foo3 | | bar3 | elephant3
4 | foo4 | | bar4 | elephant4
```

## Amazon S3 圧縮 (gzip) ファイルをインポートする
<a name="USER_PostgreSQL.S3Import.FileFormats.gzip"></a>

以下の例では、gzip で圧縮されているファイルを Amazon S3 からインポートする方法を示します。インポートするファイルには、次の Amazon S3 メタデータが必要です。
+ キー: `Content-Encoding`
+ 値: `gzip`

AWS マネジメントコンソール を使用してファイルをアップロードする場合、通常このメタデータは、システムにより適用されます。AWS マネジメントコンソール、AWS CLI、または API による Amazon S3 へのファイルのアップロードについては、「*Amazon Simple Storage Service ユーザーガイド*」の「[オブジェクトのアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)」を参照してください。

Amazon S3 のメタデータに関する情報、およびシステム提供メタデータの詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[Amazon S3 コンソールでのオブジェクトメタデータの編集](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-object-metadata.html)」を参照してください。

以下に示されているように、gzip ファイルを Aurora PostgreSQL DB クラスターにインポートします。

```
postgres=> CREATE TABLE test_gzip(id int, a text, b text, c text, d text);
postgres=> SELECT aws_s3.table_import_from_s3(
 'test_gzip', '', '(format csv)',
 'amzn-s3-demo-bucket', 'test-data.gz', 'us-east-2'
);
```

## エンコードされた Amazon S3 ファイルをインポートする
<a name="USER_PostgreSQL.S3Import.FileFormats.Encoded"></a>

以下の例では、Windows-1252 でエンコードされているファイルを Amazon S3 からインポートする方法を示します。

```
postgres=> SELECT aws_s3.table_import_from_s3(
 'test_table', '', 'encoding ''WIN1252''',
 aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'SampleFile', 'us-east-2')
);
```

# 関数リファレンス
<a name="USER_PostgreSQL.S3Import.Reference"></a>

**Topics**
+ [

## aws\$1s3.table\$1import\$1from\$1s3
](#aws_s3.table_import_from_s3)
+ [

## aws\$1commons.create\$1s3\$1uri
](#USER_PostgreSQL.S3Import.create_s3_uri)
+ [

## aws\$1commons.create\$1aws\$1credentials
](#USER_PostgreSQL.S3Import.create_aws_credentials)

## aws\$1s3.table\$1import\$1from\$1s3
<a name="aws_s3.table_import_from_s3"></a>

Amazon S3 データを Aurora PostgreSQL テーブルにインポートします。`aws_s3` 拡張機能には、`aws_s3.table_import_from_s3` 関数が含まれます。戻り値はテキストです。

### 構文
<a name="aws_s3.table_import_from_s3-syntax"></a>

必須のパラメータは、`table_name`、`column_list`、`options` です。これらのパラメータを使用して、データベースを特定し、データをテーブルにコピーする方法を指定します。

また、次のパラメータを使用することもできます。
+ `s3_info` パラメータは、インポートする Amazon S3 ファイルを指定します。このパラメータを使用する場合、PostgreSQL DB クラスターの IAM ロールを使用して、Amazon S3 へのアクセス権を付与します。

  ```
  aws_s3.table_import_from_s3 (
     table_name text, 
     column_list text, 
     options text, 
     s3_info aws_commons._s3_uri_1
  )
  ```
+ `credentials` パラメータは、Amazon S3 にアクセスするための認証情報を指定します。このパラメータを使用する場合、IAM ロールは使用しません。

  ```
  aws_s3.table_import_from_s3 (
     table_name text, 
     column_list text, 
     options text, 
     s3_info aws_commons._s3_uri_1,
     credentials aws_commons._aws_credentials_1
  )
  ```

### パラメータ
<a name="aws_s3.table_import_from_s3-parameters"></a>

 *table\$1name*   
データのインポート先となる PostgreSQL データベーステーブルの名前を含む必須のテキスト文字列。

 *column\$1list*   
データをコピーする PostgreSQL データベーステーブル列のオプションリストを含む必須のテキスト文字列。文字列が空の場合、テーブルの列がすべて使用されます。例については、「[カスタム区切り文字を使用する Amazon S3 ファイルをインポートする](USER_PostgreSQL.S3Import.FileFormats.md#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter)」を参照してください。

 *オプション*   
PostgreSQL `COPY` コマンドの引数を含む必須のテキスト文字列。これらの引数は PostgreSQL のテーブルにデータをコピーする方法を指定します。詳細については、「[PostgreSQL COPY ドキュメント](https://www.postgresql.org/docs/current/sql-copy.html)」を参照してください。

 *s3\$1info*   
S3 オブジェクトに関する以下の情報を含む `aws_commons._s3_uri_1` 複合型。  
+ `bucket` - ファイルを含む Amazon S3 バケット名。
+ `file_path` - Amazon S3ファイルのパスを含むファイル名。
+ `region` - ファイルがある AWS リージョン。AWS リージョン名と関連する値のリストについては、「[リージョンとアベイラビリティーゾーン](Concepts.RegionsAndAvailabilityZones.md)」を参照してください。

 *credentials*   
インポートオペレーションに使用する次の認証情報を含む `aws_commons._aws_credentials_1` 複合型。  
+ アクセスキー
+ シークレットキー
+ セッショントークン
`aws_commons._aws_credentials_1` 複合構造を作成する方法については、「[aws\$1commons.create\$1aws\$1credentials](#USER_PostgreSQL.S3Import.create_aws_credentials)」を参照してください。

### 代替構文
<a name="aws_s3.table_import_from_s3-alternative-syntax"></a>

テストしやすいように、`s3_info` パラメータや `credentials` パラメータではなく、拡張されたパラメータセットを使用することができます。以下は、`aws_s3.table_import_from_s3` 関数の構文のバリエーションです。
+ Amazon S3 ファイルを識別するために `s3_info` パラメータを使用する代わりに、`bucket`、`file_path`、および `region` パラメータの組み合わせを使用します。この関数の形式を使用する場合は、PostgreSQL DB インスタンスの IAM ロールを使用して、Amazon S3 へのアクセス権を付与します。

  ```
  aws_s3.table_import_from_s3 (
     table_name text, 
     column_list text, 
     options text, 
     bucket text, 
     file_path text, 
     region text 
  )
  ```
+ Amazon S3 アクセスを指定するために `credentials` パラメータを使用する代わりに、`access_key`、`session_key`、および `session_token` パラメータの組み合わせを使用します。

  ```
  aws_s3.table_import_from_s3 (
     table_name text, 
     column_list text, 
     options text, 
     bucket text, 
     file_path text, 
     region text, 
     access_key text, 
     secret_key text, 
     session_token text 
  )
  ```

### 代替パラメータ
<a name="aws_s3.table_import_from_s3-alternative-parameters"></a>

*バケット*  
ファイルを含む Amazon S3 バケットの名前を含むテキスト文字列。

*file\$1path*  
ファイルのパスを含むAmazon S3ファイル名を含むテキスト文字列。

*リージョン*  
ファイルの AWS リージョンの場所を識別するテキスト文字列。AWS リージョン 名と関連する値のリストについては、「[リージョンとアベイラビリティーゾーン](Concepts.RegionsAndAvailabilityZones.md)」を参照してください。

*access\$1key*  
インポートオペレーションに使用するアクセスキーを含むテキスト文字列。デフォルトは NULL です。

*secret\$1key*  
インポートオペレーションに使用するシークレットキーを含むテキスト文字列。デフォルトは NULL です。

*session\$1token*  
(オプション) インポートオペレーションに使用するセッションキーを含むテキスト文字列。デフォルトは NULL です。

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

Amazon S3 ファイル情報を保持するように、`aws_commons._s3_uri_1` 構造を作成します。`aws_commons.create_s3_uri` 関数の結果は、`s3_info` 関数の [aws\$1s3.table\$1import\$1from\$1s3](#aws_s3.table_import_from_s3) パラメータで使用します。

### 構文
<a name="USER_PostgreSQL.S3Import.create_s3_uri-syntax"></a>

```
aws_commons.create_s3_uri(
   bucket text,
   file_path text,
   region text
)
```

### パラメータ
<a name="USER_PostgreSQL.S3Import.create_s3_uri-parameters"></a>

*バケット*  
ファイルの Amazon S3 バケット名を含む必須のテキスト文字列。

*file\$1path*  
ファイルのパスを含む Amazon S3 ファイル名を含む必須テキスト文字列。

*リージョン*  
ファイルがある AWS リージョン を含む必須のテキスト文字列。AWS リージョン 名と関連する値のリストについては、「[リージョンとアベイラビリティーゾーン](Concepts.RegionsAndAvailabilityZones.md)」を参照してください。

## aws\$1commons.create\$1aws\$1credentials
<a name="USER_PostgreSQL.S3Import.create_aws_credentials"></a>

`aws_commons._aws_credentials_1` 構造でアクセスキーとシークレットキーを設定します。`aws_commons.create_aws_credentials` 関数の結果は、`credentials` 関数の [aws\$1s3.table\$1import\$1from\$1s3](#aws_s3.table_import_from_s3) パラメータで使用します。

### 構文
<a name="USER_PostgreSQL.S3Import.create_aws_credentials-syntax"></a>

```
aws_commons.create_aws_credentials(
   access_key text,
   secret_key text,
   session_token text
)
```

### パラメータ
<a name="USER_PostgreSQL.S3Import.create_aws_credentials-parameters"></a>

*access\$1key*  
Amazon S3 ファイルのインポートに使用するアクセスキーを含む必須のテキスト文字列。デフォルトは NULL です。

*secret\$1key*  
Amazon S3 ファイルのインポートに使用するシークレットキーを含む必須のテキスト文字列。デフォルトは NULL です。

*session\$1token*  
Amazon S3 ファイルのインポートに使用するセッショントークンを含む必須のテキスト文字列。デフォルトは NULL です。オプションの `session_token` を指定した場合は、一時的な認証情報を使用することができます。