CloudFormationを使用したWeb3層構成のWordPress環境を作成してみた!【DB編:RDS】

AWS

はじめに

今回は、前回に引き続きCloudFormationを使用してWeb3層構成のWordPress環境を作成していきます。
この記事では、RDSの作成に焦点を当てます。以降の回でも、それらを組み合わせてWordPress環境を構築を進めていきます。

例によって、CloudFormationとは何かについて簡単に説明します。CloudFormationは、AWSリソースのプロビジョニングと管理を自動化するためのサービスです。
テキストベースのテンプレートを使用して、ネットワーク、データベース、アプリケーションサービスなどのAWSリソーススタックをモデル化し、それらを一貫した方法でプロビジョニングと管理できます。

CloudFormationテンプレートは以下を参考に作成していきます。

AWS::RDS::DBInstance - AWS CloudFormation
Use the AWS CloudFormation AWS::RDS::DBInstance resource for RDS.

構成図

関連記事

CloudFormationで構築

CloudFormationテンプレートは以下にございます。
ダウンロードしてデスクトップなど任意のフォルダに保存します。

GitHub - kosments/wp-project
Contribute to kosments/wp-project development by creating an account on GitHub.

CloudFormation:YAMLテンプレートのポイント

YAMLテンプレートのポイントを記述します。

  • RDSInstance:MySQLエンジンを使用するRDS DBインスタンスを作成します。インスタンスの識別子、データベース名、マスターユーザー名とパスワード、インスタンスクラス、割り当てられたストレージ、エンジンバージョンなどのプロパティが設定されています。また、このインスタンスは指定されたセキュリティグループとサブネットグループに関連付けられています。
  • DBSubnetGroup:RDS DBサブネットグループを作成します。このサブネットグループは、指定されたプライベートサブネットに関連付けられています。
  • DBNameParameter, DBUserParameter, DBPasswordParameter, DBHostParameter:これらはAWS Systems Manager Parameter Storeのエントリを作成します。これらのエントリは、WordPress設定で必要となる情報(データベース名、ユーザー名、パスワード、ホスト名)を保存します。※次回以降で使用しますが、WebApサーバーとなるEC2を起動するための起動テンプレートで参照します。
Resources:
  # ------------------------------ #
  # MySQLRDSInstance
  # ------------------------------ #
  MySQLRDSInstance:
    Type: 'AWS::RDS::DBInstance'
    Properties:
      Engine: MySQL
      DBInstanceIdentifier: !Join ['-', [!Ref 'Env', !Ref 'ResourceName', !Ref 'DBInstanceID']]
      DBName: !Ref DBName
      MasterUsername: !Ref DBUsername
      MasterUserPassword: !Ref DBPassword
      DBInstanceClass: !Ref DBInstanceClass
      AllocatedStorage: !Ref DBAllocatedStorage
      EngineVersion: !Ref DBEngineVersion
      VPCSecurityGroups: 
        - !Ref DBSecurityGroup
      DBSubnetGroupName: !Ref DBSubnetGroup
  # ------------------------------ #
  # DBSubnetGroup
  # ------------------------------ #
  DBSubnetGroup: 
    Type: "AWS::RDS::DBSubnetGroup"
    Properties: 
      DBSubnetGroupDescription: description
      DBSubnetGroupName: !Join ['-', [!Ref 'Env', !Ref 'ResourceName', 'DBSubnetGroup']]
      SubnetIds: 
        - !ImportValue 'WpPrivateSubnet1a'
        - !ImportValue 'WpPrivateSubnet1c'
      Tags: 
        - Key: String
          Value: !Join ['-', [!Ref 'Env', !Ref 'ResourceName', 'DBSubnetGroup']]
  # ------------------------------ #
  # SSM ParameterStore
  # ------------------------------ #
  DBNameParameter:
    Type: 'AWS::SSM::Parameter'
    Properties:
      Name: '/wordpress/WP_DB_NAME'
      Type: String
      Value: !Ref DBName
  DBUserParameter:
    Type: 'AWS::SSM::Parameter'
    Properties:
      Name: '/wordpress/WP_DB_USER'
      Type: String
      Value: !Ref DBUsername
  DBPasswordParameter:
    Type: 'AWS::SSM::Parameter'
    Properties:
      Name: '/wordpress/WP_DB_PASSWORD'
      Type: String
      Value: !Ref DBPassword
  DBHostParameter:
    Type: 'AWS::SSM::Parameter'
    Properties:
      Name: '/wordpress/WP_DB_HOST'
      Type: String
      Value: !GetAtt MySQLRDSInstance.Endpoint.Address

!ImportValue内で!Subを使用したい場合

公式ドキュメントに記載の通り、両方、短縮系を使用することができませんので注意しましょう。

!Sub の短縮形が含まれる場合、!ImportValue の短縮形は使用できません。
代わりに、完全な関数名を使用する必要があります。次に例を示します。
Fn::ImportValue:
!Sub “${NetworkStack}-SubnetID”

Fn::ImportValue - AWS CloudFormation
Fn::ImportValue 組み込み関数を使用して、複数の AWS CloudFormation スタックで共有される値を返します。

スタックの作成

早速、CloudFormationを使用してリソースを作成していきます。
手順は、以下の通りで、リンクにも詳細がございます。

  1. CloudFormation画面を開きスタックの作成>新しいソースを使用(標準)を選択
  2. テンプレートの準備完了>テンプレートファイルのアップロードを選択して、保存したymlを選択
  3. スタックに任意の名称を入力して、パラメータは環境に合わせて変更>次へを選択。※後述の手順に従う場合、デフォルト値でOK
  4. スタックオプションは特に変更せず、次へを選択
  5. レビュー画面を確認して送信を選択

スタックが以下の通り作成されました。
また、リソースタブから各リソースのコンソールにアクセスでき、実際に作成されていることが確認できました。

まとめ

今回は、RDSの構築を進めました。
実際のアプリケーション環境(WordPress)を構築するためには、追加のリソースとして、WebApサーバーとしてのEC2インスタンスなどが必要となります。
これらの構築は、次回以降に進めていきます!
最後までご覧いただきありがとうございました。

コメント

タイトルとURLをコピーしました