開発環境
- Laravel9
- AWS SQS(Simple Queue Service)
概要
LaravelでAWS SQS(Simple Queue Service)にキューを送信して、
Lambda処理を始めるトリガーにする必要がありました。
SQSを今まで使用したことがなく、使ってみると意外と便利だったため備忘録として残します。
SQSをルーティングするSNSに関する詳細は、こちらを御ご覧ください
SDKをインストール
最初に、AWS SDK for PHPをLaravelプロジェクトにインストールします。
composer require aws/aws-sdk-php
環境設定
AWSの設定を .env
ファイルに追加します
AWS_ACCESS_KEY_ID=IAMユーザーのアクセスキー
AWS_SECRET_ACCESS_KEY=IAMユーザーのシークレットキー
AWS_DEFAULT_REGION=あなたのリージョン
AWS_SQS_QUEUE=あなたのSQSキューのURL
SQSクライアントの作成
SQSクライアントを作成します。
新しく app/Services/SqsService.php
ファイルを作成し、以下のように記述します
<?php
<?php
namespace App\Services;
use Aws\Sqs\SqsClient;
class SqsService
{
protected $client;
public function __construct()
{
$this->client = new SqsClient([
'version' => 'latest',
'region' => env('AWS_DEFAULT_REGION'),
'credentials' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
],
]);
}
public function sendMessage($message, $queueUrl = null)
{
$queueUrl = $queueUrl ?? env('AWS_SQS_QUEUE');
$this->client->sendMessage([
'QueueUrl' => $queueUrl,
'MessageBody' => $message,
]);
}
}
やっていること
※クライアントはAWSのSDKで各サービスのメソッドを扱う時に毎回作成するものです。
- コンストラクタ関数 (
__construct()
): この関数は、クラスのインスタンスが作られるときに自動的に呼び出されます。ここでは、SQSクライアントの初期設定を行っています。version
: AWSのサービスを使用するためのAPIバージョンを指定します。ここでは 'latest' を指定していますが、これは最新のAPIバージョンを自動的に選択するという意味です。region
: AWSのリージョンを指定します。ここでは環境変数からリージョンを取得しています。credentials
: AWSにアクセスするための認証情報を指定します。key
とsecret
には、それぞれAWSのアクセスキーとシークレットキーを指定します。ここでも環境変数からこれらの値を取得しています。
sendMessage()
関数: この関数は、指定したSQSキューにメッセージを送信します。QueueUrl
: メッセージを送信するSQSキューのURLを指定します。関数の第2引数としてURLを渡すことも可能ですが、渡されない場合は環境変数からデフォルトのキューURLを取得します。MessageBody
: 送信するメッセージを指定します。ここには任意の文字列を指定できます。
通知の実装
最後に、通知を行うメソッドを実装します。
以下は例として app/Http/Controllers/NotificationController.php
に実装しています
?php
namespace App\Http\Controllers;
use App\Services\SqsService;
use Illuminate\Http\Request;
class NotificationController extends Controller
{
protected $sqsService;
public function __construct(SqsService $sqsService)
{
$this->sqsService = $sqsService;
}
public function sendNotification(Request $request)
{
$message = $request->input('message');
$this->sqsService->sendMessage($message);
return response()->json([
'status' => 'success',
'message' => 'Notification sent',
]);
}
}
以上で、SQS通知の設定は完了です。
リクエストにメッセージを含め、指定されたキューに対して通知を送ることができます。