【AWS発表】 AWS SDK for Rubyを提供開始 - Amazon Web Services ブログ |
大変喜ばしい!というわけで、ちょっとだけ試してみたメモです。
AWS::SNSを試してみる
一年以上前に、Amazon SNSのRubyライブラリをRightAwsを元に作ったんですが、もう不要になりました。万歳!SDKの導入方法はこの辺を見ていただくとして、例えばTopicを全て総ざらいして、その中のSubscriptionを取得するにはこんな感じになります。
# -*- coding: utf-8 -*- require 'rubygems' require 'aws-sdk' AWS.config(:access_key_id => 'アクセスキー', :secret_access_key => 'シークレットキー') sns = AWS::SNS.new sns.topics.each do |topic| puts topic.name topic.subscriptions.each do |sub| puts sub.arn end end実にいい感じですね。
Messageをpublishするには、Topicオブジェクトにpublishしてあげるだけです。
topic.publish('デフォルトメッセージ', :subject => 'Test', :email => 'ほげほげ')
送信先がメールの場合、:subject に日本語をそのまま与えるとエラーになりますんで、例のごとくJISエンコードしてあげます。
subject = '=?ISO-2022-JP?B?' + Kconv.tojis('日本語サブジェクト') .split(//,1).pack('m').chomp + '?=' topic.publish('デフォルトメッセージ', :subject => subject, :email => 'ほげほげ')
~を含むとpublishに失敗するぞ!
まだちゃんと検証していないのですが、問題を発見しましたので報告しておきますw先のpublishですが、メッセージの本文に~(0x007E)があると、AWS::SNS::Errors::SignatureDoesNotMatchになってしまいます。
※ちなみに \(~0~)/ を試して気がつきましたw
topic.publish('デフォルトメッセージ', :subject => 'Test', :email => '~')
以下、エラーメッセージ
E, [2011-07-20T20:45:38.321580 #3504] ERROR -- : [AWS SNS 403 0.870669] publish {:message_structure=>"json", :topic_arn=>"arn:aws:sns:us-east-1:XXXXXXXXXXXX:XXXXXXXX", :message=>"{\"default\":\"デフォルトメッセージ\",\"email\":\"~\"}", :subject=>"Test"} AWS::SNS::Errors::SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
これってAWS SDKの問題って言うよりはRubyの問題なのかな?それともJSONエンコード?ちなみに試した環境は以下です。
$ ruby --version ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
0 件のコメント :
コメントを投稿