AWSのboto3を使ってサーバのコマンド結果をSQSのキューに飛ばしてSNSでメール送信してみた
やりたいこと
- AWS上のEC2(Linux)で一定時間毎に自動的にコマンドを叩く。
- コマンドの標準出力をメールで飛ばす。ついでにSQSにも連携しとく。
方法
- pythonのboto3を用いて、SNSでメールを飛ばす。
- SQSへはSNSのサブスクリプションで連携する。
前提
- EC2を立てる(ここでのサーバはRHEL系を想定してます。)
- EC2にaws cli、python3、boto3のインストール。
- aws configureでユーザ認証。
- SNSでトピック及びサブスクリプション作成。
- SQSでキュー作成。
コード
- pythonのboto3を用いて、SNSでメールを飛ばす。
- SQSへはSNSのサブスクリプションで連携する。
前提
- EC2を立てる(ここでのサーバはRHEL系を想定してます。)
- EC2にaws cli、python3、boto3のインストール。
- aws configureでユーザ認証。
- SNSでトピック及びサブスクリプション作成。
- SQSでキュー作成。
コード
EC2上で以下のスクリプトを作成。
実行するコマンドやSNSのトピックはXXXXX表記ですので、適宜置き換えて下さい。あと、変数はテキトーです(笑)。
### 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)
# 標準出力の場合
tenpura = sos.stdout.read()
# 文字コードを「UTF-8」に指定
sushi = tenpura.decode("UTF-8")
response = topic.publish(
Message = sushi)
print(response)
#ループ処理(ここでは1分毎に定期実行)
while True:
response = topic.publish(
Message = sushi)
print(response)
time.sleep(60)
参考にしたもの
以下参考にさせていただきました。ありがとうございました。
・AWS SDKを使ってSNSにCPU使用率を送りつける
・boto3 (AWS SDK for Python) メモ - Qiita
・boto3を使ってAmazon SNSへpublishしてみた | DevelopersIO
Author And Source
この問題について(AWSのboto3を使ってサーバのコマンド結果をSQSのキューに飛ばしてSNSでメール送信してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/himanande/items/ec5e9a2f94e057473db0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .