初めに
※雑な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を設定することができました。(計算雑魚なので...)