BETA

AWS CloudFormation練習帖:プライベートサブネットにRDSをたてる

投稿日:2019-07-19
最終更新:2019-07-19

何をする?

  • パブリックサブネットとプライベートサブネットを持つVPCを作成する』で作成したVPCのプライベートサブネットにRDSインスタンスを1つ作成します
  • RDSにはサブネットグループが必要なので、上記VPC用のテンプレートを拡張してパブリックサブネットとプライベートサブネットを2つずつ持つように変更します
  • 構成図にするとこんな感じのものを作ります

前提条件

やってみた

テンプレート作成

お決まりの部分

AWSTemplateFormatVersion: "2010-09-09"  
Description: "Create RDS"  

パラメータ部分

VPC用のテンプレートで作成された値を使用するのでパラメータとして外出しします

Parameters:  
  VpcId:  
    Description: "Created VpcId"  
    Type: String  
  PublicSubnetSecurityGroupId:  
    Description: "Created SecurityGroupId"  
    Type: String  
  PrivateSubnetIdA:  
    Description: "Created SubnetId A"  
    Type: String  
  PrivateSubnetIdC:  
    Description: "Created SubnetId C"  
    Type: String  

リソース部分(セキュリティグループ)

パブリックサブネットにたてたEC2から接続するのでパブリックサブネットに対して3306番を開放します
※セキュリティグループですが「AWS::EC2::SecurityGroup」ではなく「AWS::RDS::DBSecurityGroup」なことに注意

Resources:  
  # プライベートサブネット用のセキュリティグループ  
  SecurityGroupForPrivateSubnet:  
    Type: "AWS::RDS::DBSecurityGroup"  
    Properties:  
      EC2VpcId: !Ref VpcId  
      DBSecurityGroupIngress:  
        - EC2SecurityGroupId: !Ref PublicSubnetSecurityGroupId  
      GroupDescription: "SecurityGroup For PrivateSubnet"  

リソース部分(サブネットグループ)

プライベートサブネット2つを指定してサブネットグループを作成します

  # サブネットグループ  
  PrivateSubnetGroup:  
    Type: "AWS::RDS::DBSubnetGroup"  
    Properties:  
      DBSubnetGroupName: "PrivateSubnetGroup"  
      DBSubnetGroupDescription: "Private SubnetGroup"  
      SubnetIds:  
        - !Ref PrivateSubnetIdA  
        - !Ref PrivateSubnetIdC  

リソース部分(RDS)

RDS(MySQL)のインスタンスを作成します
※パスワードとかはパラメータとして外出しした方が良さそうな気がする…。

  # RDSインスタンス  
  RDSonPrivateSubnet:  
    Type: "AWS::RDS::DBInstance"  
    Properties:  
      Engine: "MySQL"  
      EngineVersion: "5.7.22"  
      DBInstanceClass: "db.t2.micro"  
      MultiAZ: false  
      StorageType: gp2  
      AllocatedStorage: 20  
      DBInstanceIdentifier: test  
      MasterUsername: administrator  
      MasterUserPassword: mypassword  
      DBSubnetGroupName: !Ref PrivateSubnetGroup  
      PubliclyAccessible: false  
      DBName: testdb  
      DBSecurityGroups:  
        - !Ref SecurityGroupForPrivateSubnet  

実行

  • パラメータを指定して実行
  • ステータスが「CREATE_COMPLETE」になり、作成完了

結果確認

  • RDSが起動しています
  • パブリックサブネットのEC2用セキュリティグループに対して開放したセキュリティグループも作成されています
  • パブリックサブネットのEC2から接続確認
    • MySQLクライアントをインストール
      [[email protected] ~]$ sudo yum install mysql  
    • 接続
      [[email protected] ~]$ mysql -h test.c3btey66musw.ap-northeast-1.rds.amazonaws.com -P 3306 -u administrator -p  
    • 接続OK

参考情報

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

AWSやAzureについて勉強したことをつらつらと。 基本的には未来の自分に向けたメモ的な何か。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!