やりたいこと
1.サーバのコマンド結果をAWSのSNSへ連携しメール通知とSQSへキューイング
2.SQSのキューイングおよび別サーバにポーリングしてコンソール上に通知
今回は「2.SQSのキューイングおよび別サーバにポーリングしてコンソール上に通知」させるためのスクリプトを作成。
※「1.サーバのコマンド結果をAWSのSNSへ連携しメール通知と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