0
0

AWS CloudFormationでWordPressを構築

Posted at

内容
・趣旨目標
・CloudFormationとは
・参考サイト
・コードのテンプレートなど
・本記事で使用できるサービス
・ハンズオンで目指す構成
・ハンズオン開始!(Cloud9の導入)
・コーディングはYAML形式を使用するため、インデントの設定を変更(初期設定)
・ VPCの作成(CloudFormationの活用開始)
・テンプレートを更新して、適用させる。(コードの更新開始)
・テンプレを更新したので、AWS CLIでコードの検証
・チェックしたコードを更新(コードの更新完了)
・コードの構成を勝手に無理やり解釈してみたw
・EC2作成
・不足を設定(VPC,ユーザーデータ,セキュリティグループ)
・RDSとELBを同時に作成!
・完成
・撤収!!!

趣旨目標

AWSのCloudFormationをハンズオンに従って学習して、基礎力の向上と基礎知識の定着。テンプレートを多少編集することで、テンプレートの更新要領も理解します。
※本記事のコード記載は、ハンズオンのテンプレ資料に合わせた表記となっているので利用される場合は、お気をつけください。

CloudFormationとは:

参考サイト:

是非この動画を利用されてください。今までのハンズオンのなかで一番わかりやすく、勉強になりました。

コードのテンプレートなど:

image.png

本記事で使用できるサービス:

AWS CloudFormation,EC2,RDS,ELB,Cloud9

ハンズオンで目指す構成

image.png

ハンズオン開始!(Cloud9の導入)

Cloud9を使用する。これも実はCloudFormation
の技術が裏で働いている。
image.png
EC2を動作させることでCloud9が動く。デフォルトで設定していく。
image.png
image.png

コーディングはYAML形式を使用するため、インデントの設定を変更

image.png
image.png

AWS CLIのコマンド補完設定

echo "complete -C '/usr/local/bin/aws_completer' aws" >> ~/.bashrc
source ~/.bashrc

VPCの作成

はじめにCloudFormationを開く。
先程作成したCloud9のジョブがある。
image.png
新しいリソースの作成
image.png
ハンズオンで示されたファイルをアップロードする。
textにYAML形式で記載された各リソース毎のテンプレートコード。
image.png
image.png
オプションはデフォルト
※なお、ClouFormationはタイムアウトを設定することで、課金額をコントロールすることができる。30秒を超える待機時間を設定した場合、エラー箇所の特定に時間を要すことや、課金額が増加します。
また、コマンドが失敗したときの挙動をここで設定できる。
image.png
【参考】
image.png
image.png

作成完了
image.png
実際にVPCが作成できている。
image.png
image.png
image.png

テンプレートを更新して、適用させる。(コードの更新開始)

image.png
PublicSubnet1のnameタグを更新
「PublicSubnet1」に「update」を書き加える。
image.png

テンプレを更新したので、AWS CLIでコードの検証

image.png
この「cfn」ディレクトリに先程のテンプレがあるので、次のコマンドで構文などが間違っていないか検証することができます。

aws cloudformation validate-template --template-body file://01_vpc.yml

image.png
「--template-body file://01_vpc.yml」このファイルの
「validate-template 」テンプレを検証します。
という意味。直感的なコマンドではない気がします( ;∀;)
parametersに何も記載がなく、問題ないことがわかります
チェックのみ完了!
続いて、実際にupdateをかまします。

チェックしたコードを更新(コードの更新完了)

aws cloudformation update-stack --stack-name handson-cfn --template-body file://01_vpc.yml  

