LoginSignup
0
0

More than 1 year has passed since last update.

CloudFormationで暗号化されたシングルAZのRDSを構築する方法

Last updated at Posted at 2022-12-03

構成

スクリーンショット 2022-12-04 4.12.16.png

完成したテンプレート

テンプレート
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で新規スタックを作成する方法の詳細は次の記事をご参照下さい。
CloudFormationで新規スタックを作成する方法

今回はYAMLで作成しておりますので、JSONに変換したい方は次の記事をご参照下さい。
YAMLからJSONに変換する方法

構築手順

1パラメータ入力

各パラメータを入力します。スタックの名前は任意の名前を入れる

RDSインスタンス

スクリーンショット 2022-12-04 3.27.24.png

パラメータ名 用途 備考
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インスタンスに割り当てるセキュリティグループ 事前に作成が必要

サブネットグループ

スクリーンショット 2022-12-04 3.28.57.png

そもそも、サブネットグループって何だっけ?という方は次の記事をご参照ください。
サブネットグループとは

パラメータ名 用途 備考
DBSubnetGroupName サブネットグループの名前 例:CF-SubnetGroup
SubnetidA サブネットを選択 SubnetidCとは異なるAZのサブネットを選択
SubnetidC サブネットを選択 SubnetidAとは異なるAZのサブネットを選択

2 CloudFormation詳細設定

次へを選択。CloudFormationスタック作成時の詳しい設定について次の記事をご参照ください。
CloudFormationスタック作成時の詳しい設定について

3 最終確認

最終確認を行い送信を選択

4 正常終了確認

ステータスがCREATE_COMPLETEになったらスタック正常終了です。
スクリーンショット 2022-11-26 10.32.45.png

参考にしたサイト

CloudFormation RDSAWS公式
CloudFormationによる【RDS】の構築 - 協栄情報ブログ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0