How do I install PECL 7 modules on Elastic Beanstalk environments using the PHP 8.1 with Amazon Linux 2 platform branch?

2 minute read
1

I want to install Redis, Memcached, or other modules for PECL 7 on an AWS Elastic Beanstalk environment using the PHP 8.1 with Amazon Linux 2 platform branch.

Short description

To install PECL 7 modules, you must create a configuration file (.ebextension) that includes commands to:

  • Install dependencies
  • Install the PECL module
  • Create or modify configuration files

Resolution

Complete the following steps:

  1. Set up the .ebextensions directory in the root of the source bundle of your application. For example:

    |-- .ebextensions
    |        |-- redis/memcached.config
    |        |-- other .config files
    |-- other application files

    For more information, see Advanced environment customization with configuration files (.ebextensions) and Extending Elastic Beanstalk Linux platforms.
    Note: All configuration files are stored in the .ebextensions folder. The Elastic Beanstalk environment uses only files that end with the .config extension.

  2. In the .ebextensions directory, create a configuration file that includes the following commands for your module.

    For Redis modules

    commands:
      01_install_redis:
        command: /usr/bin/yes 'no' | /usr/bin/pecl install redis
        test: '! /usr/bin/pecl info redis'
      02_remove_extension:
        command: /bin/sed -i -e '/extension="redis.so"/d' /etc/php.ini
      03_create_conf:
        command: /bin/echo 'extension="redis.so"' > /etc/php.d/41-redis.ini

    The Redis configuration file does the following:
    Installs the Redis module and tests for installation success (01_install_redis).
    Removes the Redis extension from the /etc/php.ini file (02_remove_extension).
    Creates a configuration file with the name 41-redis.ini at /etc/php.d/ (03_create_conf).

    For Memcached modules

    packages:
      yum:
        libmemcached-devel: []
    commands:
      01_install_memcached:
        command: /usr/bin/yes 'no'| /usr/bin/pecl install memcached
        test: '! /usr/bin/pecl info memcached'
      02_remove_extension:
        command: /bin/sed -i -e '/extension="memcached.so"/d' /etc/php.ini
      03_create_conf:
        command: /bin/echo 'extension="memcached.so"' > /etc/php.d/41-memcached.ini

    The Memcached configuration file does the following:
    Installs the Memcached module and tests for installation success (01_install_memcached).
    Removes the Redis extension from the /etc/php.ini file (02_remove_extension).
    Creates a configuration file called 41-memcached.ini at /etc/php.d/ (03_create_conf).

    Note: Always test a new .ebextension before adding to a production environment.

AWS OFFICIAL
AWS OFFICIALUpdated 9 months ago
2 Comments

When running command 01_install_redis, it sometimes fails with the error Exited with error code 139. The log before this states install ok and Extension redis enabled in php.ini.

It doesn't happen on every deploy, only sometimes. Any workarounds for this?

replied 4 months ago

Thank you for your comment. We'll review and update the Knowledge Center article as needed.

profile pictureAWS
MODERATOR
replied 4 months ago