Ansibleを利用して、PHPのメモリ上限を変更してみた

PHPの動作でメモリの容量が不足しているエラーが出ることがあります。PHPにはデフォルトでメモリ上限が設定されているため、プログラムの処理に対するメモリ容量が小さい場合に起こるみたいです。

 

今回の記事では、Ansibleを利用してphp.iniファイルを修正し、メモリ上限を512Mに変更する方法を紹介します。

 

 

☆☆☆☆☆☆☆☆☆↓Ansibleが気になる方はこちらをチェック↓☆☆☆☆☆☆☆☆☆☆
 
https://cloud5.jp/saitou-ansible-summary/
 
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 

 

PHPの割り当てメモリを変更

■PHPのメモリ確認

まずは、PHPに設定されているデフォルトのメモリ上限を確認しておきましょう。

php -i | grep memory_limit

 

phpデフォルトメモリ確認

 

デフォルトのメモリ上限は"128M"ですね。WordPressを利用しているときは特に設定を変えなくても問題なかったと思うのですが、今後のために変更方法を覚えておきます。

 

 

■前提

サーバで直接PHPのメモリ上限を変更してもいいのですが、せっかくならAnsibleを利用してメモリ上限を上げてみます。

 

ansibleメモリ変更構成図

 

 

前提は以下の通りです。

 

  • AWS上で構築
  • Ansibleがインストール済みのコントロールノード×1台
  • コントロールノードと通信可能な管理ノード×1台

 

 

■Ansible Playbook作成

コントロールノードで以下のファイルを修正・作成します。

 

 

 

●ansible/hostsファイル修正

まずはansible/hostsファイルを修正していきます。

 

sudo vi /etc/ansible/hosts

 

"#ex1"行の下に以下の文章を挿入し、保存します。

 

# My Hosts
[devservers]
<管理ノードのIPアドレス>

 

 

ansible/hostsファイル
 

 

●Playbookファイル作成

続いてPlaybookファイルを作成します。ユーザー配下に作成していきましょう。

 

sudo vi setup_server.yaml

 

以下の記述を貼り付けて、保存します。

 

- name: Setup server
  hosts:
    - devservers
  become: True
  roles:
    - web_server_role

 

 

●ロールファイル

最後にロールファイルを作成します。ロールファイルを作成する場所は、"roles/web_server_role/tasks"配下です。

 

sudo mkdir -p roles/web_server_role/tasks
sudo vi roles/web_server_role/tasks/main.yaml

 

以下の記述を貼り付けて、保存します。

 

- name: Install php packages
  command: amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

- name: Install the latest version of httpd and MariaDB package
  command: yum install -y httpd mariadb-server

- name: Start httpd service
  service:
    name: httpd
    state: started

- name: Enable httpd service
  service:
    name: httpd
    enabled: yes

- name: Get httpd Installed version
  command: httpd -v

- name: Get status of httpd service
  command: systemctl status httpd

- name: Update memory_limit in php.ini
  lineinfile:
    path: /etc/php.ini
    regexp: '^memory_limit ='
    line: 'memory_limit = 512M'
    backup: yes
  register: result
  changed_when: result.changed

- name: Show output if memory_limit is changed
  debug:
    msg: "memory_limit in php.ini has been updated to 512M"
  when: result.changed

- name: Restart service php-fpm
  service:
    name: php-fpm
    state: restarted

- name: Create file
  file:
    path: /var/www/html/phpinfo.php
    state: touch

- name: Write content to the file
  blockinfile:
    path: /var/www/html/phpinfo.php
    block: |
      <?php
      // phpinfo.php
      phpinfo();
      ?>
    marker: "# {mark} ANSIBLE MANAGED BLOCK"

 

 

ファイルの修正・作成は以上です。

 

 

■動作確認

それではAnsibleを実行していきましょう。

 

ansible-playbook setup_server.yaml -v

 

[ec2-user@ip-10-0-1-107 ~]$ ansible-playbook setup_server.yaml -v
Using /etc/ansible/ansible.cfg as config file

PLAY [Setup server] ****************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
[WARNING]: Platform linux on host ansible-target is using the discovered Python interpreter at /usr/bin/python, but
future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [ansible-target]

~途中省略~

TASK [web_server_role : Update memory_limit in php.ini] ****************************************************************
changed: [ansible-target] => {"backup": "/etc/php.ini.4382.2023-07-22@07:57:29~", "changed": true, "msg": "line replaced"}

TASK [web_server_role : Show output if memory_limit is changed] ********************************************************
ok: [ansible-target] => {
    "msg": "memory_limit in php.ini has been updated to 512M"

~途中省略~

TASK [web_server_role : Create file] ***********************************************************************************
changed: [ansible-target] => {"changed": true, "dest": "/var/www/html/phpinfo.php", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "size": 0, "state": "file", "uid": 0}

TASK [web_server_role : Write content to the file] *********************************************************************
changed: [ansible-target] => {"changed": true, "msg": "Block inserted"}

PLAY RECAP *************************************************************************************************************
ansible-target             : ok=12   changed=10   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

 

 

failedはなく、okと表示されていますね。成功したようです。

 

↓実行結果の中身を見ると、メモリの上限もしっかり変更されています。

 

TASK [web_server_role : Show output if memory_limit is changed] ********************************************************
ok: [ansible-target] => {
    "msg": "memory_limit in php.ini has been updated to 512M"

 

 

念のためphpinfo関数を利用して、設定内容を見ておきます。

 

↓以下にアクセスして、"memory_limit"項目を確認してください。

 

http://<パブリックIPアドレス>/phpinfo.php

 

phpinfoでメモリ上限確認

 

 

今回の構築は以上です。

 

 

■余談

php.iniファイルを修正して、httpdを再起動しても修正した値が反映されませんでした。反映させるためには、php-fpmを再起動する必要があるようです。

 

 

まとめ:Ansibleを利用して、PHPのメモリ上限を変更してみた

Ansibleは構成管理に長けたツールですので、ソフトウェアのインストールはもちろん、設定ファイルの修正も可能です。ターゲットのサーバに入らずに作業でき、複数台に一気に修正を行えるのでぜひ試してみてください。

 

 

☆☆☆☆☆☆☆☆☆↓Ansibleが気になる方はこちらをチェック↓☆☆☆☆☆☆☆☆☆☆
 
https://cloud5.jp/saitou-ansible-summary/
 
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 

 

参考リンク:RedHat公式webサイト
 

 

↓ほかの協栄情報メンバーも自動化に関する記事を公開しています。ぜひ参考にしてみてください。

 

■Terraformの概要と使用方法(higa)
https://cloud5.jp/terraform_summary/

 

■AWS CodePipeline を利用してS3の静的ウェブサイトの更新を自動化する(tatsuoka)
https://cloud5.jp/tatsuoka-handson-beginner-codepipeline/

 

■AWS上にopenstackを構築(liuwanying)
https://cloud5.jp/openstack-install/

 

■Ansibleを利用してwindowsOSのインスタンスを操作する方法(umemoto)
https://cloud5.jp/control-windows-fromansible/

 

 
 

Last modified: 2023-07-24

Author