Microsoft SQL Server データベースに接続している Elastic Beanstalk PHP プラットフォームでアプリケーションをデプロイしようとしたときに表示されるエラーはどのように解決すればよいですか?
最終更新日: 2021 年 8 月 2 日
Microsoft SQL Server データベースに接続している AWS Elastic Beanstalk PHP プラットフォームでアプリケーションをデプロイしようとしています。そうすると、「PHP Fatal error: Uncaught Error: Call to undefined function sqlsrv_connect() in /var/app/current/DB/.」というエラーが表示されます。
簡単な説明
PHP を Microsoft SQL Server データベースに接続するには、まず SQLSRV ライブラリとその PDO 拡張機能をインストールして設定する必要があります。ライブラリと拡張機能は、デフォルトではインストールおよび設定されません。
このエラーを解決するには、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでスクリプトを実行する .ebextensions 設定ファイルを使用します。このスクリプトは、次の処理を行います。
- Microsoft SQL Server 用の正しいドライバーとツールをインストールする
- 必要な PHP ライブラリと拡張機能を有効にする
重要: 次の解決方法で使用される .ebextensions ファイルは、Amazon Linux 1 および Amazon Linux 2 Amazon Machine Image (AMI) インスタンスにでのみ使用できます。.ebextensions ファイルは、Elastic Beanstalk の Windows またはカスタム Ubuntu AMI インスタンスには適用されません。
解決方法
注意:次の解決方法は、任意の PHP プラットフォームバージョンの Elastic Beanstalk 環境に適用されます。
1. アプリケーションバンドルのルートに、.ebextensions という名前のディレクトリを作成します。
2. .ebextensions 設定ファイル(.ebextensions/pdo_sqlsrv.configなど) を作成します。例:
###################################################################################################
#### Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
####
#### Permission is hereby granted, free of charge, to any person obtaining a copy of this
#### software and associated documentation files (the "Software"), to deal in the Software
#### without restriction, including without limitation the rights to use, copy, modify,
#### merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
#### permit persons to whom the Software is furnished to do so.
###################################################################################################
###################################################################################################
#### THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
#### INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
#### PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
#### HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
#### OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
#### SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
###################################################################################################
commands:
install_mssql:
command: |
#!/bin/bash
# 0. EXIT if pdo_sqlsrv is already installed
if php -m | grep -q 'pdo_sqlsrv'
then
echo 'pdo_sqlsrv is already installed'
else
# 1. Register the Microsoft Linux repository
wget https://packages.microsoft.com/config/rhel/8/prod.repo -O /etc/yum.repos.d/msprod.repo
# 2. Install MSSQL and tools
ACCEPT_EULA=N yum install mssql-tools msodbcsql17 unixODBC-devel -y --disablerepo=amzn*
# The license terms for this product can be downloaded from http://go.microsoft.com/fwlink/?LinkId=746949 and found in /usr/share/doc/mssql-tools/LICENSE.txt . By changing "ACCEPT_EULA=N" to "ACCEPT_EULA=Y", you indicate that you accept the license terms.
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# 3. Install SQLSRV and its PDO extension, and stop pecl/pecl7 from overwriting php.ini
cp -f "/etc/php.ini" "/tmp/php.ini.bk"
pecl7 install sqlsrv pdo_sqlsrv || pecl install sqlsrv pdo_sqlsrv
cp -f "/tmp/php.ini.bk" "/etc/php.ini"
# 4. Manually add the extensions to the proper php.ini.d file and fix parameters
sqlvar=$(php -r "echo ini_get('extension_dir');") && chmod 0755 $sqlvar/sqlsrv.so && chmod 0755 $sqlvar/pdo_sqlsrv.so
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini
fi
3. アプリケーションソースバンドルを作成します。これはステップ 1 の .ebextensions ファイルを含みます。