🧚
Amazon SDK for PHP v3を使ってSQSのキューからメッセージを送信する
この度、業務でSQSのキューにメッセージを送信する処理を作成する機会があったので知識の向上と備忘録として記事を作成しました!
PHPからSQSのキューを操作したかったのでAmazon SDK for PHPを使用してます!
前提
- AWS CLIが導入済みであること
- SQSのキューが作成してあること
環境
技術 | バージョン |
---|---|
PHP | 7.3.3 |
aws-sdk-php | 3.2.31 |
AWS CLI | 2.7.17 |
AWS SDKとは
AWSが提供している各言語、環境に合わせた開発ツールです。
各プログラミング言語に合わせたSDKとして9種類、モバイル環境やモバイル用プログラミング言語に合わせたSDKとして6種類が提供されています。
要するにコードからAWSのサービスをいじることができます!
aws-sdk-phpをインストール
$ composer require aws/aws-sdk-php
認証情報の設定
SqsClientに接続するために認証情報を設定します
aws configure
で設定すると楽チンです!
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json
credentials
に直接設定してもいけます
Macの場合
$ cat $HOME/.aws/credentials
[default]
aws_access_key_id = ACCESS_KEY
aws_secret_access_key = SECRET_KEY
Mac, Windows共にホームディレクトリ配下にインストールされているはずです
環境変数の設定
aws configure
が設定されていれば恐らく必要ないですが、アクセスできなかったら設定してください!
Macの場合
$ export AWS_ACCESS_KEY_ID=<access_key>
$ export AWS_SECRET_ACCESS_KEY=<secret_key>
SDK for PHPでSQSのキューにメッセージを送信
各種設定が完了したのでPHPでSQSのキューにメッセージを送信する処理を書きます!
キューは標準キューとFIFOがあるが今回はFIFOを使用
至ってシンプルに送信するだけのコードはこちら
<?php
require_once 'vendor/autoload.php';
use Aws\Sqs\SqsClient;
use Aws\Exception\AwsException;
$queueUrl = "https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxx/yyyyyyyy.fifo";
try{
$client = new SqsClient([
'profile' => 'default',
'region' => 'ap-northeast-1',
'version' => 'latest',
]);
$client->sendMessage([
'QueueUrl' => $queueUrl,
'MessageBody' => 'テスト',
'MessageGroupId' => 'test_group', // FIFOでは必須、グループごとに順序が守られる
'MessageDeduplicationId' => time(), //メッセージ重複排除
]);
} catch(AwsException $e){
var_dump($e->getMessage());
}
$client = new SqsClient([
'profile' => 'default',
'region' => 'ap-northeast-1',
'version' => 'latest',
]);
profileがプロファイル名のことを指しており、.aws/credentialsで設定したdefaultの情報を見に行ってます
アクセスが拒否されてしまう場合は、正しいアクセスキーになっているか確認しましょう
これでキューからメッセージを送信する処理自体は出来上がりです!
細かい設定もありますがそこは分かり次第追記します
Discussion