S3からAuroraへのデータインポート

## 背景
Athenaで処理していたデータをAuroraで管理するような仕様ができたので、S3からAuroraへのデータインポートを考え始めた。

## データインポート
Auraoの公式ドキュメントを参照すれば大体いけます。

[Amazon S3 バケットのテキストファイルから Amazon Aurora MySQL DB クラスターへのデータのロード \- Amazon Relational Database Service](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/AuroraMySQL.Integrating.LoadFromS3.html)

↑のドキュメントを簡単にまとめると、以下のことです。

- IAM policy作成（S3へのアクセス許可）
- IAM Role作成（AuroraからAWSへのアクセス許可）
- Auroraのparameter group設定
    - クラスターのparameter group（各インスタントの設定が同じなら、クラスターだけを設定すればOK）
    - 各インスタントのparameter group
- [Amazon Aurora MySQL から AWS の他のサービスへのネットワーク通信の有効化 \- Amazon Relational Database Service](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/AuroraMySQL.Integrating.Authorizing.Network.html)

## ハマったところ
[Amazon Aurora MySQL から AWS の他のサービスへのネットワーク通信の有効化 \- Amazon Relational Database Service](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/AuroraMySQL.Integrating.Authorizing.Network.html)

↑はわかりませんでしたので、無視した。そしたら、全然S3とつながらなかった。それはそうですね。Auroraはprivate vpcに置いてあるため、そのまま外のS3へのアクセスは不可能です。

### 対策
**endpointを作成**

VPC -> エンドポイント -> エンドポイント作成

![Screen Shot 2018-10-25 at 18.20.04.png](https://qiita-image-store.s3.amazonaws.com/0/37718/34ade2ad-fc79-b526-1b33-9fb5c21c0a84.png)


## 結果
以下のようにテストしました。

### テストデータ
- テーブルの作成

```sql
mysql> create table users_01(
    -> userid integer not null primary key,
    -> username char(8),
    -> firstname varchar(30),
    -> lastname varchar(30),
    -> city varchar(30),
    -> state char(2),
    -> email varchar(100),
    -> phone char(14),
    -> likesports varchar(100),
    -> liketheatre varchar(100),
    -> likeconcerts varchar(100),
    -> likejazz varchar(100),
    -> likeclassical varchar(100),
    -> likeopera varchar(100),
    -> likerock varchar(100),
    -> likevegas varchar(100),
    -> likebroadway varchar(100),
    -> likemusicals varchar(100));
Query OK, 0 rows affected (3.44 sec)
```

- txtファイルの用意

```sh
aws s3 cp allusers_pipe.txt s3://fout-fox-development/allusers_pipe.txt
```


- データインポート

```sql
mysql> LOAD DATA FROM S3 's3://fout-fox-development/allusers_pipe.txt'
    -> INTO TABLE users_01
    -> FIELDS TERMINATED BY '|'
    -> LINES TERMINATED BY '\n'
    -> (@var1, @var2, @var3, @var4, @var5, @var6, @var7, @var8, @var9, @var10, @var11, @var12, @var13, @var14, @var15, @var16, @var17, @var18)
    -> SET
    -> userid = @var1,
    -> username = @var2,
    -> firstname = @var3,
    -> lastname = @var4,
    -> city=@var5,
    -> state=@var6,
    -> email=@var7,
    -> phone=@var8,
    -> likesports=@var9,
    -> liketheatre=@var10,
    -> likeconcerts=@var11,
    -> likejazz=@var12,
    -> likeclassical=@var13,
    -> likeopera=@var14,
    -> likerock=@var15,
    -> likevegas=@var16,
    -> likebroadway=@var17,
    -> likemusicals=@var18;
Query OK, 49990 rows affected (8.81 sec)
Records: 49990  Deleted: 0  Skipped: 0  Warnings: 0
```

## パフォーマンス

## 参照
- [Amazon S3 バケットのテキストファイルから Amazon Aurora MySQL DB クラスターへのデータのロード \- Amazon Relational Database Service](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/AuroraMySQL.Integrating.LoadFromS3.html)
- [Bulk Load Data Files into Aurora RDS from S3 Bucket using AWS Data Pipeline \- Cloud IQ Tech](https://cloudiqtech.com/bulk-load-data-files-into-aurora-rds-from-s3-bucket/)
- [Timeouts Loading Data from S3 to Aurora – drew jess – Medium](https://medium.com/@hybby/timeouts-loading-data-from-s3-to-aurora-baa3d561f805)