1. はじめに
4月に入ってからAWS SAMとAWS CloudFormationを用いて自身が作成したリソースをテンプレートに書き起こす作業をしてきました。DB自体は作り直すことがほぼないため後回しにしてきましたが、必要と判断したため、DBを作成するCloudFormationのテンプレートの調査を行いました。
CloudFormationって? SAMって? って人はこちらの記事をとりあえず参考にしてください。
2. DB設定
以下のようなDBを作成したいと思います。
DBクラスターの設定
・使用DB:Aurora PostgreSQL ver 12.4
・サブネットグループを指定
・VPCセキュリティグループの指定
DBインスタンスの設定
・インスタンスのクラス:db.t3.medium
・アベイラビリティゾーン:ap-northeast-1a(サブネットグループの中から選んでください)
・パブリックアクセス:なし
・マルチAZ配置:なし
・Performance Insights:なし
・拡張モニタリング:なし
3. テンプレートファイル
各種設定はMappingsに書きました。任意の設定に書き換えて使用してくださるとありがたいです。また、DBのパスワードはParametersで設定し、デプロイする時に入力するようにしました。NoEcho: trueを指定することで入力した値がみられる心配はありません。
細かい設定の説明はテンプレートファイル内に記載しております。ご確認ください。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
AuroraPostgreSQL
Parameters:
Password:
Type: String
NoEcho: true
# 各種設定
Mappings:
RDSMap:
RDSCluster:
DBClusterIdentifier: xxxxxxxx
DBName: xxxxxxxx
MasterUsername: xxxxxxxx
DBSubnetGroupName: xxxxxxx
RdsSecurityGroup: sg-xxxxxxxx
RDSInstance:
DBInstanceIdentifier: xxxxxxxx
DBInstanceClass: db.t3.medium
AvailabilityZone: ap-northeast-1a
# resource
Resources:
#DBクラスターの設定
RDSCluster:
Type: AWS::RDS::DBCluster
Properties:
Engine: aurora-postgresql #DBエンジンの設定
EngineVersion: 12.4 #PostgreSQLのversion
DBClusterIdentifier: !FindInMap [ RDSMap, RDSCluster, DBClusterIdentifier ] #DBクラスターの識別子
DatabaseName: !FindInMap [ RDSMap, RDSCluster, DBName ] #データベースの名前
MasterUsername: !FindInMap [ RDSMap, RDSCluster, MasterUsername ] #データベースのマスターユーザーネーム
MasterUserPassword: !Ref Password #データベースのマスタ―パスワード
Port: 5432 #ポート番号
DBSubnetGroupName: !FindInMap [ RDSMap, RDSCluster, DBSubnetGroupName ] #サブネットの指定
VpcSecurityGroupIds: #VPCセキュリティグループの指定
- !FindInMap [ RDSMap, RDSCluster, RdsSecurityGroup ]
#DBクラスター内のインスタンスの設定
RDSInstance1:
Type: AWS::RDS::DBInstance
Properties:
Engine: aurora-postgresql #DBエンジンの設定
EngineVersion: 12.4 #PostgreSQLのversion
DBClusterIdentifier: !Ref RDSCluster #DBクラスターの識別子 RDSClusterとの紐づけ
DBInstanceIdentifier: !FindInMap [ RDSMap, RDSInstance, DBInstanceIdentifier ] #DBインスタンスの識別子
DBInstanceClass: !FindInMap [ RDSMap, RDSInstance, DBInstanceClass ] #インスタンスのクラス
DBSubnetGroupName: !FindInMap [ RDSMap, RDSCluster, DBSubnetGroupName ] #サブネットの指定
PubliclyAccessible: false #パブリックアクセスの有無設定
AvailabilityZone: !FindInMap [ RDSMap, RDSInstance, AvailabilityZone ] #アベイラビリティゾーンの設定
MultiAZ: false #マルチAZ配置有無の設定
EnablePerformanceInsights: false #Performance Insights有無の設定
MonitoringInterval: 0 #拡張モニタリングの詳細度の設定(0で拡張モニタリング無効)
4. 終わりに
いかがだったでしょうか。いかがも何もテンプレートファイル張ってあるだけなので感想の何もないと思いますが。。。CloudFormationにはネストされたストックという機能があるので、今度はこれを試してみようかな。