前提情報
- PHP7.4
- Laravel 6.x
- ECS/Fargate
エラーの原因と詳細
ローカル環境にあるredisコンテナには接続できたので、次にAWS上でElascitCacheの動作確認をするため、ECS/Fargate環境へデプロイしたらUnable to find the socket transport “ssl” – did you forget to enable it when you configured PHP?
というエラーが発生してElasticCacheへ接続できない状況でした。
Redisクライアント(phpredis)から外部(ElasticCache)へ接続するときに、PHPのOpenSSLモジュールが有効になっていないのが原因っぽい。(Redisに限らず、外部へHTTPS接続する際にはOpenSSLモジュールを有効にしないといけないようです)
というか、そもそもLaravelのドキュメントにOpenSSLは必須だよって書いてあったのでそもそも最初から有効にされているべきものでしたね。。(リンクは9.xですが、6.xでも同じ)
解決方法
アプリケーションを動かしているイメージのDockerfileにlibssl-dev
とopenssl
パッケージを追加し、OpenSSLを有効にする。
FROM php:7.4-fpm
…(省略)
RUN apt-get update \
&& apt-get install -y \
zlib1g-dev \
…(省略)
vim \
+ libssl-dev \
+ openssl \
Docker環境においてPHPの拡張モジュールを有効にするとき、よく docker-php-ext-install pdo_mysql
などと書くが、OpenSSLに関してはこのように書かなくても有効になるようです。
このあたりに関してなにか補足などありましたらコメント頂けるとうれしいです!!
参考サイト