今回は、Amazon EC2上に構成管理ツールAnsibleを使って、以下をインストール・設定します。AWSのCloud formationでも同様のことができるようですが、単純にAnsibleに興味があったのでやってみます。

  • PHP7.2
  • MySQL5.7
  • Apache

Amazon EC2インスタンスの起動

AWSのコンソールにログインして「Amazon Linux 2」を選択し、起動します。タイプは「t2.micro」にしました。

Ansibleのインストール

sshでEC2インスタンスにアクセスして、以下のコマンドを実行します。
 
1.Amazon Linux 2でEPEL rpmパッケージをインストールして有効にします。

$ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

 
2.Ansibleのインストール

$ sudo yum -y install ansible

 
3.Ansibleのバージョン確認

$  ansible --version
ansible 2.7.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ec2-user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.14 (default, Jul 26 2018, 19:59:38) [GCC 7.3.1 20180303 (Red Hat 7.3.1-5)]

これでAnsibleのインストールは完了です。

ymlファイルを作成する

sudo vi lamp.yml
- hosts: 127.0.0.1
  connection: local
  become: yes
  tasks:
    - name: Apacheのインストール
      yum: name=httpd state=latest

    - name: apacheの起動、自動起動の設定
      service: name=httpd state=started enabled=yes

    - name: mysql8.0リポジトリの追加(5.7も含まれている)
      yum: name=https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

    - name: mysql8.0リポジトリの無効化
      command: >
        yum-config-manager --disable mysql80-community

    - name: mysql5.7リポジトリの有効化
      command: >
        yum-config-manager --enable mysql57-community

    - name: MySQLのリポジトリを追加
      yum: name=mysql-community-server

    - name: mysqlの起動、自動起動の設定
      service: name=mysqld state=started enabled=yes

    - name: php7.2のインストール
      command: >
        amazon-linux-extras install php7.2

    - name: PHPの拡張モジュールをインストール
      yum:
        name: "{{ packages }}"
        state: present
      vars:
        packages:
        - php-cli
        - php-common
        - php-devel
        - php-fpm
        - php-gd
        - php-mysqlnd
        - php-mbstring
        - php-xml

lamp.ymlを保存します。これでAnsibleを実行する準備が出来ました。

補足

localhostで実行

hosts: 127.0.0.1
connection: local

 
rootユーザーで実行

become: yes

Ansibleの実行

早速、実行してみます。WARNINGが出ましたが、とりあえず実行出来ました。

$ ansible-playbook lamp.yml
 [WARNING]: provided hosts list is empty, only localhost is available. Note that the
implicit localhost does not match 'all'


PLAY [127.0.0.1] *********************************************************************

TASK [Gathering Facts] ***************************************************************
ok: [127.0.0.1]

TASK [Apacheのインストール] *****************************************************************
changed: [127.0.0.1]

TASK [apacheの起動、自動起動の設定] *************************************************************
changed: [127.0.0.1]

TASK [mysql8.0リポジトリの追加(5.7も含まれている)] **************************************************
changed: [127.0.0.1]

TASK [mysql8.0リポジトリの無効化] *************************************************************
changed: [127.0.0.1]

TASK [mysql5.7リポジトリの有効化] *************************************************************
changed: [127.0.0.1]

TASK [MySQLのリポジトリを追加] ****************************************************************
changed: [127.0.0.1]

TASK [mysqlの起動、自動起動の設定] **************************************************************
changed: [127.0.0.1]

TASK [php7.2のインストール] *****************************************************************
changed: [127.0.0.1]

TASK [PHPの拡張モジュールをインストール] ************************************************************
ok: [127.0.0.1]

PLAY RECAP ***************************************************************************
127.0.0.1                  : ok=10   changed=9    unreachable=0    failed=0

問題なくインストールされたか確認

Apache・MySQL・PHPの各バージョンを確認してみます。

$ httpd -v
Server version: Apache/2.4.39 ()
Server built:   Apr  4 2019 18:09:28
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using  EditLine wrapper
$ php -v
PHP 7.2.16 (cli) (built: Apr  3 2019 18:39:35) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Apacheの起動をブラウザで確認

AWSのコンソールを操作します。セキュリティグループの80番ポートをあけて保存します。
ansible-lamp

ブラウザの検索バーにIPv4のパブリックIPを入れてみると、Apacheのテストページが表示されました。
aws-amazonlinux2-apache3

他、Ansibleの便利なコマンド

playbookの文法があっているか確認

$ ansible-playbook lamp.yml --syntax-check

実際にplaybookが実行されたらどうなるか確認

$ ansible-playbook lamp.yml --check

最後に

Ansibleの説明は以上です。まだまだ改善の余地はありそうですが、意外と簡単に実行出来ました。

参考

AWSのEC2で行うAmazon Linux2(MySQL5.7)環境構築

Amazon Linux2でLAMP環境を構築