CloudFormationで暗号化されたシングルAZのRDSを構築する方法
構成
完成したテンプレート
AWSTemplateFormatVersion: 2010-09-09
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
-
Label:
default: RdsInstance
Parameters:
- DBName
- DBInstanceClass
- DBAllocatedStorage
- Engine
- EngineVersion
- DBUsername
- DBPassword
- AvailabilityZone
- DeletionProtection
- StorageType
- CopyTagsToSnapshot
- KmsKeyArn
- VPCSecurityGroups
-
Label:
default: RdsSubnetGroup
Parameters:
- DBSubnetGroupName
- SubnetidA
- SubnetidC
Parameters:
DBName:
Default: 'cf-rds'
Type: String
DBInstanceClass:
Default: db.t3.micro
Type: String
DBAllocatedStorage:
Default: '20'
Description: The size of the database (GiB)
Type: Number
MinValue: '20'
MaxValue: '20'
Engine:
Type: String
AllowedValues:
- mysql
- postgres
Default: 'mysql'
EngineVersion:
Type: String
AllowedValues:
- '8.0.28'
Default: '8.0.28'
DBUsername:
NoEcho: 'true'
Type: String
# 文字数制限
MinLength: '1'
MaxLength: '16'
AllowedPattern: '[a-zA-Z0-9]*'
DBPassword:
NoEcho: 'true'
Type: String
MinLength: '8'
MaxLength: '41'
DeletionProtection:
Type: String
AllowedValues:
- 'true'
- 'false'
Default: 'false'
StorageType:
Type: String
AllowedValues:
- 'gp2'
- 'gp3'
Default: 'gp2'
CopyTagsToSnapshot:
Type: String
AllowedValues:
- 'true'
- 'false'
Default: 'false'
KmsKeyArn:
NoEcho: 'true'
Type: String
Default: ''
VPCSecurityGroups:
Type: AWS::EC2::SecurityGroup::Id
AvailabilityZone:
Type: AWS::EC2::AvailabilityZone::Name
# サブネットグループ
DBSubnetGroupName:
Type: String
Default: 'DBSubnetGroupName'
SubnetidA:
Type: AWS::EC2::Subnet::Id
SubnetidC:
Type: AWS::EC2::Subnet::Id
Resources:
# RDSインスタンス作成
MyDB:
Type: 'AWS::RDS::DBInstance'
DeletionPolicy: Delete
Properties:
DBInstanceIdentifier: !Ref DBName
DBInstanceClass: !Ref DBInstanceClass
AllocatedStorage: !Ref DBAllocatedStorage
Engine: !Ref Engine
EngineVersion: !Ref EngineVersion
MasterUsername: !Ref DBUsername
MasterUserPassword: !Ref DBPassword
PubliclyAccessible: false
AvailabilityZone: !Ref AvailabilityZone
StorageType: !Ref StorageType
KmsKeyId: !Ref KmsKeyArn
# 自動バックアップの無効化
BackupRetentionPeriod: 0
# シングルAZ
MultiAZ: 'false'
# DB暗号化
StorageEncrypted: true
DeletionProtection: !Ref DeletionProtection
CopyTagsToSnapshot: !Ref CopyTagsToSnapshot
DBSubnetGroupName: !Ref RDSSubnetGroup
VPCSecurityGroups:
- !Ref VPCSecurityGroups
#サブネットグループ作成
RDSSubnetGroup:
Type: "AWS::RDS::DBSubnetGroup"
Properties:
DBSubnetGroupDescription: !Ref DBSubnetGroupName
DBSubnetGroupName: !Ref DBSubnetGroupName
SubnetIds:
- !Ref SubnetidA
- !Ref SubnetidC
CloudFormationで新規スタックを作成する方法の詳細は次の記事をご参照下さい。
<a href="https://qiita.com/kazunobu2211/items/3fd42d5482a3331332d0" rel="nofollow noopener" target="_blank">CloudFormationで新規スタックを作成する方法</a>
今回はYAMLで作成しておりますので、JSONに変換したい方は次の記事をご参照下さい。
<a href="https://qiita.com/kazunobu2211/items/49deda949e97ea86bbf4" rel="nofollow noopener" target="_blank">YAMLからJSONに変換する方法</a>
構築手順
1パラメータ入力
各パラメータを入力します。スタックの名前は任意の名前を入れる
RDSインスタンス
パラメータ名 | 用途 | 備考 |
---|---|---|
DBInstanceIdentifier | DB識別子 | 例:CF-Mysql |
DBInstanceClass | RDSインスタンスクラス | 例:db.t3.micro |
DBAllocatedStorage | DBに割り当てられるストレージの量(単位:GiB) | 例:20 |
Engine | DBインスタンスで使用するデータベースエンジン | 例:mysql |
EngineVersion | 使用するデータベースエンジンのバージョン | 例:8.0.28 |
DBUsername | DBのマスターユーザー名 | 例:kazunobu |
DBPassword | DBのマスターユーザーのパスワード | 8文字以上 |
AvailabilityZone | DBインスタンスを起動させるAZ | |
DeletionProtection | DBインスタンスが削除保護が有効になっているかどうか | trueかfalse |
StorageType | DBインスタンスに関連付けられるストレージタイプ | 例:gp2 |
CopyTagsToSnapshot | スナップショットにタグをコピーするかどうか | trueかfalse |
KmsKeyArn | 暗号化に使用されるAWS KMSキーのARN | 事前に作成が必要 |
VPCSecurityGroups | DBインスタンスに割り当てるセキュリティグループ | 事前に作成が必要 |
サブネットグループ
そもそも、サブネットグループって何だっけ?という方は次の記事をご参照ください。
<a href="https://qiita.com/kazunobu2211/items/ac8062b2458023eaeb88" rel="nofollow noopener" target="_blank">サブネットグループとは</a>
パラメータ名 | 用途 | 備考 |
---|---|---|
DBSubnetGroupName | サブネットグループの名前 | 例:CF-SubnetGroup |
SubnetidA | サブネットを選択 | SubnetidCとは異なるAZのサブネットを選択 |
SubnetidC | サブネットを選択 | SubnetidAとは異なるAZのサブネットを選択 |
2 CloudFormation詳細設定
次へを選択。CloudFormationスタック作成時の詳しい設定
について次の記事をご参照ください。
<a href="https://qiita.com/kazunobu2211/items/3fd42d5482a3331332d0#cloudformation新規作成手順" target="_blank rel="nofollow noopener"">CloudFormationスタック作成時の詳しい設定について</a>
3 最終確認
最終確認を行い送信
を選択
4 正常終了確認
ステータスがCREATE_COMPLETEになったらスタック正常終了です。
参考にしたサイト
<a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-deletionprotection" target="_blank rel="nofollow noopener"">CloudFormation RDSAWS公式</a>
<a href="https://cloud5.jp/cf-rds/" target="_blank rel="nofollow noopener"">CloudFormationによる【RDS】の構築 - 協栄情報ブログ</a>
Discussion