Bref を使用した Amazon Web Services Lambda へのデプロイ
Overview
Bref PHPAmazon Web ServicesLambdaを使用すると、 にサーバーレス アプリケーションを配置できます。このチュートリアルでは、PHP MongoDBPHP拡張機能を使用して単純な アプリケーションを配置し、Atlas Amazon Web ServicesIAM 認証を使用して クラスターに接続します。
前提条件
Bref を使用してAmazon Web Services Lambdaに配置するには、次のコンポーネントを設定する必要があります。
アクセス キーを持つAmazon Web Servicesアカウント
サーバーレス フレームワーク
これらを設定する方法については、 設定のチュートリアル に従ってください Bref の公式ドキュメントの「 」を参照してください。
MongoDB 拡張機能のインストール
Bref は Lambda レイヤーを使用して PHP の実行を提供します。 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
、配置の構成
設定を検証するには、このデフォルト アプリケーションの配置を試してください。 これにより、Bref ロゴが含まれるウェブページをレンダリングする URL が出力されます。
$ serverless deploy
プロジェクトを初期化したので、 mongodb
拡張機能を追加します。 Bref/Extra-PHP-extended によって提供される拡張機能のリストで「Serverless config」名を見つけます 。これをserverless.yaml
の関数のlayers
に追加すると、このファイルは次のようになります。
plugins: - ./vendor/bref/bref - ./vendor/bref/extra-php-extensions functions: api: handler: index.php runtime: php-83-fpm layers: - ${bref-extra:mongodb-php-83}
Atlasサンプル データセットの惑星をリストするウェブページを持つ MongoDB ドライバーを使用します。 index.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> foreach ($planets as $planet) : <li>$planet->name </li> endforeach </ul> </body> </html>
新しいindex.php
を使用してアプリケーションを再配置します。
$ serverless deploy
MONGODB_URI
環境変数がまだ設定されていないため、アプリケーションはエラー メッセージを表示します。 次のセクションでは、この変数を設定する方法について説明します。
Amazon Web Services認証情報
Atlasは、 Amazon Web Servicesの認証情報を使用したパスワードレス認証をサポートしています。 Lambda Amazon Web Servicesは、配置された関数に割り当てられたロールを持つアクセス トークンとシークレット トークンを含む環境変数を設定します。
Lambdaコンソールで 関数を開きますAmazon Web Services
Configuration > Permissionで、 Role nameをコピーします
このロールを 組み込みロール を使用して Atlas クラスターに追加します。「任意のデータベースの読み取りと書込み」
統合Amazon Web Services アクセスを設定する方法については、 ドキュメントのAmazon Web Services 「 統合 アクセスの設定MongoDB Atlas 」 を参照してください。
権限が設定されたことで、Lambda 関数は Atlas クラスターにアクセスできるようになります。 Atlas エンドポイントを使用してアプリケーションを構成できます。
Atlas クラスターへのアクセスは、IP アドレスによっても制限されます。 IPから送信されるAmazon Web Services の範囲は非常に幅広い ため、あらゆる場所からのアクセスを許可できます。
注意
Atlas クラスターをインターネットから分離するために、 VPC ピアリング を使用することをお勧めします。 これには、 Lambda関数がこのAmazon Web Services VPCに配置されている必要があります。
Atlas UI Atlas > Deployment > Database > Connectで接続 URI を見つけます。 3. AWS IAMを選択します。 URI から<AWS access key>:<AWS secret key>
部分を削除すると、環境変数から認証情報が読み取られます。
環境変数MONGODB_URI
を渡すようにserverless.yml
ファイルを更新します。
provider: environment: MONGODB_URI: "mongodb+srv://cluster0.example.mongodb.net/?authSource=%24external&authMechanism=MONGODB-AWS&retryWrites=true&w=majority"
最後に、新しい構成で を配置します。 配置が完了すると、 関数 URL にアクセスして、Atlas クラスターの惑星リストを表示できます。
$ serverless deploy