こんにちは。いっちー(@tetestkake_blog)です!
AWSリソース構築の際、画面からリソースを作成する作業を効率化したいなと思うことはありませんか?
CloudFormation, AWS CLIを使用すると、画面から設定項目を入力せずともにAWSリソースの作成ができ便利です。
この記事ではRDS Proxyを例に取り、CloudFormation, AWS CLIでリソースを作成する方法をサンプル付きで紹介します!

RDS Proxyってなに?という方は以下の記事をまずご覧ください。
※CloudFormation, AWS CLIどちらのサンプルを実行しても同じようなRDS Proxyを作成できます。
CloudFormationでRDS Proxyを作成
CloudFormationを使い、以下の手順でRDS Proxyを作成します。
- RDS Proxyを作成するためのテンプレートファイルを作成
- 作成したテンプレートファイルを使ってRDS Proxyを作成

CloudFormationってなに?という方は以下の記事をまずご覧ください。
RDS Proxyを作成するためのテンプレートファイルを作成
まずはCloudFormationにてリソースの構築に必要な、RDS Proxy用テンプレートを作成します。
テンプレートはyamlやjsonで記述します。以下はRDS Proxy用サンプルテンプレートです。
AWSTemplateFormatVersion: 2010-09-09
Parameters:
ProxyName:
Type: String
Default: <Proxyの名前>
ProxyTargetDBClusterIdentifiers:
Type: CommaDelimitedList
SecretReaderRoleArn:
Type: String
Default: <シークレットを参照できるIAM RoleのARN>
ProxySecretArn:
Type: String
Default: <接続情報用シークレットのARN>
SubnetIds:
Type: String
Default: <サブネットID1>,<サブネットID2>
Resources:
TestDBProxy:
Type: AWS::RDS::DBProxy
Properties:
DebugLogging: false
DBProxyName: !Ref ProxyName
EngineFamily: MYSQL
IdleClientTimeout: 120
RequireTLS: false
RoleArn:
!Ref SecretReaderRoleArn
Auth:
- {AuthScheme: SECRETS, SecretArn: !Ref ProxySecretArn, IAMAuth: DISABLED}
VpcSubnetIds:
Fn::Split: [",", !Ref SubnetIds]
ProxyTargetGroup:
Type: AWS::RDS::DBProxyTargetGroup
Properties:
DBProxyName: !Ref TestDBProxy
# Proxyが接続するRDS Auroraクラスターの識別子
DBClusterIdentifiers: !Ref ProxyTargetDBClusterIdentifiers
TargetGroupName: default
ConnectionPoolConfigurationInfo:
MaxConnectionsPercent: 100
MaxIdleConnectionsPercent: 50
ConnectionBorrowTimeout: 120

上記サンプルはこちらにアップロードしてあるのでご自由にお使いください!
作成したテンプレートファイルを使ってRDS Proxyを作成
上記テンプレートを用いてスタックを作成します。
スタックは、
CloudFormation > スタック > スタックの作成 > 新しいリソースを利用(標準)
から作成します。

yamlで定義したDefaultの値から変更する場合は、「スタックの詳細を指定」セクションから変更します。
最後のレビュー画面で設定項目に問題がないことを確認して、「スタックの作成」ボタンをクリックし、
スタックのステータスが「CREATE_IN_PROGRESS」から「CREATE_COMPLETE」になったら作成完了です。

作成の完了までは10分程度かかります。
スタックを作成してあとは待つだけなので楽チンですね!
AWS CLIでRDS Proxyを作成
次はAWS CLIを使用したRDS Proxyの作成方法を解説します。
手順は以下です。
- Proxy作成コマンドを叩く
- Proxyターゲット作成コマンドを叩く
Proxy作成コマンドを叩く
まずはProxy本体を作成するコマンドを叩きます。サンプルは以下です。
$ aws rds create-db-proxy \
--db-proxy-name "<任意の名前>" \
--engine-family "MYSQL" \
--auth '[{"Description": "<説明>", "AuthScheme": "SECRETS", "SecretArn": "<SecretsのARN>", "IAMAuth": "DISABLED"}]' \
--role-arn "<RoleのARN>" \
--vpc-subnet-ids "<SubnetId1>" "<SubnetId2>" ......

コマンドが長くなってしまったので\(バックスラッシュ)で改行してあります。
Proxyターゲット作成コマンドを叩く
次に以下のコマンドでProxyターゲットを作成します。
$ aws rds register-db-proxy-targets \
--db-proxy-name <Proxy名> \
--db-cluster-identifiers <DBクラスタの名前>
[補足] LambdaにRDS Proxyを紐づける場合
作成したRDS ProxyをLambdaにアタッチする場合は、
Lambda > 設定 > データベースプロキシ > データベースプロキシの追加
から、コマンド経由で作成したProxyをアタッチします。
なお、AWS CLIで作成したProxyにおいて、
コンソールではProxyがAvailableになっているが、作成後すぐはLambdaからの接続に失敗する事象を確認しました。
10分ほど待つと問題なく疎通できたので、裏で何かを構築していた途中だったのかもしれないです。

気長に待ちましょう…!
さいごに
この記事ではCloudFormation, AWS CLIでRDS Proxyを作成する方法に関して解説しました。
コンソールから項目を設定しなくてもリソースが構築できる便利な代物なので、
インフラ環境構築の際にはCloudFormation, AWS CLIを使ってみてはいかがでしょうか?

AWSの学習には「Amazon Web Services 基礎からのネットワーク&サーバー構築」がおすすめです!
お知らせ
にほんブログ村のランキングに参加しています。よろしければ下のボタンをポチッとしていただけると嬉しいです\(^^)/

参考資料
- create-db-proxy
- register-db-proxy-targets
- RDS Proxyと戯れた話【AWS】
- 【AWS】RDS ProxyをCloudFormationで構築する
- AWS CloudFormation Documentation AWS::RDS::DBProxy
コメント