PHP 関数がサードパーティのライブラリに依存している場合、Function Compute にデプロイする前に、これらの依存関係をコードと一緒にパッケージングする必要があります。このガイドでは、PHP の依存関係をインストールし、コードを ZIP アーカイブにパッケージングして Function Compute にデプロイするための 2 つの方法を説明します。この例では、Nette\Utils サードパーティライブラリを使用します。
ZIP 構造の要件
index.php ハンドラは、サブディレクトリ内ではなく、ZIP アーカイブのルートに配置する必要があります。ハンドラがフォルダ内にネストされている場合、Function Compute はハンドラを特定できず、関数の呼び出しは失敗します。
デプロイ方法の選択
| 方法 | 最適な用途 |
|---|---|
| Composer + コンソールからのアップロード | 一度限りの迅速なデプロイとローカルテスト |
| Serverless Devs | チームでのワークフロー、CI/CD パイプライン、および任意の OS 上での Linux 互換ビルド |
Windows 上で開発し、Linux ランタイムをターゲットにしている場合は、Serverless Devs の方法を使用してください。Windows 上でローカルに PHP 拡張機能をインストールすると、Linux 実行環境と互換性のないバイナリが生成される可能性があります。
サンプルコードのセットアップ
mycodeという名前のディレクトリを作成します。Linux または macOS の場合:mkdir -p /tmp/mycodeWindows の場合: フォルダを作成し、
mycodeという名前を付けます。mycodeディレクトリに、次の内容でindex.phpを作成します。<?php require_once __DIR__ . '/vendor/autoload.php'; use Nette\Utils\Arrays; function handler($event, $context) { return Arrays::contains([1, 2, 3], 1); }
Composer とコンソールを使用したデプロイ
前提条件
開始する前に、次のことを確認してください。
PHP と Composer がインストールされており、Composer コマンドを実行する権限があること。インストール手順については、Composer をご参照ください。
(任意) Function Compute コンソールで PHP 関数が作成されていること。詳細については、「関数の作成」をご参照ください。
依存関係のインストール、パッケージング、およびアップロード
mycodeディレクトリに、composer.jsonを作成します。{ "require": { "nette/utils": "v3.2.5" } }mycodeディレクトリでcomposer installを実行して、依存関係をインストールします。Composer はcomposer.lockとvendor/ディレクトリを生成します。ダウンロードされた依存関係はvendor/に保存されます。mycodeディレクトリ内のすべてのファイルを ZIP アーカイブに圧縮します。Linux または macOS の場合 —mycodeディレクトリ内から実行します。zip code.zip -r ./*ディレクトリに対する読み取りおよび書き込み権限があることを確認してください。
Windows の場合 —
mycodeディレクトリに移動し、すべてのファイルを選択して右クリックし、ZIP パッケージに圧縮します。index.phpがサブディレクトリ内ではなく、ZIP アーカイブのルートにあることを確認してください。ネストされている場合、Function Compute はハンドラを呼び出すことができません。Function Compute コンソールで、関数の詳細ページを開きます。右上隅にある [コードのアップロード] をクリックし、ZIP アーカイブをアップロードします。または、関数の作成時に ZIP アーカイブをアップロードすることもできます。詳細については、「関数の作成」をご参照ください。
[コード] タブで [関数のテスト] をクリックして、デプロイを検証します。
Serverless Devs を使用したデプロイ
前提条件
開始する前に、「Serverless DevsとDockerのインストール」を完了してください。
依存関係のインストールとデプロイ
mycodeディレクトリにs.yamlを作成します。edition: 1.0.0 # YAML 構文のバージョン。セマンティックバージョニングの仕様に準拠しています。 name: fcDeployApp # プロジェクト名。 access: "default" # キーのエイリアス。 services: fc-deploy-test: # サービス名。 component: fc # コンポーネント名。 props: # コンポーネントのプロパティ値。 region: cn-shanghai service: name: fctest description: 'test' internetAccess: true function: name: testphp description: this is a test runtime: php7.2 codeUri: ./ handler: index.handler memorySize: 128 timeout: 6次のコマンドを実行して、Docker コンテナ内に依存関係をインストールします。
sudo s build --use-dockerビルドが完了すると、Serverless Devs は
mycode内に.s/ディレクトリを作成します。ビルドアーティファクトは.s/build/artifacts/fctest/testphp/vendorに保存されます。関数を Function Compute にデプロイします。
sudo s deploy
次のステップ
コードパッケージにバンドルせずに依存関係を管理するには、レイヤー機能を使用して、複数の関数間で依存関係レイヤーを共有します。