しらべっぱなし帽子

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

boto3でAmazon SNSへサーバコマンドの標準出力を連携させる

やりたいこと

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

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

 

今回はAWSSDKPython)の一つである「boto3」を利用して、

1.サーバのコマンド結果をAWSSNSへ連携」するためのAWSまわりの準備とスクリプト作成。

 

2.SQSのキューイングおよび別サーバへポーリングしてコンソール上に通知」する方法はこちら。

dokusho-now.hatenadiary.jp

 

事前準備 

・SQSにキューを作成。

SNSにトピックを作成。サブスクプションにEmailとSQSのキューを指定。

AWSアカウントのユーザのアクセスキー作成。

・コマンドを実行するサーバにpython3やboto3等必要なパッケージをインストール。

※インストール方法についてはこちら。

dokusho-now.hatenadiary.jp

・EC2作成及び起動。

・サーバ上で「aws configure」を実行してユーザ認証。

 

コード

サーバ(EC2)からSNSのトピックへ定期通知(1分毎)するスクリプト

### send_msg.py ###

import boto3
import subprocess
import shlex
import time

# SNSのトピックのARNを記載
sns = boto3.resource('sns')
topic = sns.Topic('arn:aws:sns:ap-northeast-1:XXXXXXXX:topic-name')

# 出力させたいコマンドを指定
cmd = "XXXXXXX"
sos = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)

# 標準出力の場合
output = sos.stdout.read()

# 文字コードを「UTF-8」に指定
sushi = output.decode("UTF-8")

response = topic.publish(
Message = sushi)
print(response)

#ループ処理(ここでは1分毎に定期実行)
while True:
response = topic.publish(
Message = sushi)
print(response)
time.sleep(60) 

 

参考資料

www.smokeymonkey.net

qiita.com

dev.classmethod.jp