タム
2023.04.06
150
こんにちは。タムです。
今回から数回に渡り、自分が行ったGOを使ったCSVインポートの実装について紹介していきたいと思います。
第一回目の今日は、具体的な実装の中身に入る前に、前提知識的なお話です。
既に1レコード単位で登録する画面は存在するが、
1個1個手作業で登録するのは手間なのでCSVで一括で登録したい、
というよくあるケースを想定しています。
1レコードごとに取り込んでいきます。
「1レコードごと」という部分がミソです。
単純にテーブルに取り込むだけならバルクインサートのほうが早いのですが、
処理が複雑かつ1レコード単位の登録処理については確立しているという想定のため、
CSV取り込みの機能拡張にあたっては既存処理を流用できるよう1レコード単位で取り込みます。
レコード数については多くて千件程度くらいのイメージです。
今回は上記のような構成を考えます。
CSVの件数もそこまで多くないため、Lambdaの実行時間等の制約を考えても問題ないだろうという判断です。
S3から直接Lambdaでもいいのですが、実行順を保証したいのと、複数ファイルを同時実行したいため
SQS(FIFO)を使用しています。
なお、上記において画面やインポートされるDB等の構成は省略しています。
実際にはVPCにあるDB等にアクセスする必要があるためLambdaをVPCに配置する必要があります。
そのため、S3やSQSなどはVPC Endpointを通してアクセスします。
今回は、GOを使ったCSVインポートの事前準備的なお話でした。
まだGOについては全く触れていませんが、次回以降はGOの話になりますので、ご期待ください!