AWSのboto3を使ってサーバのコマンド結果をメールに飛ばしてた。
AWSのboto3を使ってサーバのコマンド結果をメールに飛ばしてた。:
EC2上で以下のスクリプトを作成。
実行するコマンドやSNSのトピックはXXXXX表記ですので、適宜置き換えて下さい。あと、変数はテキトーです(笑)。
以下参考にさせていただきました。ありがとうございました。
・AWS SDKを使ってSNSにCPU使用率を送りつける
・boto3 (AWS SDK for Python) メモ - Qiita
・boto3を使ってAmazon SNSへpublishしてみた | DevelopersIO
やりたいこと
- AWS上のEC2(Linux)で一定時間毎に自動的にコマンドを叩く。
- コマンドの標準出力をメールで飛ばす。ついでに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
コメント
コメントを投稿