[AmazonSQS][Perl] Amazon::SQS::Simpleでリージョンを指定する方法

前回の記事で、Amazon::SQS::Simpleを使ってキューにメッセージを入れたり出したりする方法を紹介しました。
ところが、Amazon::SQS::Simpleをそのまま(ドキュメント通りに)使うとリージョンがUS Eastに決め打ちになってしまいます。

今回は、リージョンを指定する方法を紹介します。
ドキュメントにはやり方が書いてなかったのでソースコードを読んで調べました。

Tokyoリージョンにキューを作成する

use strict;
use warnings;
use Amazon::SQS::Simple;

my $access_key = 'hogehoge';
my $secret_key = 'fugafuga';

# SQSオブジェクトを作成します。
my $sqs = new Amazon::SQS::Simple( $access_key, $secret_key );

# ここでエンドポイントを強引に変更
$sqs->{Endpoint} = "https://ap-northeast-1.queue.amazonaws.com";

# キューを作成します。(東京リージョンにキューが作られます)
my $q = $sqs->CreateQueue('test_tokyo');

# キューにメッセージを送付します。
my $msg = 'Hello World into Tokyo';
$q->SendMessage($msg);
$sqs->{Endpoint}を強引に書き換えてしまうのがミソです。

Tokyoリージョンのキューからメッセージを受け取る

use strict;
use warnings;

use Amazon::SQS::Simple;

my $access_key = 'hogehoge';
my $secret_key = 'fugafuga';

my $sqs = new Amazon::SQS::Simple( $access_key, $secret_key );

$sqs->{Endpoint} = "https://ap-northeast-1.queue.amazonaws.com";
# Createと書いているが実は既存キューの取得
my $q = $sqs->CreateQueue('test_tokyo');

my $msg = $q->ReceiveMessage() or die "no messages left";
print $msg->MessageId() . "\n". $msg->MessageBody() . "\n";
キュー固有のURLが事前にわかる場合は、
$sqs->{Endpoint} = "https://ap-northeast-1.queue.amazonaws.com";
my $q = $sqs->CreateQueue('test_tokyo');
と書く代わりに
my $q = $sqs->GetQueue('https://ap-northeast-1.queue.amazonaws.com/1234567890/test_tokyo');
のように書くこともできます。(1234...の部分は読み替えてください)

これで、好きなリージョンでキューを作成してメッセージをやり取りすることができます。

(ただしこれはオフィシャルな方法ではないので、もっとよいやり方があれば教えてください)
Enjoy!
カテゴリ:

人気記事