Amazon SNSをColdFusion10とAWS SDK for javaの組み合わせで操作する #1 | CreateTopic & subscribe

2013.08.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今回はColdFusionを使って実際にAmazon SNSを使ってみたいと思います。機能としては簡単に言うとプッシュ通知をおこなってくれるサービスです。通知先としてHTTP/HTTPS、EMail、Amazon SMSとAmazon SQSの4種類がありましたが、Mobile Pushもサポートされ、AndoroidやiPhone等のモバイル端末にもプッシュ通知ができるようになりました。モバイル端末に対する記事はAndroidへのMobile Push記事iPhoneへのMobile Push記事でご確認ください。

動作させた環境

  • Windows7 64Bit
  • ColdFusion10 デベロッパー版
  • AWS SDK for java 1.5.3

Amazon SNSを使う

  1. トピックを作成するAPIをコールします(作成名称は tsukumaTOPIC で作成します。)
  2. Topic ARN を取得します。
  3. Topic ARN,Protocol,EndPointを設定します。
  4. 購読するためのAPIをコールします

利用したサンプルテンプレートは以下のものです( aws_sns_createtopic.cfm )

<cfcontent type="text/html; charset=utf-8">
<cfprocessingdirective pageEncoding="utf-8" suppressWhitespace="true">

<cflock scope = "Session" timeout = "30" type = "Exclusive">
    <cfset aws_AK = #accessKeyId#> <!--- Your Access Key --->
    <cfset aws_SK = #secretAccessKey#> <!--- Your Secret Key --->
</cflock>

<cfoutput>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>Coldfusion + AWS SDK for java SNS CreateTopic and subscribe Sample</title>
</head>

<body>

<cfset awscreds = createObject("java","com.amazonaws.auth.BasicAWSCredentials").init(aws_AK,aws_SK)>
<cfset SNSClient = createObject("java","com.amazonaws.services.sns.AmazonSNSClient").init(awscreds)>

<!--- RegionをEUに指定 --->
<cfset sns_region = SNSClient.setEndPoint("https://sns.eu-west-1.amazonaws.com/")>

<!--- 初期化 --->
<cfset SNSCreateTopicRequest = createObject("java","com.amazonaws.services.sns.model.CreateTopicRequest").init()>
<cfset snstest = SNSCreateTopicRequest.setName("tsukumaTOPIC")>

<cfset sns_result = SNSClient.createTopic(SNSCreateTopicRequest)>

<cfset topic_arn = #sns_result.getTopicArn()#>

<cfset SNSsubscribeRequest = createObject("java","com.amazonaws.services.sns.model.SubscribeRequest").init()>
<cfset snstest = SNSsubscribeRequest.setTopicArn(topic_arn)>

<!--- 通知先をemailで設定する場合 --->
<cfset snstest = SQSsubscribeRequest.setProtocol("email")>
<cfset snstest = SQSsubscribeRequest.setEndpoint("プッシュ通知したいメールアドレスを指定")>

<cfset snstest = SNSClient.subscribe(SNSsubscribeRequest)>

<!--- 確認用にAmazon Resource Name(ARN)を表示させる --->
<cfdump var="#sns_result.getTopicArn()#"><br>

</cfoutput>
</cfprocessingdirective>      
<cfsetting enablecfoutputonly="false">

</body>
</html>

まずManagement Consoleにログインしてトピックが作成されているかを確認します。

aws_sns1

トピックは正しく作成できていることが確認できました。しかし、Subscription IDの部分がまだ PendingConfirmation になっています。subscribeすると通知先がEMailの場合、その通知先に下記のようなメールがAmazonから来ますので、メール文中の Confirm subscription をクリックして購読を確定させます。

aws_sns2

Confirm subscription をクリックと下記のように確認画面が表示されます。

aws_sns3

再度 Management Console に戻って確認してみると Subscription ID が設定されていることが確認できます。

aws_sns4

これでsubscribe(購読)までの準備ができましたので、次回はトピックをpublishして指定したEMailアドレスにプッシュ通知が来る事を確認したいと思います。