AWS GlueでS3→RDSへのETLを実施するメモ

目的

  • AWS Glueを使ってS3からRDSへのETLを実施したい
    • 結構ハマったので解決方法のメモ

AWS Glueとは

  • マネージドな(サーバレスな)AWSのETLサービス
  • データソースからデータターゲットにいい感じにデータを入れてくれる(かなり自動でやってくれる)
  • スクリプトを書いて微調整することも可能

aws.amazon.com

扱えるデータソース、データターゲット

ETL処理について

  • AWSのデータをETLする際、上記データソース、データターゲットであればAWS Glueは選択肢に入ってくる
  • (最近まで知らなかったけど)ETLの代表的なソフトウェアembulkも検討したい(AWSのサービスではなく、fluentdのバッチ版のようなモノ)
    • マネージドじゃないけど。これも便利らしい

github.com

AWS GlueでRDSへのETLする際、個人的ハマりポイント

  • AWS GlueからVPC内にあるRDSにアクセスする場合、RDSが存在するVPCに対して、S3のエンドポイントが必要
    • 以下参考

stackoverflow.com

docs.aws.amazon.com

概要

  • S3に入っているデータをRDSにETLしたい
    • S3に入っているCSVファイルをETLしてRDSにデータを入れたい!
  • 単にこれがやりたかったが、RDSにアクセスできなくて色々つまった
  • ちなみに、S3→S3のETLはすんなりいけた。しかしS3→RDSがだめ。
    • 以下、そのときのエラー
      • ちなみに、GlueのUIがちょっと不便で、エラー文章が一部見れなかったりして結構苦戦した f:id:y-ni-shi:20201129231009p:plain

エラー内容

  • つまり、「S3にアクセスできない」って言ってる
  • RDSにデータを入れたいのに、なんでS3にアクセスできないというエラーなのか?(個人的な予想です)

S3へのVPCエンドポイントを追加

  • AWSの公式に倣って、VPCのエンドポイントを追加 f:id:y-ni-shi:20201129232426p:plain
  • 対象のVPC(RDSが設置されているVPC)を選ぶ f:id:y-ni-shi:20201129232531p:plain
  • S3へのアクセスはとりあえずフルアクアスを付与(VPCなら誰でもアクセス可能) f:id:y-ni-shi:20201129232633p:plain

ETLする

  • 今回はCovid-19のデータを使用 www.stopcovid19.jp

  • 上記サイトからダウンロードしたCSVファイルをS3に入れ、AWS Glueを起動

    • RDSにデータが入っていることを確認
      • Glueが勝手に入れてくれた。
etl=> select * from results;
   name    | name_jp  | n_patients | n_currentpatients | n_exits | n_deaths | n_heavycurrentpatients | n_unknowns | n_inspections | year | month 
-----------+----------+------------+-------------------+---------+----------+------------------------+------------+---------------+------+-------
 Hokkaido  | 北海道   |       7766 |              2300 |    5302 |      164 |                     21 |          0 |        135619 | 2020 | 11
 Aomori    | 青森県   |        285 |                16 |     263 |        6 |                      2 |          0 |          6480 | 2020 | 11
 Iwate     | 岩手県   |        162 |                98 |      76 |        1 |                      1 |         13 |          8650 | 2020 | 11
 Miyagi    | 宮城県   |       1147 |               193 |     945 |        9 |                      8 |          0 |         18374 | 2020 | 11
 Akita     | 秋田県   |         84 |                13 |      70 |        1 |                      0 |          0 |          3476 | 2020 | 11
 Yamagata  | 山形県   |        111 |                13 |      97 |        1 |                      1 |          0 |          7374 | 2020 | 11
 Fukushima | 福島県   |        486 |                60 |     420 |        6 |                      5 |          0 |         38699 | 2020 | 11
 Ibaraki   | 茨城県   |       1397 |               337 |    1041 |       19 |                      8 |          0 |         16254 | 2020 | 11
 Tochigi   | 栃木県   |        599 |                79 |     520 |        2 |                      6 |          2 |         52797 | 2020 | 11
 Gunma     | 群馬県   |       1117 |               125 |     941 |       21 |                      2 |         30 |         35056 | 2020 | 11
 Saitama   | 埼玉県   |       8002 |              1175 |    6690 |      137 |                     27 |          0 |        228115 | 2020 | 11
 Chiba     | 千葉県   |       6644 |               775 |    5783 |       86 |                     11 |          0 |        159758 | 2020 | 11
 Tokyo     | 東京都   |      39079 |              3781 |   34813 |      485 |                     60 |          0 |        736409 | 2020 | 11
 Kanagawa  | 神奈川県 |      11894 |              1301 |   10404 |      189 |                     64 |          0 |        246225 | 2020 | 11
 Niigata   | 新潟県   |        325 |               101 |     224 |        0 |                      0 |          0 |         21833 | 2020 | 11
 Toyama    | 富山県   |        450 |                18 |     406 |       26 |                      0 |          0 |         16763 | 2020 | 11
 Ishikawa  | 石川県   |        843 |                14 |     780 |       49 |                      0 |          0 |         21257 | 2020 | 11

まとめ

  • S3→RDSへのETLをAWSコンソールだけで(何もコードをかかずに)実行できた。
  • RDSへアクセスするためにはVPCエンドポイントを利用する必要がある
  • Glueは便利

参考にさせていただいたサイト

system.blog.uuum.jp