しらべっぱなし帽子

調べっぱなしにしないためのメモ。

Amazon SQSへキューされたメッセージをサーバのコンソール上に表示させる

やりたいこと

1.サーバのコマンド結果をAWSSNSへ連携しメール通知とSQSへキューイング

2.SQSのキューイングおよび別サーバにポーリングしてコンソール上に通知

 

今回は「2.SQSのキューイングおよび別サーバにポーリングしてコンソール上に通知」させるためのスクリプトを作成。

※「1.サーバのコマンド結果をAWSSNSへ連携しメール通知とSQSへキューイング」について知りたい方はこちら。

dokusho-now.hatenadiary.jp

 

事前準備

・ポーリングしてコンソール表示するためのEC2(サーバ)作成および起動

・作成したEC2にpythonやらboto3やらawscliやら必要なパッケージをインストール

※インストール方法に知りたいかたはこちら。

dokusho-now.hatenadiary.jp

 

コード

事前にAmazon SQSでキューを作成。SQSのURLを以下のようにiniファイルで記載。

### config.ini (拡張子.iniファイル) ###
[sqs]
url :https://sqs.ap-northeast-1.amazonaws.com/9999999999/sqs_queue_test

 

SQSのキューにメッセージが受信される度(本スクリプトでは1分毎)に、ポーリング処理でサーバのコンソール上にそのメッセージを表示させる。メッセージは表示後に削除。

### receive_sqs.py ###

import configparser
import boto3
import json
import time

# configファイルの読み込み(iniファイルのパスを指定)
ini = configparser.SafeConfigParser()
ini.read("/XXXX/config.ini")
sqs = boto3.client('sqs')
url = ini.get("sqs", "url")

response = sqs.receive_message(
QueueUrl=url,
AttributeNames=[
'SentTimestamp'
],
MaxNumberOfMessages=1,
VisibilityTimeout=0,
WaitTimeSeconds=0
)

# キューの先頭にあるメッセージを表示・削除(ここでは1分毎にポーリング処理)
while True:
message = response['Messages'][0]
if message:
print(message)
receipt_handle = message['ReceiptHandle']
sqs.delete_message(
QueueUrl=url,
ReceiptHandle=receipt_handle
)
time.sleep(60)

 

参考資料

www.smokeymonkey.net

dev.classmethod.jp

qiita.com