0
Help us understand the problem. What are the problem?

posted at

【Todo整理】S3にCsvUpload > Lambda起動 > Upしたファイル取得 > RDSへ登録

初めに

※雑なTodo整理・所感まとめです。詳細は各種公式サイトをご覧下さいm(_ _)m

Uploadしたcsvの情報を非同期な感じでデータベースに登録したくなったので、AWSの勉強がてら色々設定してみました。

インフラ準備

  • いずれterraform化したい
  • 所感、結構むずい。(主にVPN⇄RDS周りで)
    • 自分がAzure出身なので、慣れてないのもある
    • 恥ずかしながらCIDRってなんやっけ...??みたいになった
    • インフラ準備だけで1.5Dayぐらいかかった

S3,Lambda以外は下記ブログが非常に参考になりました、ありがとうございます!

VPC,EC2作成

登場人物はVPC,Subnet,ルートテーブル,インターネットゲートウェイ,ネットワークゲートACL,セキュリティグループ,EC2

(ちゃんとした構成図は書く気がないので省略、すみません)
以下概要

  • PublicSubnetにおいたEC2を踏み台にしてPrivateSubnetに置いたRDSに接続する構成
    • ローカルのClientソフト(DBeaver)からsshTunnelを通じて中身を見られるようになっています。
    • PublicSubnet1つ、PrivateSubnet2つ構成です(RDS生成時の都合でPrivateSubnet2つ)

DBeaverによるSSHTunnel参考

RDS作成

登場人物はDBインスタンス,DBサブネットグループ
MySQLインスタンスを作りました。

S3作成

登場人物はバケット(ぽちぽちして作るだけ)

Lambda作成

登場人物は関数,トリガー (ぽちぽちして作るだけ)

Lambda関数をコーディング

ワイは本来JVM系言語マンなので、JavaとかKotlinにする...?コンテナ化する...?と若干悩みましたが、最も使われてるとのことなのでpythonにしました。

ちょっと考えないといけないこと多そうだし...

この辺難しいですよね...実務で保守する人のスキル感もによって左右されそう。

書いたコードは下記です。

残Todo

  • 「csvのデータがテーブルに存在するかチェック」みたいなのを入れたい。
    • 今pymysqlだけで書いてるけど、都度SQL書くのめんどいのでSQLAlchemyみたいなORM入れたい

  • リアルタイム処理(APIとか)で登録されるデータとの整合性を考慮した上でデータ登録した時に
  • エラーハンドリング(csvの1レコードで処理失敗した時どうすんねん、など)

作業時に助かったツール

AWSのサブネット登録時、「既存のCIDRと被ってますよw」エラーに苦しめられました。
「じゃあどのIPなら被らないんだよ💢💢」となったのですが、下記サイトを使いながら被らないCIDRを設定することができました。(計算雑魚なので...)

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?