Microsoft SQL Server データベースに接続する Elastic Beanstalk PHP 7.3 プラットフォームで Flask アプリケーションをデプロイしようとしたときに表示されるエラーをどのように解決すればよいですか?

最終更新日: 2020 年 10 月 21 日

Microsoft SQL Server データベースに接続する AWS Elastic Beanstalk PHP 7.3 プラットフォームに Flask アプリケーションをデプロイしようとすると、次のようなエラーが発生します。「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 Amazon Machine Image (AMI) インスタンスにのみ適用されます。.ebextensions ファイルは、Elastic Beanstalk の Windows またはカスタム Ubuntu AMI インスタンスには適用されません。

解決方法

注意: 以下の解決方法は、PHP プラットフォームバージョン 7.3 の Elastic Beanstalk 環境に適用され、他の PHP プラットフォームバージョンでは期待どおりに動作しない場合があります。

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:
  01_pdo_sqlsrv:
    command: |
      # 0. EXIT if pdo_sqlsrv is already installed
      if php -m | grep -q 'pdo_sqlsrv'; then echo 'hi'; fi;

      # 1. Register the Microsoft Linux repository
      curl https://packages.microsoft.com/config/centos/7/prod.repo | tee /etc/yum.repos.d/mssql-tools.repo;

      # 2. Install MSSQL and tools
      ACCEPT_EULA=N yum install mssql-tools 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.

      # 3. Update the PEAR Archive_Tar package and update PEAR
      curl https://raw.githubusercontent.com/pear/Archive_Tar/1.4.3/Archive/Tar.php > `pear config-get php_dir`/Archive/Tar.php;
      pear upgrade -f Archive_Tar; # Don't forget to actually update it

      # 4. Install SQLSRV and its PDO extension and configure it correctly
      pear config-set php_ini ''; # Disable PECL's php.ini update
      pecl7 install sqlsrv pdo_sqlsrv;
      chmod 0755 `pear config-get ext_dir`/sqlsrv.so; # Fix perms
      chmod 0755 `pear config-get ext_dir`/pdo_sqlsrv.so; # Fix perms
      echo "extension=sqlsrv.so" | tee /etc/php.d/sqlsrv.ini;
      echo "extension=pdo_sqlsrv.so" | tee /etc/php.d/pdo_sqlsrv.ini;
      pear config-set php_ini /etc/php.ini; # Reenable PECL's php.ini update

      # 5. Restart Apache service
      service httpd restart;

3.    アプリケーションソースバンドルを作成します。これはステップ 1 の .ebextensions ファイルを含みます。

4.    更新した Elastic Beanstalk アプリケーションをデプロイします。</p


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?