AWSのメンテナンスイベントを監視

jqコマンドのインストール

jsonを簡単に取り扱う

$ uname -r
4.14.26-54.32.amzn2.x86_64

$ sudo yum install -y jq

$ rpm -qa jq
jq-1.5-1.amzn2.x86_64

Python3のインストール

boto3を使うにはPython3を使うほうが安定しているらしい

$ sudo amazon-linux-extras -install python3

$ python3 -V
Python 3.7.0b2

$ sudo pip install boto3

$ python3
Python 3.7.0b2 (default, Mar 17 2018, 23:03:12)
[GCC 7.2.1 20170915 (Red Hat 7.2.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>>

AWS Configファイル設定

boto3を使うときにこの設定が使われる

$ aws configure
AWS Access Key ID [None]:xxx
AWS Secret Access Key [None]:xxx
Default region name [None]:ap-northeast-1
Default output format [None]:json

AWSのメンテナンス情報を取得する

EC2のメンテナンス情報(AWS CLI)

$ aws ec2 describe-instance-status --query "InstanceStatuses[?Events!=null]"

インスタンスの予定されたイベント - Amazon Elastic Compute Cloud

RDSのメンテナンス情報(AWS CLI)

$ aws rds describe-pending-maintenance-actions --query "PendingMaintenanceActions[?Action!=null]"

EC2のメンテナンス情報(AWS API)

#!/bin/python3
import boto3
client = boto3.client('ec2')

response = client.describe_instances()

print(response)

RDSのメンテナンス情報(AWS API)

#!/bin/python3
import boto3
client = boto3.client('rds')

response = client.describe_pending_maintenance_actions()

print(response)

Lambdaを使ってメンテナンス情報を定期的にメールする

AWSはblogが沢山書かれているので、順に参照していく。

SESにメールアドレスを登録


dev.classmethod.jp

Lamda実行用のロールと定期実行スケジュールを作成


qiita.com

Pythonで記述するlambda関数コードを作成(Python3.6)

===========================================

import boto3

import json

MailSrc = "XXX@XXX"

MailDst = "XXX@XXX"
AwsRegion = "us-east-1"

def rdsMaintenanceInfo():
RdsClient = boto3.client('rds')
RdsInfo = RdsClient.describe_pending_maintenance_actions()
return RdsInfo

def ec2MaintenanceInfo():
Ec2Client = boto3.client('ec2')
Ec2Info = Ec2Client.describe_instances()
return Ec2Info

def sendMail(source, to, subject, body):
MailClient = boto3.client('ses', region_name=AwsRegion)

Response = MailClient.send_email(
Source=source,
Destination={
'ToAddresses': [
to,
]
},
Message={
'Subject': {
'Data': subject,
},
'Body': {
'Text': {
'Data': body,
},
}
}
)

return Response

def lambda_handler(event, context):
rdsInfo = rdsMaintenanceInfo()
rdsSubject = "RDS Maintainance Info"
rdsInfo = json.dumps(rdsInfo)
rRds = sendMail(MailSrc, MailDst, rdsSubject, rdsInfo)

ec2Info = ec2MaintenanceInfo()
ec2Subject = "EC2 Maintainance Info"
ec2Info = json.dumps(ec2Info)
rEc2 = sendMail(MailSrc, MailDst, ec2Subject, ec2Info)

return rRds,rEc2

===========================================

qiita.com

この記事が気に入ったらサポートをしてみませんか?