Docs Menu

Bref を使用したAmazon Web Services Lambdaへの配置

このガイドでは、Bref を使用してサーバーレスPHPアプリケーションをAmazon Web Services Lambdaに配置する方法を学習できます。このガイドでは、 PHPライブラリを使用して構築されたPHPアプリケーションを配置し、 Amazon Web Services IAM認証を使用して Atlas クラスターに接続する方法を説明します。

Bref を使用してAmazon Web Services Lambdaに配置する前に、次のコンポーネントを設定する必要があります。

Bref ドキュメントの「 セットアップ 」チュートリアルでは、これらのコンポーネントを準備する方法について説明しています。

Bref はLambdaレイヤーを使用してPHP の実行を提供します。brefレイヤーはBref をアプリケーションに統合し、 PHPやその他のいくつかの拡張機能でコンパイルされます。mongodb などの他の必要な拡張機能は、他のレイヤーにインストールできます。

次のコマンドで新しいプロジェクトディレクトリを作成し、 MongoDBと Bref の依存関係をインストールします。

mkdir bref-mongodb-app && cd bref-mongodb-app
composer init
composer require bref/bref bref/extra-php-extensions mongodb/mongodb

次に、bref コマンドを使用してサーバーレス構成を初期化します。

vendor/bin/bref init

コマンドが完了すると、プロジェクトには次のファイルが含まれます。

  • composer.json: vendorディレクトリにインストールされているPHP依存関係を一覧表示します

  • index.php:サンプルウェブページを定義します

  • serverless.yml: 配置を構成する

プロジェクトを初期化 したら、mongodb 拡張機能を追加できます。brewf/Extra-Performance パッケージで提供される拡張機能のリストで、Serverless config 名を見つけます。次のコードに示すように、serverless.yamlファイル内の関数の layers にそれを追加します。

plugins:
- ./vendor/bref/bref
- ./vendor/bref/extra-php-extensions # Adds the extra Serverless plugin
functions:
api:
handler: index.php
runtime: php-83-fpm
layers:
- ${bref-extra:mongodb-php-81} # Adds the MongoDB layer

Atlasサンプルデータから惑星を一覧表示するウェブページを作成するには、 index.phpの内容を次のコードで置き換えます。

<?php
use MongoDB\Client;
require_once __DIR__ . '/vendor/autoload.php';
$uri = getenv('MONGODB_URI');
try {
$client = new Client($uri);
$planets = $client
->selectCollection('sample_guides', 'planets')
->find([], ['sort' => ['orderFromSun' => 1]]);
} catch (Throwable $exception) {
exit($exception->getMessage());
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>MongoDB Planets</title>
</head>
<body>
<ul>
<?php foreach ($planets as $planet) : ?>
<li><?= $planet->name ?></li>
<?php endforeach ?>
</ul>
</body>
</html>

Tip

検索操作

上記のコードでは、MongoDB\Collection::find() メソッドを使用してドキュメントを検索します。このメソッドの詳細については、「データの取得」ガイドを参照してください。

Atlas は、Amazon Web Services の認証情報を使用する場合にスワードレス認証をサポートしています。 Amazon Web Services は、Lambdaの配置に割り当てられたロールのアクセス トークンとシークレット トークンを含む環境変数を設定します。

次の手順は、Atlas クラスターで ロールを設定する方法を示しています。

  1. Amazon Web ServicesコンソールでLambda関数を開きます。

  2. Configuration > Permission に移動し、Role name をコピーします。

  3. このロールを Database Access セクションの Atlas クラスターに追加します。AWS IAM認証方法を選択し、組み込みロール Read and write any database を設定します。

統合Amazon Web Servicesアクセスを設定する方法については、Atlas ドキュメントの「統合Amazon Web Servicesアクセスの設定」を参照してください。

権限を構成すると、 Lambda関数は Atlas クラスターにアクセスできるようになります。次に、Atlas エンドポイントを使用するようにアプリケーションを構成します。

Atlas クラスターへのアクセスは、 IPアドレスによっても制限されます。Amazon Web Servicesから送信されるIPアドレスの範囲は非常に幅広いため、あらゆる場所からのアクセスを許可できます。 ユニバーサル アクセスを許可する方法については、Atlas ドキュメントの「IPアクセス リスト エントリの構成」を参照してください。

注意

Atlas クラスターをインターネットから分離するには、仮想プライベートクラウド(VPC)ピアリングの使用が推奨されます。これには、 Lambda関数がAmazon Web Services VPCに配置されている必要があります。 詳細については、Atlas ドキュメントの「ネットワークピアリング接続の設定」を参照してください。

次に、接続文字列をコピーし、認証情報が環境変数から読み取られるため、<AWS access key>:<AWS secret key> セクションを削除します。

プロジェクトの serverless.ymlファイルで、MONGODB_URI 環境変数を接続文字列に設定します。

provider:
environment:
MONGODB_URI: "<connection string without credentials>"

MONGODB-AWS認証メカニズムの使用の詳細については、 認証メカニズムガイドの「MONGODB- AWS 」セクションを参照してください。

最後に、アプリケーションを配置します。

serverless deploy

配置が完了すると、 URLにアクセスし、コレクションの惑星リストを表示できます。