見出し画像

[AWS] SQS #1 - テスト環境を作ってみた (SDK for Java)

■ 概要
メッセージング機能を持ったデータ連携サービスを構想するにあたり、SQSを使った構築が案の一つに上がったため、その性能検証や機能検証を行った。
※キューの作成方法やAWSコンソールの基本操作についての説明は省略

■ 目標構成

画像1

AWS上でのデータ連携を想定し、AWS Cloud内で検証できる環境を用意した。EC2からSQSの操作を可能にするため、AWSが用意している SDK for Javaを用いて検証環境を構築していく。Javaのほかに Node.jsやPythonなど様々なSDKが用意されているが、サンプルが多いという理由と、S3とSQSの連携がJavaでしかできないことから、Javaを選択した。

■ 目次
・キュー (FIFO)の作成
・EC2インスタンスの作成 (Amazon Linux 2)
・SDK for Javaのインストール
・antをインストールする
・サンプルを実行

■ キュー (FIFO)の作成
データの順序性の保証が必要なため、今回はFIFOタイプのキューを用いて検証を行う。

画像2

■ EC2インスタンスの作成 (Amazon Linux 2)

画像3

■ SDK for Javaのインストール
Teratermでログインしたら、以下を実行

[ec2-user@ip-172-31-36-63 ~]$ sudo yum update

Complete! が出たらOK

次は、javaのインストール

[ec2-user@ip-172-31-36-63 ~]# sudo yum install -y java-1.8.0-openjdk-devel.x86_64

Complete! が出たらOK。以下のようにバージョンを確認する。

[ec2-user@ip-172-31-36-63 ~]$ java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)

★SDKを持ってくる。
公式のサイト:Downloading and extracting the SDK
※ZIPファイルのダウンロード

適当なディレクトリを作成して、ダウンロードしたファイルを配置

画像5

以下のコマンドで、ファイルを解凍。"-q"をつけるのは、回答したファイルの表示をなくすため。

[ec2-user@ip-172-31-36-63 aws_sdk_java]$ unzip -q aws-java-sdk-1.12.30.zip

samplesの中に以下のようなサンプルプログラムがある。

画像6

今回は「AmazonSimpleQueueService」を使用する。中身はこんな感じ↓

画像7

「build.xml」があるから、antを使ってjavaを実行したほうが簡単そう。ということでantをインストール。

[ec2-user@ip-172-31-36-63 ~]$ sudo yum -y install ant

以下のようにバージョン確認できればOK

[ec2-user@ip-172-31-36-63 ~]$ ant -version
Apache Ant(TM) version 1.9.2 compiled on November 13 2017

antを実行してみるが。。。。

[ec2-user@ip-172-31-36-63 AmazonSimpleQueueService]$ pwd
/home/ec2-user/aws_sdk_java/aws-java-sdk-1.12.30/samples/AmazonSimpleQueueService
[ec2-user@ip-172-31-36-63 AmazonSimpleQueueService]$ ll
total 32
-rw-rw-r-- 1 ec2-user ec2-user  689 Jul 22 19:11 build.xml
-rw-rw-r-- 1 ec2-user ec2-user  296 Jul 22 19:11 credentials
-rw-rw-r-- 1 ec2-user ec2-user 1296 Jul 22 19:11 README.md
-rw-rw-r-- 1 ec2-user ec2-user  139 Jul 22 19:11 sample.properties
-rw-rw-r-- 1 ec2-user ec2-user 5893 Jul 22 23:14 SimpleQueueServiceSample.class
-rw-rw-r-- 1 ec2-user ec2-user 6551 Jul 22 19:11 SimpleQueueServiceSample.java
[ec2-user@ip-172-31-36-63 AmazonSimpleQueueService]$ ant
Buildfile: /home/ec2-user/aws_sdk_java/aws-java-sdk-1.12.30/samples/AmazonSimpleQueueService/build.xml

