Bref を使用したAmazon Web Services Lambdaへの配置
項目一覧
Overview
このガイドでは、Bref を使用してサーバーレスPHPアプリケーションをAmazon Web Services Lambdaに配置する方法を学習できます。このガイドでは、 PHPライブラリを使用して構築されたPHPアプリケーションを配置し、 Amazon Web Services IAM認証を使用して Atlas クラスターに接続する方法を説明します。
始める前に
Bref を使用してAmazon Web Services Lambdaに配置する前に、次のコンポーネントを設定する必要があります。
Amazon Web Services のアカウントとアクセスキー
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拡張機能を構成に追加する
プロジェクトを初期化 したら、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
の内容を次のコードで置き換えます。
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>
Tip
検索操作
上記のコードでは、MongoDB\Collection::find()
メソッドを使用してドキュメントを検索します。このメソッドの詳細については、「データの取得」ガイドを参照してください。
Amazon Web Services の認証情報を設定
Atlas は、Amazon Web Services の認証情報を使用する場合にスワードレス認証をサポートしています。 Amazon Web Services は、Lambdaの配置に割り当てられたロールのアクセス トークンとシークレット トークンを含む環境変数を設定します。
次の手順は、Atlas クラスターで ロールを設定する方法を示しています。
Amazon Web ServicesコンソールでLambda関数を開きます。
Configuration > Permission に移動し、Role name をコピーします。
このロールを 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にアクセスし、コレクションの惑星リストを表示できます。