コマンドが長い(´;ω;`)
アップデートできました!
image.png

コードの構成を勝手に無理やり解釈してみたw

多分大きく4つの構成で、「決まり文句」「名前、イメージ決め。」「リソース」「他のリソースとの連携」なのかなと。リソースの項目が分厚くなりそうなイメージで大事なところかと。あと、テンプレートデータへは基本手を加えない。可読性とか確実性の面。

#決まり文句
AWSTemplateFormatVersion: 2010-09-09
Description: Hands-on template for EC2

#名前、イメージ決め。
Parameters:
  VPCStack:
    Type: String
    Default: handson-cfn
  EC2AMI:
    Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
    Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2

#リソース
Resources:
  EC2WebServer01:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref EC2AMI
      InstanceType: t2.micro

#他のリソースとの連携
Outputs:
  EC2WebServer01:
    Value: !Ref EC2WebServer01
    Export:
      Name: !Sub ${AWS::StackName}-EC2WebServer01

※これは例示しているだけで、このまま使用できるコードではありません。
※他のリソースのコードと連携している例を次に示します。ELBのコードです。
image.png

EC2作成

Cloud9に移動、「cfn」ディレクトリに移動して次のコマンドを実行

aws cloudformation create-stack --stack-name handson-cfn-ec2 --template-body file://02_ec2.yml

このコマンドを実行することでEC2ができていることがわかりますが、不足があります。
現在デフォルトVPC、セキュリティグループもデフォルト、サブネットもデフォルトになっています。最終的にWordPressを構築するので、ユーザーデータも反映します。

不足を設定(VPC,ユーザーデータ,セキュリティグループ)

(今実施しているハンズオンのための設定になります。)

まずVPCに追記していく。

Clou9のテンプレにSubnet欄を追加し、先程作成したVPCを割り当てるため、既作成のVPC、PublicSubnet1のSubnetidを記載していきます。
image.png
検証

aws cloudformation validate-template --template-body file://02_ec2.yml

次はユーザーデータをセットします。

公式さんが作成しデータをペースト。WordPress,Apache,PHPをインストールするコマンド。
AWS公式のリファレンス内から「組み込み関数」を検索し、テキスト文字列「Base64」によって変換します。そして日本語が反映されるまで結構時間かかります|д゚)なお、本記事冒頭にサイトリンクがあります。
image.png
image.png
※基本的なことだけれど、一言一句、大文字小文字、タイプミスでは先に進めません!

#! /bin/bash
yum update -y
amazon-linux-extras install php7.2 -y
yum -y install mysql httpd php-mbstring php-xml

wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
tar zxvf /tmp/latest-ja.tar.gz -C /tmp
cp -r /tmp/wordpress/* /var/www/html/
touch /var/www/html/.check_alive
chown apache:apache -R /var/www/html

systemctl enable httpd.service
systemctl start httpd.service

検証

aws cloudformation validate-template --template-body file://02_ec2.yml

更新

aws cloudformation update-stack --stack-name handson-cfn-ec2 --template-body file://02_ec2.yml

続いてセキュリティグループの設定

ここで構成を再確認
image.png
どうやってセキュリティグループを設定するか確認(p_-)
リファレンスの確認
image.png
。。。ここでは詳細な方法の記載がないようなので、EC2のリソースタイプを選択する画面に移動します。
見つけたぜ!(p_-)
image.png
ここ全部書くのか?ということはなくて、必要なものを記載します。参考となるのは、「Required」欄で必須であるか、また、「Required: Conditional」場合による。といった表記を参考に記載する。
この一連の行為は基本ですね!公式のドキュメントを確認する。(p_-)
image.png
今回は次のとおり。
・GroupDescription
・VpcId
・SecurityGroupIngress(インバウンド設定で必要)
これらをEC2を作成した時のResourcesのくくりに追記していく。

それぞれ必要な文字を公式ドキュメントからコピペで貼り付けますが、「SecurityGroupIngress」は、記載することが不明であるため、ドキュメントで追跡します|д゚)
するとさらに記載すべきものたちがわらわらと。
ひとまず必須は、「IpProtocol」ですね。これ以外にも、「ToPort」、「FromPort」と「CidrIp(VPCのネットワークアドレス)」を設定していきます。
image.png

現状↓
image.png

コードを保存して、検証→更新を行う。
検証

aws cloudformation validate-template --template-body file://02_ec2.yml

更新

aws cloudformation update-stack --stack-name handson-cfn-ec2 --template-body file://02_ec2.yml

結果、セキュリティグループが出来ています。
image.png
今はEC2に関連付けられていないため、関連付けます!

「SecurityGroupIds」という名前で関連付け。そして組み込み関数で、今設定してきたセキュリティグループを認識させる。
また、コードの保存をお忘れなく、検証、更新の順で更新を行います。
image.png
結果、関連付けることができました。
image.png

今基礎をおさえるために、わざと不足があるコードをテンプレで使用して、ハードコードの手法でコーディングしていますが、本来は、VPC用のスタックからデータをインポートするなどで対応しましょう!

RDSとELBを同時に作成!

RDSから

aws cloudformation create-stack --stack-name handson-cfn-rds --template-body file://03_rds.yml

ELBも作成

aws cloudformation create-stack --stack-name handson-cfn-elb --template-body file://04_elb.yml

完成

image.png

次にELBの出力の項目からURLをクリックします。三回目のWordPress|д゚)
image.png
image.png

撤収!!!

次の学習に備えます!
うっしゃ!
image.png
この5つのスタックを消すだけです。
image.png

全般、CloudFormationを使いこなすことで、構築の確実性、迅速性が上がりそうですね。使いこなせばですが(p_-)

では!

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