🧚

Amazon SDK for PHP v3を使ってSQSのキューからメッセージを送信する

2022/08/02に公開

この度、業務で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種類が提供されています。

https://www.fenet.jp/aws/column/tool/465/#:~:text=AWS SDKとはAWS,することが可能です。

要するにコードから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

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html

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の情報を見に行ってます
アクセスが拒否されてしまう場合は、正しいアクセスキーになっているか確認しましょう

これでキューからメッセージを送信する処理自体は出来上がりです!
細かい設定もありますがそこは分かり次第追記します

引用

AWS SDK for PHP から AWS SQSを使ってみた
PHPでSQS

Discussion