Fargate用にRDS Proxyを作成


# はじめに
FargateにRDS Proxyを使用する機会があったため、手順をまとめます。
RDS Proxyについてはこちら↓
>Amazon RDS Proxy を使用すると、アプリケーションでデータベース接続をプールおよび共有して、アプリケーションのスケーリング能力を向上させることができます。RDS Proxy は、アプリケーション接続を維持しながらスタンバイ DB インスタンスに自動的に接続することで、データベースの障害に対するアプリケーションの耐障害性を高めます。RDS プロキシを使用すると、データベースにAWS Identity and Access Management（IAM）認証を適用し、クレデンシャルをAWS Secrets Managerに安全に保存することもできます。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/rds-proxy.html

https://aws.amazon.com/jp/rds/proxy/

コネクションプーリングはこちらがわかりやすいです↓

https://dev.classmethod.jp/articles/20200626-abou-rds-proxy/


![スクリーンショット 2022-07-29 18.57.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/329a2f3b-586b-623e-6cae-c747cdae01b8.png)
ちなみに、VPCEndpointは、RDSProxy作成時、自動で作成されます。


# 現在のProxy対象のDB

- RDS for MySQL- MySQL 5.6、5.7 および 8.0
- RDS for PostgreSQL –バージョン 10.10 以降のマイナーバージョン、バージョン 11.5 以降のマイナーバージョン、およびバージョン 12.5 以降のマイナーバージョン
- 上記のAuroraも対象です。

# 事前構築
- Aurora MySQL 5.6
- fargate

構築は、`ALB→fargate→Aurora`という流れになります。
Proxyを導入すると、`ALB→fargate→Proxy→Auroa`という構築になります。

下記記事を参考にしました。

https://qiita.com/holdout0521/items/bde67b8334f3362c8009



# Secrets Managerを作成
RDSのデータベース認証情報のSecretsを作成します。
Auroraの`マスターユーザー`と`マスターパスワード`を入力します。
暗号キーは、デフォルトの`DefaultEncryptionKey or aws/secretsmanagager`でよいです。

![スクリーンショット 2022-02-11 18.36.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/5bdf61e1-6847-f24c-6b3e-b969c95cc779.png)
![スクリーンショット 2022-02-11 18.37.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/ee09b34b-3df1-e9db-dbcd-824909f184bb.png)
自動ローテーションを設定は、しなくてよいです。
![スクリーンショット 2022-02-11 18.38.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/86ef2d7f-64cd-b8a0-7706-c43adc05e666.png)


# Proxyのセキュリティーグループを作成
ProxyとAuroraのSGのを設定します。
基本的に、`ALB→fargate→Proxy→Auroa`という流れですので、ProxyとAuroraのインバウンド設定が必要です。
fargate(サーバー)のSGは、ELBのみ許可しています。

|設定  |タイプ|ポート|ソース|
|---|---|---|---|
| fargate | カスタムTCP |80|ALBのSG|
| Proxy | MySQL/Aurora |3306|fargateのSG|
| Aurora | MySQL/Aurora |3306|ProxyのSG|


# Proxyを作成
Proxyを作成します
![スクリーンショット 2022-02-11 18.52.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/ce83cb58-1d46-f070-6c58-f9d64618b16c.png)

-　`データベース`：`作成済みのAurora`
-　`リーダーエンドポイント`：`含める`
- `Secrets Manager シークレット`：`先程作成したSecrets`
- `IAM ロール`：`IAM ロールを作成`（Secretsが使えるように、Proxy用のIAMロールを作成してくれる）
- `IAM 認証`：`無効`（IAMロールのみの認証になる）
- `サブネット`：`RDSに割り当てたサブネットグループと同じ物を選択します`
- `VPC セキュリティグループ`：`先程作成したSG`

![スクリーンショット 2022-02-11 18.53.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/0029d6bd-532b-e735-d141-55d156087476.png)
![スクリーンショット 2022-02-11 18.54.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/ca8d55fc-74d6-8f3c-0ab9-c2f44d402fc9.png)

サブネットは、auroraと同じprivate subnetを選択してください

ライターとリーダーエンドポイントが作成されるため、fargateの接続先エンドポイントを修正し、デプロイすると、Proxyに接続できます！

ライターとリーダーエンドポイント作成時、VPCEndpoint2つ自動で作成されます。

# 料金
Auroraのうち、2vCPU以下の低スペックの場合、RDSProxy自体は、
0.018USD * 2 * 24 * 31 = `26.7$`月にかかります。
ただし、VPUEndPointsも自動で作成されるため、 0.014USD * 24 * 31 = `10.4$`月にかかります。
(リーダーエンドポイントも作成すると、２倍の `20.8$` 月にかかります。)

なかなかのコストがかかりますね。

https://aws.amazon.com/jp/rds/proxy/pricing/

https://aws.amazon.com/jp/privatelink/pricing/


# CloudWatchメトリクス
Proxyのメトリクス一覧はこちら↓

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/rds-proxy.monitoring.html

# 参考

https://ohwhsmm7.blog.fc2.com/blog-entry-597.html