Slide 1

Slide 1 text

RDS Proxy? なにそれ おいしいの?? 2022/10/29 JAWS-UG⻘森 2022 Autumn 1

Slide 2

Slide 2 text

自己紹介 鈴⽊ 健⽃ ( Suzuki Kento ) Twitter︓ @k_suzuki_pnx 所属︓アイレット株式会社 お仕事︓ AWSのインフラ構築・運⽤ 経歴︓ ・新卒 3 年⽬(エンジニア歴 = 社会⼈歴) ・2022 APN ALL AWS Certifications Engineer ・2022 APN AWS Top Engineer ・JAWS DAYS 2022 で発表 「S3の話をしよう ~ S3のコストとセキュリティについて考える ~」 2

Slide 3

Slide 3 text

自己紹介 鈴⽊ 健⽃ ( Suzuki Kento ) Twitter︓ @k_suzuki_pnx 所属︓アイレット株式会社 お仕事︓ AWSのインフラ構築・運⽤ 経歴︓ ・新卒 3 年⽬(エンジニア歴 = 社会⼈歴) ・2022 APN ALL AWS Certifications Engineer ・2022 APN AWS Top Engineer ・JAWS DAYS 2022 で発表 「S3の話をしよう ~ S3のコストとセキュリティについて考える ~」 3

Slide 4

Slide 4 text

4 RDS Proxy

Slide 5

Slide 5 text

5 先月の私

Slide 6

Slide 6 text

6 普段、業務で構築依頼を受ける中で お客様からこんな構成図を渡されることが…

Slide 7

Slide 7 text

7

Slide 8

Slide 8 text

8 RDS Proxy を入れないとダメでしょ!

Slide 9

Slide 9 text

9 Lambda から RDS へ 接続したい RDS Proxy を使おう︕ Lambda → RDS 直接接続するのは アンチパターン

Slide 10

Slide 10 text

10 ちょっと待った!

Slide 11

Slide 11 text

11 Lambda から RDS へ 接続したい RDS Proxy を使おう︕ Lambda → RDS 直接接続するのは アンチパターン なぜ アンチパターンなのか︖ なぜ RDS Proxy を使うのか︖

Slide 12

Slide 12 text

12 この 2 つの解説を通して、 RDS Proxy を理解してみよう! なぜ アンチパターンなのか︖ なぜ RDS Proxy を使うのか︖ 目的

Slide 13

Slide 13 text

13 Lambda → RDS アンチパターン

Slide 14

Slide 14 text

14 前提︓Lambda の仕組み 呼び出されるたびにコンテナを作成し処理を実⾏ (マイクロVM) Lambda コンテナ (マイクロVM) 呼び出し

Slide 15

Slide 15 text

15 Lambda で RDS にログインして処理を実⾏ DBコネクションが張られる Lambda が実⾏される頻度が少なければ問題なし

Slide 16

Slide 16 text

16 DBコネクションが張られる RDS の最⼤同時接続数の制限に引っかかる RDS へログインする Lambda が 何度も 実⾏される エラー Lambdaコンテナ

Slide 17

Slide 17 text

17 じゃあ、 max_connections パラメーターで 最大接続の上限を上げればいいじゃん

Slide 18

Slide 18 text

18

Slide 19

Slide 19 text

19 なぜ max_connections のパラメータが存在しているか ( max_connections の変更が推奨されない理由) メモリの逼迫を避けるため コネクションを作るにはメモリを使用

Slide 20

Slide 20 text

20 コネクションをプーリングする何か必要がある ? Lambdaコンテナ

Slide 21

Slide 21 text

21 RDS Proxy そこで現れたのは

Slide 22

Slide 22 text

22 コネクションを指定した期間使い回すことができる

Slide 23

Slide 23 text

23 ここでまた疑問が浮上

Slide 24

Slide 24 text

24 ポーリングといえば SQS がいるじゃないか SQS じゃダメなの?

Slide 25

Slide 25 text

25 ダメじゃない。だけど... ・Lambda 実⾏されるの量によっては上限に引っかかる可能性はある ・⾯倒 定期的に SQS からキューを 取り出すワーカーが必要

Slide 26

Slide 26 text

26 RDS Proxy はおいしい

Slide 27

Slide 27 text

27 完

Slide 28

Slide 28 text

28 実際に使ってみて気づいた点

Slide 29

Slide 29 text

29 その1 AWS Secrets Manager が必須

Slide 30

Slide 30 text

30 AWS Secrets Manager とは 特徴 ・シークレットのセキュアなストレージ ・アプリケーションに悪影響を与えずにシークレットを⾃動ローテーション ・複数の AWS リージョンへのシークレットの⾃動レプリケーション ・プログラムでのシークレットの取得 ・シークレットの使⽤状況の監査と監視 ・シークレットあたり 0.4 USD/⽉ & 10,000 件の API コールあたり0.05USD DBの接続情報やAPIキーなど、 各種機密情報の管理を楽にするマネージドサービス

Slide 31

Slide 31 text

31 必須なのです

Slide 32

Slide 32 text

32 具体的に何を入力するの? ・ユーザー名 ・パスワード ・DB エンジン ・RDS ホスト名 ・ポート番号 ・DB クラスター名

Slide 33

Slide 33 text

33 その2 AWS 環境のどこかでパスワード情報を 管理する必要がある

Slide 34

Slide 34 text

34 RDS Proxy が入ると RDS には IAM 認証情報を⽤いてログインすることが可能 ・AWS の内部でパスワードを管理する必要がない ・EC2 や ECS などに紐づいた IAM Role を⽤いて DB にログインできる IAM Role パスワードなしでログイン

Slide 35

Slide 35 text

35 RDS Proxy が入ると Secret Manager でパスワードを管理する必要がある ・Lambda → RDS Proxy 間、もしくは RDS Proxy → RDS 間はパスワード認証を⽤いる IAM Role IAM認証 パスワード認証 Secret Manager 参考:Amazon RDS Proxy の使⽤ https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/rds-proxy.html

Slide 36

Slide 36 text

36 その3 権限管理をちゃんとしていないと シークレットが見えてしまう

Slide 37

Slide 37 text

37 ・不⽤意に IAM ユーザにadmin 権限を付与するのは NG ・「リソースのアクセス許可」は⼊れておく

Slide 38

Slide 38 text

38 まとめ

Slide 39

Slide 39 text

39 Lambda と RDS と聞いたら RDS Proxy を思い浮かべられるよう周りに布教をお願いします

Slide 40

Slide 40 text

40 脳死で Lambda → RDS は ダメ。ゼッタイ。