run:
   [javac] /home/ec2-user/aws_sdk_java/aws-java-sdk-1.12.30/samples/AmazonSimpleQueueService/build.xml:12: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [java] Exception in thread "main" com.amazonaws.AmazonClientException: Cannot load the credentials from the credential profiles file. Please make sure that your credentials file is at the correct location (~/.aws/credentials), and is in valid format.
    [java]     at SimpleQueueServiceSample.main(Unknown Source)
    [java] Caused by: java.lang.IllegalArgumentException: profile file cannot be null
    [java]     at com.amazonaws.util.ValidationUtils.assertNotNull(ValidationUtils.java:37)
    [java]     at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:142)
    [java]     at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:133)
    [java]     at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:100)
    [java]     at com.amazonaws.auth.profile.ProfileCredentialsProvider.getCredentials(ProfileCredentialsProvider.java:135)
    [java]     ... 1 more
    [java] Java Result: 1

BUILD SUCCESSFUL
Total time: 1 second

やっぱ失敗。。。アクセスキー周りで例外発生。。

[java] Exception in thread "main" com.amazonaws.AmazonClientException: Cannot load the credentials from the credential profiles file. Please make sure that your credentials file is at the correct location (~/.aws/credentials), and is in valid format.

↑こいつを解消するため、以下を作成

[ec2-user@ip-172-31-36-63 ~]$ ls -ld .aws/
drwxrwxr-x 2 ec2-user ec2-user 25 Jul 22 23:22 .aws/
[ec2-user@ip-172-31-36-63 ~]$ ll .aws/
total 4
-rw-rw-r-- 1 ec2-user ec2-user 356 Jul 22 23:22 credentials

credentials のファイルは、各サンプルプログラムが入っているディレクトリにある同名のファイルを使用する。

改めて

[ec2-user@ip-172-31-36-63 AmazonSimpleQueueService]$ pwd
/home/ec2-user/aws_sdk_java/aws-java-sdk-1.12.30/samples/AmazonSimpleQueueService
[ec2-user@ip-172-31-36-63 AmazonSimpleQueueService]$ ant
Buildfile: /home/ec2-user/aws_sdk_java/aws-java-sdk-1.12.30/samples/AmazonSimpleQueueService/build.xml

run:
   [javac] /home/ec2-user/aws_sdk_java/aws-java-sdk-1.12.30/samples/AmazonSimpleQueueService/build.xml:12: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [java] ===========================================
    [java] Getting Started with Amazon SQS
    [java] ===========================================
    [java]
    [java] Creating a new SQS queue called MyQueue.
    [java]
    [java] Listing all queues in your account.
    [java]
    [java]   QueueUrl: https://sqs.us-west-2.amazonaws.com/157634048600/MyQueue
    [java]
    [java] Sending a message to MyQueue.
    [java]
    [java] Receiving messages from MyQueue.
    [java]
    [java]   Message
    [java]     MessageId:     dc0c256f-cdf5-4a48-b678-b459697945b4
    [java]     ReceiptHandle: AQEBFxof+3VcoxC5BaDOAIwRGFuwRea9A+quJfbdkrEkvfrQISicL2b/nqVtRjNQE8W8OvIJKKNsVvvoXKH+yuoSLCEx1xMQVH9mzChn9L9FKvwDFVBIWpyfH1n93svE0SSut9ZkCRUwrCtgL9HHXfQuQrhNVD68sD5qfRfnMTJSqHvgvnPmqqrB82zLuP4QdDK5Tes9AZiL+OldJxJ/UpkzpJ9r+yrUBjcuEzpPNRvkxKeTylC6iDa9QKkim67xinilATgYWGYbSg4IWbibwPrfYxtEGbrjOfJRoN/vBHGHX3cHk2LS38bAfUUX+ojqsbRvu8NMpvmMb6T9gzdpYXmbtpUWzmp/j2zFpMEDc4SBUuNxz3i3CWehn/AonNSMA4bzyL+SIUi3IfOFBeyFZtyRLQ==
    [java]     MD5OfBody:     6a1559560f67c5e7a7d5d838bf0272ee
    [java]     Body:          This is my message text.
    [java]
    [java] Deleting a message.
    [java]
    [java] Deleting the test queue.
    [java]

BUILD SUCCESSFUL
Total time: 4 seconds

うまくってる♪

サンプルプログラムはキューの作成、メッセージの送信、メッセージの取得、メッセージの削除、キューの削除を実行している。

それぞれの処理に使われるメソッドを利用して、EC2からSQSを操作するプログラムを次は作ってくことにします。

この記事が気に入ったらサポートをしてみませんか?