へろへろもへじ

(ブログタイトル募集中)

AWS SDK for PHP 2でAmazonSQSをいじってみた

SDKの1系と2系で全然使い方が違うかつ、2系の日本語の情報があまりWebになかったので、備忘録として残しておきます。

SDKPEARでインストールする

$sudo pear channel-discover pear.amazonwebservices.com
$sudo pear -D auto_discover=1 install aws/sdk

APIを使っていろいろやってみる

<?php

require 'AWSSDKforPHP/aws.phar';

use Aws\Sqs\SqsClient as SqsClient;

// 0.前準備
$config = array (
    'key' => 'your access key',
    'secret' => 'your secret key',
    'region' => 'ap-northeast-1'
);
$client = SqsClient::factory($config);

// 1.キューのURLを取得してみる
$listqueues = $client->listQueues();
$queueUrls = $listqueues['QueueUrls'];
foreach ($queueUrls as $queueUrl) {
    print_r "queueUrl:" . $queueUrl;
}

// 2.キューを生成してみる
$result = $client->createQueue(array('QueueName' => 'my-queue'));
$queueUrl = $result->get('QueueUrl');
print_r "queueUrl:" . $queueUrl;

// 3.キューを消してみる
$result = $client->deleteQueue(array('QueueUrl' => 'https://sqs.ap-northeast-1.amazonaws.com/123456789/my-queue'));
var_dump($result);

// 4.メッセージを送ってみる
$client->sendMessageBatch(array('QueueUrl' => 'https://sqs.ap-northeast-1.amazonaws.com/123456789/test',
                               'Entries' => array(array('Id' => '1', 'MessageBody' => 'hoge'))
));

// 5.キューからメッセージを取り出してみる
foreach ($queueUrls as $queueUrl) {
    $result = $client->receiveMessage(array(
        'QueueUrl' => $queueUrl,
    ));
    foreach ($result->getPath('Messages/*/Body') as $messageBody) {
        print_r "message:" . $messageBody;
    }
}

こんな感じです。使い方さえわかってしまえばシンプルに書けますね。ソースをざっくり見た感じSDk2系では1系で生で使っていたクラスがSqsClientにラッピングされてるようですね。
次はこれらを駆使して、

  • 予め用意しておいたキューにメッセージ(実行対象のバッチファイル名)を送信する
  • メッセージを等間隔で取得しにいき、メッセージがあればexec関数でバッチを実行する
  • エラー用のキューも予め用意しておき、エラーが発生したらメッセージ(エラーが発生したバッチファイル名)を送信する

こんな試作をしてみようと思います。

参考サイト