Amazon RDSインスタンス作成時に既存EC2との紐付けができるようになっていた

# この記事は？
最近AWSについて色々と勉強しているんですが、RDSインスタンスを作成する際に『**EC2コンピューティングリソースに接続**』という選択肢が増えていることに気づきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/85c4f745-e507-0fc7-fce9-e72ef6b38efc.png)
調べてみると今年の8月に追加された機能とのこと。（[AWSニュースリリース](https://aws.amazon.com/jp/about-aws/whats-new/2022/08/amazon-rds-setting-up-connectivity-rds-database-ec2-compute-instance-1-click/)）
この機能を使うと具体的に何をしてくれるのかが気になったので調べてみました。

# そもそもAmazon RDSとは
AWS上に建てられるリレーショナルデータベースです。
詳細な説明は省きますが、ブラウザでポチポチ操作するだけでDBサーバ建てられるので便利です。

# インスタンス作成時の２つの選択肢について
- EC2 コンピューティングリソースに接続しない
- EC2 コンピューティングリソースに接続

この２つの選択肢はRDS/EC2間の接続の設定を手動で行うか否か、ということを現しています。従来であれば、配置するサブネットの準備やセキュリティグループなどなど様々な設定を自分で行う必要がありました。しかし、今回追加された『EC2 コンピューティングリソースに接続』を選択することで、[AWSのベストプラクティス](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html#USER_VPC.Scenario1)に沿って自動で構成してくれる、とのことです。

# 前提条件
以下のような環境にプライベートなRDSインスタンスを作成します。（ルートテーブルなど細かいものは表記割愛）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/995e4e5c-20a4-c598-2c5c-0bc30bddd4c2.png)


# インスタンス作成
ブラウザでポチポチとしてインスタンスを作成します。
『EC2 コンピューティングリソースに接続』を選んで、任意のEC2インスタンスを選択すればOKです。（画像はap-northeast-1aに建てたEC2インスタンスを選択）
![Pasted Graphic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/2d1aac4e-27ea-7978-609f-243bacb6206c.png)
サブネットグループは自動作成されるので選択不可。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/c4104421-32ff-73d6-e41f-3defa8b16f5b.png)


# 作成されたものを確認
### サブネット
RDSインスタンス作成後は以下のような構成になっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/768282bd-607c-226a-eccc-5faea9fdd7ba.png)
単純に同一AZ内にプライベートサブネットが１つ作成されてRDSインスタンスが起動するのかなと思っていたんですが、3AZでプライベートサブネットが作成され、それらでDBサブネットグループが構成されています。
![Pasted Graphic 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/b1de9a22-6d84-4b1c-3577-40fc7c0f1911.png)

マルチAZを想定してるのかな？と思って色々と調べてみたところ以下のような記載が。利用していないAZにもサブネットが作成されるのは仕様のようです。[引用(翻訳済)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html#USER_CreateDBInstance.Prerequisites.VPC.Automatic)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/f4bbcfb0-fd40-bdb0-c99e-53a499dbe311.png)

そもそも自分の勉強不足だったんですが、RDSの仕様として以下がありました。[引用](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html#Overview.RDSVPC.Create)
> VPC では、少なくとも 2 つのサブネットを指定する必要があります。これらのサブネットは、DB インスタンスをデプロイする AWS リージョン 内の 2 つの異なるアベイラビリティーゾーンに存在している必要があります。サブネットは、VPC の IP アドレス範囲の指定可能なセグメントで、セキュリティや運用上のニーズに基づいて DB インスタンスをグループ化することができます。
各 DB サブネットグループには、特定の AWS リージョン 内の少なくとも 2 つのアベイラビリティーゾーンにサブネットが必要です。DB サブネットグループから、Amazon RDS は DB インスタンスに関連付けるサブネットとそのサブネット内の IP アドレスを選択します。DB は、そのサブネットを含むアベイラビリティーゾーンを使用します。

これはSingle/MultiAZに関わらずのもので、今回のような単一AZでRDSを利用する場合も例外ではありません。
ですので、意図していないAZにもサブネットが作成されていたのだと推察しています。


### セキュリティグループ
サブネットの他に、以下の名前でセキュリティグループが作成されていました。
（※xには連番が入ります）
```
- 名前: rds-ec2-x
    - インバウンドルール 
        - タイプ: MYSQL/Auroa
        - ソース: ec2-rds-x
- 名前: ec2-rds-x
    - アウトバウンドルール
        - タイプ: MYSQL/Auroa
        - 送信先: rds-ec2-x
```

この２つのうち後者のSGがEC2インスタンスに設定されていました。EC2→RDSへアクセスするためのものです。
![Pasted Graphic 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/ae0944e3-7b37-f0ae-367e-bdd6c61fc19f.png)

# プライベートサブネットが存在する場合は？
公式資料によると、要件を満たすサブネットグループが存在している場合、既存のものを使用するとのことでした。が、何度か試してみてもなかなか紐付けは行われず。。。プライベートサブネットとサブネットグループが新たに作成されてしまいます。
ここでふと思い立って、サブネット/サブネットグループのNameを、自動作成されるものの規則にあわせてみました。
規則は以下。（xは連番）

- サブネット
    - RDS-Pvt-subnet-x
- サブネットグループ
    - rds-ec2-db-subnet-group-x

これらに則ることで、RDSインスタンス起動ウィザードで既存のサブネットグループが選択されることを確認できました。公式情報を探してみても答えが得られなかったので断定は出来ませんが、名前でサブネットの利用可否を判断している可能性はありそうです。

# 所感
最初の目的と少し外れてしまいましたが『**EC2コンピューティングリソースに接続**』を選択した際にどんな設定が行われるかを確認できました。サブネット周りを事前に準備していない場合、ワンクリックで接続設定が行えるため便利な機能だと思いました。その反面、既存のサブネットをある程度流用したいとなった場合にはあまり向いていないのかなというのが所感です。

# その他
今年の10月には、EC2からRDSへの接続をおこなってくれる機能も登場したようです。（[AWSニュースリリース](https://aws.amazon.com/jp/about-aws/whats-new/2022/10/amazon-ec2-automated-connection-solution-ec2-instance-rds-database/)）
こちらもそのうち試してみたいと思います！
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3237.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278872/219d9fb3-6a72-3a09-4f36-5a0cccfa0c93.png)