はじめに
今回は、前回に引き続きCloudFormationを使用してWeb3層構成のWordPress環境を作成していきます。
この記事では、RDSの作成に焦点を当てます。以降の回でも、それらを組み合わせてWordPress環境を構築を進めていきます。
例によって、CloudFormationとは何かについて簡単に説明します。CloudFormationは、AWSリソースのプロビジョニングと管理を自動化するためのサービスです。
テキストベースのテンプレートを使用して、ネットワーク、データベース、アプリケーションサービスなどのAWSリソーススタックをモデル化し、それらを一貫した方法でプロビジョニングと管理できます。
CloudFormationテンプレートは以下を参考に作成していきます。
構成図

関連記事
CloudFormationで構築
CloudFormationテンプレートは以下にございます。
ダウンロードしてデスクトップなど任意のフォルダに保存します。
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”
スタックの作成
早速、CloudFormationを使用してリソースを作成していきます。
手順は、以下の通りで、リンクにも詳細がございます。
- CloudFormation画面を開きスタックの作成>新しいソースを使用(標準)を選択
- テンプレートの準備完了>テンプレートファイルのアップロードを選択して、保存したymlを選択
- スタックに任意の名称を入力して、パラメータは環境に合わせて変更>次へを選択。※後述の手順に従う場合、デフォルト値でOK
- スタックオプションは特に変更せず、次へを選択
- レビュー画面を確認して送信を選択
スタックが以下の通り作成されました。
また、リソースタブから各リソースのコンソールにアクセスでき、実際に作成されていることが確認できました。

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