はじめに
今回は、前回に引き続きCloudFormationを使用してWeb3層構成のWordPress環境を作成していきます。
この記事では、WebApサーバーの役割を担うEC2を構築するための起動テンプレートとEC2の作成に焦点を当てます。以降の回でも、それらを組み合わせてWordPress環境を構築を進めていきます。
ただここで一つ注意しておくこととして、必ずしも、EC2と併せて起動テンプレートを作成する必要はありません。
ですが、今回、起動テンプレートを作成しておく理由としては、今後、オートスケーリングなどでEC2を自動増減させたい場合などに、起動するEC2にインストールしておきたいパッケージなどをユーザデータ(起動時に実行するスクリプト)に設定しておくことで、テンプレート化しておけるためです。
また、例によって、CloudFormationとは何かについて簡単に説明します。CloudFormationは、AWSリソースのプロビジョニングと管理を自動化するためのサービスです。
テキストベースのテンプレートを使用して、ネットワーク、データベース、アプリケーションサービスなどのAWSリソーススタックをモデル化し、それらを一貫した方法でプロビジョニングと管理できます。
CloudFormationテンプレートは以下を参考に作成していきます。
構成図
関連記事
CloudFormationで構築
CloudFormationテンプレートは以下にございます。
ダウンロードしてデスクトップなど任意のフォルダに保存します。
CloudFormation:YAMLテンプレートのポイント
YAMLテンプレートのポイントを記述します。
- LaunchTemplate:EC2インスタンスの起動テンプレートを作成します。この起動テンプレートは、指定されたキーペア、AMI ID、インスタンスタイプ、IAMインスタンスプロファイルを使用します。また、ネットワークインターフェースとタグ仕様も設定されています。
- KeyName:SSH接続に使用するキーペアの名前を指定します。
- ImageId:EC2インスタンスに使用するAmazon Machine Image (AMI)のIDを指定します。
- InstanceType:EC2インスタンスのタイプを指定します。この例では
t2.micro
が使用されています。 - IamInstanceProfile:EC2インスタンスに関連付けるIAMインスタンスプロファイルのARNを指定します。
- NetworkInterfaces:EC2インスタンスのネットワークインターフェース設定を指定します。この例では、パブリックIPアドレスの関連付け、デバイスインデックス、サブネットID、セキュリティグループが設定されています。
- TagSpecifications:EC2インスタンスに適用するタグを指定します。
- UserData:EC2インスタンスの起動時に実行するコマンドを指定します。この例では、シェルスクリプトがBase64エンコードされて指定されています。このシェルスクリプトは、必要なパッケージのインストール、Apache HTTPサーバーの起動、WordPressの設定ファイル(
wp-config.php
)の作成と更新などを行います。
Resources:
# ------------------------------ #
# LaunchTemplate
# ------------------------------ #
MyLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateName: !Join ['-', [!Ref Env, !Ref ResourceName, 'launchtemplate']]
LaunchTemplateData:
KeyName: !Ref Keypair
ImageId: ami-06fdbb60c8e83aa5e
InstanceType: t2.micro
IamInstanceProfile:
Arn: !GetAtt Ec2InstanceProfile.Arn
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: 0
SubnetId: !Ref SubnetId
Groups:
- !ImportValue WpEC2SecurityGroup
TagSpecifications:
- ResourceType: instance
Tags:
- Key: Name
Value: !Join ['-', [!Ref Env, !Ref ResourceName, 'ec2-webap-server']]
UserData:
Fn::Base64: |
#!/bin/bash
# Set variables
aws configure set region ap-northeast-1
DB_NAME_PARAM="/wordpress/WP_DB_NAME"
DB_USER_PARAM="/wordpress/WP_DB_USER"
DB_PASSWORD_PARAM="/wordpress/WP_DB_PASSWORD"
DB_HOST_PARAM="/wordpress/WP_DB_HOST"
EFS_ID_PARAM="/wordpress/EFS_ID"
EFS_ID=$(aws ssm get-parameter --with-decryption --name $EFS_ID_PARAM --query "Parameter.Value" --output text)
WEB_ROOT="/var/www/html/"
WP_CONFIG_SAMPLE="$WEB_ROOTwp-config-sample.php"
WP_CONFIG="$WEB_ROOTwp-config.php"
yum -y update
amazon-linux-extras install php7.2 -y
yum -y install mysql httpd php-mbstring php-xml gd php-gd
systemctl enable httpd.service
systemctl start httpd.service
systemctl status httpd.service
wget http://ja.wordpress.org/latest-ja.tar.gz ~/
tar zxvf /latest-ja.tar.gz
yum -y install amazon-efs-utils
# mount -t efs $EFS_ID $WEB_ROOT
cp -r /wordpress/* $WEB_ROOT
chown apache:apache -R /var/www/html
cd /var/www/html
# Get parameter values from SSM Parameter Store
DB_NAME=$(aws ssm get-parameter --name $DB_NAME_PARAM --query "Parameter.Value" --output text)
DB_USER=$(aws ssm get-parameter --with-decryption --name $DB_USER_PARAM --query "Parameter.Value" --output text)
DB_PASSWORD=$(aws ssm get-parameter --with-decryption --name $DB_PASSWORD_PARAM --query "Parameter.Value" --output text)
DB_HOST=$(aws ssm get-parameter --with-decryption --name $DB_HOST_PARAM --query "Parameter.Value" --output text)
# Copy wp-config-sample.php to wp-config.php
cp $WP_CONFIG_SAMPLE $WP_CONFIG
# Update wp-config.php file
sed -i -e "s/define( 'DB_NAME', '.*' );/define('DB_NAME', '$DB_NAME');/" $WP_CONFIG
sed -i -e "s/define( 'DB_USER', '.*' );/define('DB_USER', '$DB_USER');/" $WP_CONFIG
sed -i -e "s/define( 'DB_PASSWORD', '.*' );/define('DB_PASSWORD', '$DB_PASSWORD');/" $WP_CONFIG
sed -i -e "s/define( 'DB_HOST', '.*' );/define('DB_HOST', '$DB_HOST');/" $WP_CONFIG
スタックの作成
早速、CloudFormationを使用してリソースを作成していきます。
手順は、以下の通りで、リンクにも詳細がございます。
- CloudFormation画面を開きスタックの作成>新しいソースを使用(標準)を選択
- テンプレートの準備完了>テンプレートファイルのアップロードを選択して、保存したymlを選択
- スタックに任意の名称を入力して、パラメータは環境に合わせて変更>次へを選択。※後述の手順に従う場合、デフォルト値でOK
- スタックオプションは特に変更せず、次へを選択
- レビュー画面を確認して送信を選択
スタックが以下の通り作成されました。
また、リソースタブから各リソースのコンソールにアクセスでき、実際に作成されていることが確認できました。
まとめ
今回は、起動テンプレートの構築を進めました。
次回から、実際にEC2にアクセスしたり、WordPressにログインしてみたいと思います!
最後までご覧いただきありがとうございました。
コメント