GOでCSV import ~ 準備編

タム

2023.04.06

23

こんにちは。タムです。

今回から数回に渡り、自分が行ったGOを使ったCSVインポートの実装について紹介していきたいと思います。

第一回目の今日は、具体的な実装の中身に入る前に、前提知識的なお話です。

アプリケーション概要

既に1レコード単位で登録する画面は存在するが、

1個1個手作業で登録するのは手間なのでCSVで一括で登録したい、

というよくあるケースを想定しています。


1レコードごとに取り込んでいきます。

「1レコードごと」という部分がミソです。


単純にテーブルに取り込むだけならバルクインサートのほうが早いのですが、

処理が複雑かつ1レコード単位の登録処理については確立しているという想定のため、

CSV取り込みの機能拡張にあたっては既存処理を流用できるよう1レコード単位で取り込みます。


レコード数については多くて千件程度くらいのイメージです。

インフラ構成

今回は上記のような構成を考えます。

  1. 画面からS3にCSVをアップロード
  2. S3からSQS(FIFO)にイベント通知
  3. LambdaでSQSのイベントを取り出す
  4. LambdaからS3に配置してあるCSVをダウンロードしてインポート処理を実行する

CSVの件数もそこまで多くないため、Lambdaの実行時間等の制約を考えても問題ないだろうという判断です。


S3から直接Lambdaでもいいのですが、実行順を保証したいのと、複数ファイルを同時実行したいため

SQS(FIFO)を使用しています。


なお、上記において画面やインポートされるDB等の構成は省略しています。


実際にはVPCにあるDB等にアクセスする必要があるためLambdaをVPCに配置する必要があります。

そのため、S3やSQSなどはVPC Endpointを通してアクセスします。

さいごに

今回は、GOを使ったCSVインポートの事前準備的なお話でした。

まだGOについては全く触れていませんが、次回以降はGOの話になりますので、ご期待ください!

この記事をシェアする