0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CloudFormationを使ってWordPress環境を構築

Last updated at Posted at 2024-09-22

はじめに

2020年のハンズオンを使用してCloudFormationを使ってWebサイト環境を構築しました。2020年作成だったためテンプレートファイルを書き加える必要があったり、変更点がいくつかあったりしたので改修しました。
また公式ではCloud9を使用してますが、2024年7月から新規でCloud9の使用ができなくなっているため、今回はCloudShellを使用しております。
CloudFormationを触ってみたい方はぜひ試してみてください。

記事の対象者

  • IaCに興味のある方
  • CloudFormationを触ってみたい方

作成する環境

IMG_1433.jpg

手順

  • VPCの作成
  • EC2の作成
  • RDSの作成
  • ELBの作成

テンプレートファイル

以下のリンクからテンプレートファイルを事前にダウンロードしておいてください。
AWS環境のコード管理AWS CloudFormationでWebシステムを構築する

CloudShellにダウンロードしておいたcfnの中身をすべてアップロードします。

VPCの作成

CloudFormationのスタック作成からダウンロードしておいたファイルを使用してVPCのスタックを作成します。
スクリーンショット (29).png

  • スタックの名前はなんでもよいですが以降の作成でもテンプレートファイルに名前を反映する必要があります
    スクリーンショット (30).png
  • 作成完了です
    スクリーンショット (31).png

EC2の作成

行うこと

  • EC2用スタックの作成
  • 配布したテンプレートでEC2を起動
  • 不足設定を書き加えてテンプレートを完成させる

スタック作成

aws cloudformation create-stack --stack-name test-cfn-ec2 --template-body file://02_ec2.yml
  • CloudFormationからスタックの確認
    スクリーンショット (40).png

スタックを確認できた後下記3つを書き加えなければなりません。

サブネットIDの指定

テンプレートのあるファイルにcdで移動してからvi操作で編集して更新します。

[cloudshell-user@ip-10-130-57-170 ~]$ vi 01_vpc.yml
Resources:
  EC2WebServer01:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref EC2AMI
      InstanceType: t2.micro
      SubnetId: subnet-07ab0c7140f070798

※サブネットIDはCloudFormationのコンソールから作成したパブリックサブネットの値を入れます。
スクリーンショット (43).png

ユーザーデータのスクリプト

スクリプトの追加をします。
02_ec2_userdata.shを全コピーしてUserDataに貼り付けます。
インデントはSubnetIdの下です。
※Base64エンコードの後ろのパイプもつけてください

Resources:
  EC2WebServer01:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref EC2AMI
      InstanceType: t2.micro
      SubnetId: subnet-07ab0c7140f070798
      UserData: !Base64 |
        #! /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       

セキュリティグループの追記

EC2SGをユーザーデータスクリプトの下に追記します。

 EC2SG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow HTTP access
      VpcId: vpc-048cf1d9c88a3e6bd
      SecurityGroupIngress:
        - IpProtocol: tcp
          CidrIp: 10.0.0.0/16
          FromPort: 80
          ToPort: 80

※sshアクセスも許可したい場合はsshとポート22も同じように追記してください
下の画像のようにインデントがあっていれば大丈夫です。

  • SubnetId

  • ユーザーデータ
    スクリーンショット (64).png

  • セキュリティグループ
    スクリーンショット (65).png


最後に作成したセキュリティグループをEC2インスタンスにアタッチします。
UserDataの列に加えます。

 SecurityGroupIds:
   - !Ref EC2SG

画像のように書き加えます。
スクリーンショット (66).png

  • ここまで書き加えたらスタックの更新を行います
  • 構文の検証
aws cloudformation validate-template --template-body file://02_ec2.yml
  • 更新
aws cloudformation update-stack --stack-name test-cfn-ec2 --template-body file://02_ec2.yml
CloudFormationで変更した3点の確認を行います。
  • サブネットIDがスタックのものになっている
    スクリーンショット (49).png

  • ユーザーデータにスクリプトが入っている
    スクリーンショット (49).png

  • セキュリティグループが作成されておりEC2インスタンスにアタッチしていること
    スクリーンショット (49).png

RDSの作成

※上のファイルを使用している方はインスタンスクラスをdb.t2.microからdb.3.microに変更する必要があります。(2024年3月にt2は廃止しているため)

vi 03_rds.yml
Resources:
  DBInstance:
    Type: AWS::RDS::DBInstance
    DeletionPolicy: Delete
    Properties:
      DBInstanceClass: db.t3.micro
      AllocatedStorage: "10"
      StorageType: gp2
      Engine: MySQL
      MasterUsername: !Ref DBUser
      MasterUserPassword: !Ref DBPassword
      DBName: wordpress
      BackupRetentionPeriod: 0
      DBSubnetGroupName: !Ref DBSubnetGroup
      VPCSecurityGroups:
        - !Ref DBSecurityGroup

変更完了したらスタック作成します。

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

CloudFormationからリソースとCloudShellの03_rds.ymlを参照して以下をコピーします。
※WordPressのログイン時に使用します。

  • パラメータのユーザ名とパスワード
Default: dbmaster
Default: H&ppyHands0n
  • DBエンドポイント

ELBの作成

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

※VPCやEC2の名前を変更した方はviコマンドでパラメータを編集する必要があります。

接続

ここまでできたらCloudFormationコンソールからELBエンドポイントを押下してWordPressのログインが求められる画面まで行きます。

データベース名:wordpress
ユーザー名:dbmaster
パスワード:H&ppyHands0n
データベースのホスト名:控えておいたDBエンドポイント

上の情報にてログインします。
IMG_1431.jpg

  • ユーザー名はadminでパスワードは控えておきます。
    IMG_1432.jpg
    次のログイン画面でadminと控えたパスワードからログインできます。

削除

コンソールから削除かaws cloudformation delete-stack --stack-name test-cfn-xxxを使用して作成した順番とは逆でスタック消していきます。

感想

テンプレートリファレンスを参照しながら、最低限のものならテンプレートの記述をできるようになった。
またテンプレートの細かい変更を反映していきながらスタックの更新を繰り返すことで、フィードバックを素早く行えるメリットを感じることができた。

参考記事

AWS リソースおよびプロパティタイプのリファレンス
AWS ハンズオン資料

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?