AWS Service health dashboard RSS를 읽고 업데이트가 있으면 AWS Lambda를 통해 Slack에 알림
추가
퍼스널 헬스 대시보드가 되어 있으므로, 그쪽을 베이스로 생각하는 편이 좋아지고 있습니다.
htps : // 아 ws. 아마존. 이 m / jp / b ぉ gs / 네 ws / 아 ws ぺr 소나 l 헤아 lth-이다 sh 보아 rd /
목적
AWS의 서비스 상태 대시보드를 일부러 보지 않고도 알림을 받을 수 있다면 편리합니다.
AWS Lambda의 스케줄 이벤트에서 RSS를 읽으러 갔고, Lambda 스케줄 기간 중에 update 정보가 있으면 그 정보를 slack에 던지는 봇적인 녀석을 만들어 보았습니다.
slack에 rss를 integration을 하는 기능이 있습니다만, 1-rss/1-account가 되기 때문에 수에 제한이 있는 무료 유저라면 1-계정으로 복수를 읽는 편이 계좌 효율이 좋을까 생각했습니다.
사용하는 것
Slack: 게시용
AWS Lambda: RSS 확인
Amazon S3: 구독할 RSS 정의
사전 준비
당연히 Slack을 가지고 있다고 가정합니다. Slack에 slack Incoming WebHooks를 만듭니다.
상위에서 얻은 웹 후크 URL을 적어주세요.
htps // // 뽀오 ks. scck. 코 m/세 rゔぃ세 s/
같은 모양이라고 생각합니다.
AWS 측 설정
S3에 설정 파일 배치
우선 인간적으로 읽기 쉬운 json으로 해 보았습니다.
서비스명이라든지, 서비스마다 AWS라든지의 접두사가 있거나 없었기 때문에, 가장 빠른 RSS 피드를 복사해 주는 편이 좋을까 생각해, 이하의 형태로 하고 있습니다.
Key에 서비스명을 적당하게 설정해 주세요. 표시에만 사용하기 때문에 적당하고 좋습니다. .
rss 피드는 서비스 건강 대시보드을 참조하고 rss 피드 URL을 설정하십시오.
setup.json{
"Tokyo":{
"EC2":"https://status.aws.amazon.com/rss/ec2-ap-northeast-1.rss",
"S3":"https://status.aws.amazon.com/rss/s3-ap-northeast-1.rss",
"Lambda":"https://status.aws.amazon.com/rss/lambda-ap-northeast-1.rss",
"IoT":"https://status.aws.amazon.com/rss/awsiot-ap-northeast-1.rss"
},
"Other":{
"Console":"https://status.aws.amazon.com/rss/management-console.rss",
"Route53":"https://status.aws.amazon.com/rss/route53.rss"
}
}
우선 S3의 버킷으로 설정합니다. 이번에는 은닉 정보가 전혀 없기 때문에 설정 예는 참조 풀 오픈으로 하고 있습니다.
버킷 이름과 폴더를 포함한 경로 이름을 메모합니다.
버킷 이름은 조금 지웠습니다. 경로는 첫 번째 "/"가 필요하지 않습니다. 이번 예에서는 SHD/SHD_setup.json입니다.
AWS Lambda
이번에는 파이썬으로 만들고 있습니다. slack 게시물과 rss 피드 분석에는 유용한 패키지가 있지만 AWS Lambda에서 실행하는 것을 고려하여 표준 패키지로만 작성합니다. 다음 변수는 사용자 환경에 맞게 설정하십시오.
SLACK_URL: 위에서 얻은 slack webhook용 URL
BUCKET : 설정 파일을 넣은 S3 버킷 이름
S3_FILE : 버킷 아래의 구성 파일 경로 이름
DURATION : 감시 간격 = Lambda의 스케줄을 어느 정도의 감각으로 움직이는지를 초로 (본 예에서는 5 분 간격을 상정)
Configuration triger에서의 이벤트 설정은 다음과 같은 느낌입니다.
rate 로 5분 간격을 지정해 주세요
다음을 실행 시간을 python2.7로, Lambda의 editor에 복사하십시오.
role에 필요한 권한은 표준 Lambda 실행 = lamda_basic_execution에서만 가능합니다.
rss의 report time의 PST/PDT를 고려했습니다.
SHD_check.py################################
# Check AWS Service Health Dashboard
# Someting item post within 1-hour
###############################
import xml.etree.ElementTree as ET
import urllib2
import sys
import json
import time
import datetime
import boto3
#Slack_Webhook
SLACK_URL='YOUR_SLACK_URL'
#For setup.json
BUCKET='YOUR_BUCKET'
S3_FILE='S3_FILE'
LOCAL_SETUP_FILE='/tmp/SHD_setup.json'
# Check duration interval
DURATION = 500
# Initial global setup
s3 = boto3.client('s3')
now = datetime.datetime.now()
################################
# Slack post
################################
def post2Slack(msg):
try:
payload = {
"text":msg
}
payload_json = json.dumps(payload)
req = urllib2.Request(SLACK_URL, data=payload_json)
res = urllib2.urlopen(req)
return
except Exception as e:
print 'Slack Post Error'
print e.message
###############################
# Serup file Download from S3
###############################
def read_Setup():
try:
s3.download_file(BUCKET, S3_FILE, LOCAL_SETUP_FILE)
f = open(LOCAL_SETUP_FILE, "r")
setfile = json.load(f)
f.close()
return setfile
except Exception as e:
print "Setup file init Error"
print e.message
exit()
###############################
# consider timezone
# rss report timezone is PDT/PST
# return changetime
###############################
def changeToUTC(pubtime, tz):
if tz == "PDT":
diff = 7
elif tz == "PST":
diff = 8
else:
diff = 0
pubtime += datetime.timedelta(hours = diff)
return pubtime
###############################
# rss_update check
# No update:NULL
# Update : rss description filed
#-----------------------------------
# Item filed: 0:tile, 1:link, 2:pubDate, 3:guid, 4:description
###############################
def rss_update(xml_path):
try:
feed = ET.fromstring(urllib2.urlopen(xml_path).read())
for item in feed.iter('item'):
description = item[4].text
pubdate = item[2].text
if 'None' != pubdate:
date = pubdate.split(',')
element_date = date[1].split(' ')
while element_date.count("") > 0:
element_date.remove("")
pub = element_date[2]+'-'+element_date[1]+'-'+element_date[0]+' '+element_date[3]
stime = datetime.datetime.strptime(pub, '%Y-%b-%d %H:%M:%S' )
timezone = element_date[4]
UTC_pubtime = changeToUTC(stime, timezone)
delta = now - UTC_pubtime
delta_sec = delta.total_seconds()
check_time = delta_sec - DURATION
if check_time < 0:
return description
return
except Exception as e:
print "Get RSS error"
print e.message
exit()
#################################
#main
#################################
def lambda_handler(event, context):
J_setfile = read_Setup()
regions = J_setfile.keys()
try:
updates={}
for region in regions:
services = J_setfile[region].keys()
for service in services:
rss = J_setfile[region][service]
print '%s:%s' % (region, service)
res = rss_update(rss)
if res :
post_msg = region+':'+service+':'+res
post2Slack(post_msg)
#else:
#post_msg = region+':'+service+' No update in this duration'
#post2Slack(post_msg)
except Exception as e:
print "Error in main"
print e.message
exit()
문제 없음 경로는 주석 처리 중이지만 문제 없음을 표시하려면 else 경로의 주석 처리를 제거하십시오.
면책
본 투고는, 개인의 의견으로, 소속하는 기업이나 단체는 관계 없습니다.
또 게재하고 있는 sample 프로그램의 동작에 관해서도 보장하지 않으므로, 참고 정도로 해 주세요.
Reference
이 문제에 관하여(AWS Service health dashboard RSS를 읽고 업데이트가 있으면 AWS Lambda를 통해 Slack에 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TakashiKOYANAGAWA/items/23675dec691b6f0f6957
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
AWS의 서비스 상태 대시보드를 일부러 보지 않고도 알림을 받을 수 있다면 편리합니다.
AWS Lambda의 스케줄 이벤트에서 RSS를 읽으러 갔고, Lambda 스케줄 기간 중에 update 정보가 있으면 그 정보를 slack에 던지는 봇적인 녀석을 만들어 보았습니다.
slack에 rss를 integration을 하는 기능이 있습니다만, 1-rss/1-account가 되기 때문에 수에 제한이 있는 무료 유저라면 1-계정으로 복수를 읽는 편이 계좌 효율이 좋을까 생각했습니다.
사용하는 것
Slack: 게시용
AWS Lambda: RSS 확인
Amazon S3: 구독할 RSS 정의
사전 준비
당연히 Slack을 가지고 있다고 가정합니다. Slack에 slack Incoming WebHooks를 만듭니다.
상위에서 얻은 웹 후크 URL을 적어주세요.
htps // // 뽀오 ks. scck. 코 m/세 rゔぃ세 s/
같은 모양이라고 생각합니다.
AWS 측 설정
S3에 설정 파일 배치
우선 인간적으로 읽기 쉬운 json으로 해 보았습니다.
서비스명이라든지, 서비스마다 AWS라든지의 접두사가 있거나 없었기 때문에, 가장 빠른 RSS 피드를 복사해 주는 편이 좋을까 생각해, 이하의 형태로 하고 있습니다.
Key에 서비스명을 적당하게 설정해 주세요. 표시에만 사용하기 때문에 적당하고 좋습니다. .
rss 피드는 서비스 건강 대시보드을 참조하고 rss 피드 URL을 설정하십시오.
setup.json{
"Tokyo":{
"EC2":"https://status.aws.amazon.com/rss/ec2-ap-northeast-1.rss",
"S3":"https://status.aws.amazon.com/rss/s3-ap-northeast-1.rss",
"Lambda":"https://status.aws.amazon.com/rss/lambda-ap-northeast-1.rss",
"IoT":"https://status.aws.amazon.com/rss/awsiot-ap-northeast-1.rss"
},
"Other":{
"Console":"https://status.aws.amazon.com/rss/management-console.rss",
"Route53":"https://status.aws.amazon.com/rss/route53.rss"
}
}
우선 S3의 버킷으로 설정합니다. 이번에는 은닉 정보가 전혀 없기 때문에 설정 예는 참조 풀 오픈으로 하고 있습니다.
버킷 이름과 폴더를 포함한 경로 이름을 메모합니다.
버킷 이름은 조금 지웠습니다. 경로는 첫 번째 "/"가 필요하지 않습니다. 이번 예에서는 SHD/SHD_setup.json입니다.
AWS Lambda
이번에는 파이썬으로 만들고 있습니다. slack 게시물과 rss 피드 분석에는 유용한 패키지가 있지만 AWS Lambda에서 실행하는 것을 고려하여 표준 패키지로만 작성합니다. 다음 변수는 사용자 환경에 맞게 설정하십시오.
SLACK_URL: 위에서 얻은 slack webhook용 URL
BUCKET : 설정 파일을 넣은 S3 버킷 이름
S3_FILE : 버킷 아래의 구성 파일 경로 이름
DURATION : 감시 간격 = Lambda의 스케줄을 어느 정도의 감각으로 움직이는지를 초로 (본 예에서는 5 분 간격을 상정)
Configuration triger에서의 이벤트 설정은 다음과 같은 느낌입니다.
rate 로 5분 간격을 지정해 주세요
다음을 실행 시간을 python2.7로, Lambda의 editor에 복사하십시오.
role에 필요한 권한은 표준 Lambda 실행 = lamda_basic_execution에서만 가능합니다.
rss의 report time의 PST/PDT를 고려했습니다.
SHD_check.py################################
# Check AWS Service Health Dashboard
# Someting item post within 1-hour
###############################
import xml.etree.ElementTree as ET
import urllib2
import sys
import json
import time
import datetime
import boto3
#Slack_Webhook
SLACK_URL='YOUR_SLACK_URL'
#For setup.json
BUCKET='YOUR_BUCKET'
S3_FILE='S3_FILE'
LOCAL_SETUP_FILE='/tmp/SHD_setup.json'
# Check duration interval
DURATION = 500
# Initial global setup
s3 = boto3.client('s3')
now = datetime.datetime.now()
################################
# Slack post
################################
def post2Slack(msg):
try:
payload = {
"text":msg
}
payload_json = json.dumps(payload)
req = urllib2.Request(SLACK_URL, data=payload_json)
res = urllib2.urlopen(req)
return
except Exception as e:
print 'Slack Post Error'
print e.message
###############################
# Serup file Download from S3
###############################
def read_Setup():
try:
s3.download_file(BUCKET, S3_FILE, LOCAL_SETUP_FILE)
f = open(LOCAL_SETUP_FILE, "r")
setfile = json.load(f)
f.close()
return setfile
except Exception as e:
print "Setup file init Error"
print e.message
exit()
###############################
# consider timezone
# rss report timezone is PDT/PST
# return changetime
###############################
def changeToUTC(pubtime, tz):
if tz == "PDT":
diff = 7
elif tz == "PST":
diff = 8
else:
diff = 0
pubtime += datetime.timedelta(hours = diff)
return pubtime
###############################
# rss_update check
# No update:NULL
# Update : rss description filed
#-----------------------------------
# Item filed: 0:tile, 1:link, 2:pubDate, 3:guid, 4:description
###############################
def rss_update(xml_path):
try:
feed = ET.fromstring(urllib2.urlopen(xml_path).read())
for item in feed.iter('item'):
description = item[4].text
pubdate = item[2].text
if 'None' != pubdate:
date = pubdate.split(',')
element_date = date[1].split(' ')
while element_date.count("") > 0:
element_date.remove("")
pub = element_date[2]+'-'+element_date[1]+'-'+element_date[0]+' '+element_date[3]
stime = datetime.datetime.strptime(pub, '%Y-%b-%d %H:%M:%S' )
timezone = element_date[4]
UTC_pubtime = changeToUTC(stime, timezone)
delta = now - UTC_pubtime
delta_sec = delta.total_seconds()
check_time = delta_sec - DURATION
if check_time < 0:
return description
return
except Exception as e:
print "Get RSS error"
print e.message
exit()
#################################
#main
#################################
def lambda_handler(event, context):
J_setfile = read_Setup()
regions = J_setfile.keys()
try:
updates={}
for region in regions:
services = J_setfile[region].keys()
for service in services:
rss = J_setfile[region][service]
print '%s:%s' % (region, service)
res = rss_update(rss)
if res :
post_msg = region+':'+service+':'+res
post2Slack(post_msg)
#else:
#post_msg = region+':'+service+' No update in this duration'
#post2Slack(post_msg)
except Exception as e:
print "Error in main"
print e.message
exit()
문제 없음 경로는 주석 처리 중이지만 문제 없음을 표시하려면 else 경로의 주석 처리를 제거하십시오.
면책
본 투고는, 개인의 의견으로, 소속하는 기업이나 단체는 관계 없습니다.
또 게재하고 있는 sample 프로그램의 동작에 관해서도 보장하지 않으므로, 참고 정도로 해 주세요.
Reference
이 문제에 관하여(AWS Service health dashboard RSS를 읽고 업데이트가 있으면 AWS Lambda를 통해 Slack에 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TakashiKOYANAGAWA/items/23675dec691b6f0f6957
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
당연히 Slack을 가지고 있다고 가정합니다. Slack에 slack Incoming WebHooks를 만듭니다.
상위에서 얻은 웹 후크 URL을 적어주세요.
htps // // 뽀오 ks. scck. 코 m/세 rゔぃ세 s/
같은 모양이라고 생각합니다.
AWS 측 설정
S3에 설정 파일 배치
우선 인간적으로 읽기 쉬운 json으로 해 보았습니다.
서비스명이라든지, 서비스마다 AWS라든지의 접두사가 있거나 없었기 때문에, 가장 빠른 RSS 피드를 복사해 주는 편이 좋을까 생각해, 이하의 형태로 하고 있습니다.
Key에 서비스명을 적당하게 설정해 주세요. 표시에만 사용하기 때문에 적당하고 좋습니다. .
rss 피드는 서비스 건강 대시보드을 참조하고 rss 피드 URL을 설정하십시오.
setup.json{
"Tokyo":{
"EC2":"https://status.aws.amazon.com/rss/ec2-ap-northeast-1.rss",
"S3":"https://status.aws.amazon.com/rss/s3-ap-northeast-1.rss",
"Lambda":"https://status.aws.amazon.com/rss/lambda-ap-northeast-1.rss",
"IoT":"https://status.aws.amazon.com/rss/awsiot-ap-northeast-1.rss"
},
"Other":{
"Console":"https://status.aws.amazon.com/rss/management-console.rss",
"Route53":"https://status.aws.amazon.com/rss/route53.rss"
}
}
우선 S3의 버킷으로 설정합니다. 이번에는 은닉 정보가 전혀 없기 때문에 설정 예는 참조 풀 오픈으로 하고 있습니다.
버킷 이름과 폴더를 포함한 경로 이름을 메모합니다.
버킷 이름은 조금 지웠습니다. 경로는 첫 번째 "/"가 필요하지 않습니다. 이번 예에서는 SHD/SHD_setup.json입니다.
AWS Lambda
이번에는 파이썬으로 만들고 있습니다. slack 게시물과 rss 피드 분석에는 유용한 패키지가 있지만 AWS Lambda에서 실행하는 것을 고려하여 표준 패키지로만 작성합니다. 다음 변수는 사용자 환경에 맞게 설정하십시오.
SLACK_URL: 위에서 얻은 slack webhook용 URL
BUCKET : 설정 파일을 넣은 S3 버킷 이름
S3_FILE : 버킷 아래의 구성 파일 경로 이름
DURATION : 감시 간격 = Lambda의 스케줄을 어느 정도의 감각으로 움직이는지를 초로 (본 예에서는 5 분 간격을 상정)
Configuration triger에서의 이벤트 설정은 다음과 같은 느낌입니다.
rate 로 5분 간격을 지정해 주세요
다음을 실행 시간을 python2.7로, Lambda의 editor에 복사하십시오.
role에 필요한 권한은 표준 Lambda 실행 = lamda_basic_execution에서만 가능합니다.
rss의 report time의 PST/PDT를 고려했습니다.
SHD_check.py################################
# Check AWS Service Health Dashboard
# Someting item post within 1-hour
###############################
import xml.etree.ElementTree as ET
import urllib2
import sys
import json
import time
import datetime
import boto3
#Slack_Webhook
SLACK_URL='YOUR_SLACK_URL'
#For setup.json
BUCKET='YOUR_BUCKET'
S3_FILE='S3_FILE'
LOCAL_SETUP_FILE='/tmp/SHD_setup.json'
# Check duration interval
DURATION = 500
# Initial global setup
s3 = boto3.client('s3')
now = datetime.datetime.now()
################################
# Slack post
################################
def post2Slack(msg):
try:
payload = {
"text":msg
}
payload_json = json.dumps(payload)
req = urllib2.Request(SLACK_URL, data=payload_json)
res = urllib2.urlopen(req)
return
except Exception as e:
print 'Slack Post Error'
print e.message
###############################
# Serup file Download from S3
###############################
def read_Setup():
try:
s3.download_file(BUCKET, S3_FILE, LOCAL_SETUP_FILE)
f = open(LOCAL_SETUP_FILE, "r")
setfile = json.load(f)
f.close()
return setfile
except Exception as e:
print "Setup file init Error"
print e.message
exit()
###############################
# consider timezone
# rss report timezone is PDT/PST
# return changetime
###############################
def changeToUTC(pubtime, tz):
if tz == "PDT":
diff = 7
elif tz == "PST":
diff = 8
else:
diff = 0
pubtime += datetime.timedelta(hours = diff)
return pubtime
###############################
# rss_update check
# No update:NULL
# Update : rss description filed
#-----------------------------------
# Item filed: 0:tile, 1:link, 2:pubDate, 3:guid, 4:description
###############################
def rss_update(xml_path):
try:
feed = ET.fromstring(urllib2.urlopen(xml_path).read())
for item in feed.iter('item'):
description = item[4].text
pubdate = item[2].text
if 'None' != pubdate:
date = pubdate.split(',')
element_date = date[1].split(' ')
while element_date.count("") > 0:
element_date.remove("")
pub = element_date[2]+'-'+element_date[1]+'-'+element_date[0]+' '+element_date[3]
stime = datetime.datetime.strptime(pub, '%Y-%b-%d %H:%M:%S' )
timezone = element_date[4]
UTC_pubtime = changeToUTC(stime, timezone)
delta = now - UTC_pubtime
delta_sec = delta.total_seconds()
check_time = delta_sec - DURATION
if check_time < 0:
return description
return
except Exception as e:
print "Get RSS error"
print e.message
exit()
#################################
#main
#################################
def lambda_handler(event, context):
J_setfile = read_Setup()
regions = J_setfile.keys()
try:
updates={}
for region in regions:
services = J_setfile[region].keys()
for service in services:
rss = J_setfile[region][service]
print '%s:%s' % (region, service)
res = rss_update(rss)
if res :
post_msg = region+':'+service+':'+res
post2Slack(post_msg)
#else:
#post_msg = region+':'+service+' No update in this duration'
#post2Slack(post_msg)
except Exception as e:
print "Error in main"
print e.message
exit()
문제 없음 경로는 주석 처리 중이지만 문제 없음을 표시하려면 else 경로의 주석 처리를 제거하십시오.
면책
본 투고는, 개인의 의견으로, 소속하는 기업이나 단체는 관계 없습니다.
또 게재하고 있는 sample 프로그램의 동작에 관해서도 보장하지 않으므로, 참고 정도로 해 주세요.
Reference
이 문제에 관하여(AWS Service health dashboard RSS를 읽고 업데이트가 있으면 AWS Lambda를 통해 Slack에 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TakashiKOYANAGAWA/items/23675dec691b6f0f6957
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"Tokyo":{
"EC2":"https://status.aws.amazon.com/rss/ec2-ap-northeast-1.rss",
"S3":"https://status.aws.amazon.com/rss/s3-ap-northeast-1.rss",
"Lambda":"https://status.aws.amazon.com/rss/lambda-ap-northeast-1.rss",
"IoT":"https://status.aws.amazon.com/rss/awsiot-ap-northeast-1.rss"
},
"Other":{
"Console":"https://status.aws.amazon.com/rss/management-console.rss",
"Route53":"https://status.aws.amazon.com/rss/route53.rss"
}
}
################################
# Check AWS Service Health Dashboard
# Someting item post within 1-hour
###############################
import xml.etree.ElementTree as ET
import urllib2
import sys
import json
import time
import datetime
import boto3
#Slack_Webhook
SLACK_URL='YOUR_SLACK_URL'
#For setup.json
BUCKET='YOUR_BUCKET'
S3_FILE='S3_FILE'
LOCAL_SETUP_FILE='/tmp/SHD_setup.json'
# Check duration interval
DURATION = 500
# Initial global setup
s3 = boto3.client('s3')
now = datetime.datetime.now()
################################
# Slack post
################################
def post2Slack(msg):
try:
payload = {
"text":msg
}
payload_json = json.dumps(payload)
req = urllib2.Request(SLACK_URL, data=payload_json)
res = urllib2.urlopen(req)
return
except Exception as e:
print 'Slack Post Error'
print e.message
###############################
# Serup file Download from S3
###############################
def read_Setup():
try:
s3.download_file(BUCKET, S3_FILE, LOCAL_SETUP_FILE)
f = open(LOCAL_SETUP_FILE, "r")
setfile = json.load(f)
f.close()
return setfile
except Exception as e:
print "Setup file init Error"
print e.message
exit()
###############################
# consider timezone
# rss report timezone is PDT/PST
# return changetime
###############################
def changeToUTC(pubtime, tz):
if tz == "PDT":
diff = 7
elif tz == "PST":
diff = 8
else:
diff = 0
pubtime += datetime.timedelta(hours = diff)
return pubtime
###############################
# rss_update check
# No update:NULL
# Update : rss description filed
#-----------------------------------
# Item filed: 0:tile, 1:link, 2:pubDate, 3:guid, 4:description
###############################
def rss_update(xml_path):
try:
feed = ET.fromstring(urllib2.urlopen(xml_path).read())
for item in feed.iter('item'):
description = item[4].text
pubdate = item[2].text
if 'None' != pubdate:
date = pubdate.split(',')
element_date = date[1].split(' ')
while element_date.count("") > 0:
element_date.remove("")
pub = element_date[2]+'-'+element_date[1]+'-'+element_date[0]+' '+element_date[3]
stime = datetime.datetime.strptime(pub, '%Y-%b-%d %H:%M:%S' )
timezone = element_date[4]
UTC_pubtime = changeToUTC(stime, timezone)
delta = now - UTC_pubtime
delta_sec = delta.total_seconds()
check_time = delta_sec - DURATION
if check_time < 0:
return description
return
except Exception as e:
print "Get RSS error"
print e.message
exit()
#################################
#main
#################################
def lambda_handler(event, context):
J_setfile = read_Setup()
regions = J_setfile.keys()
try:
updates={}
for region in regions:
services = J_setfile[region].keys()
for service in services:
rss = J_setfile[region][service]
print '%s:%s' % (region, service)
res = rss_update(rss)
if res :
post_msg = region+':'+service+':'+res
post2Slack(post_msg)
#else:
#post_msg = region+':'+service+' No update in this duration'
#post2Slack(post_msg)
except Exception as e:
print "Error in main"
print e.message
exit()
본 투고는, 개인의 의견으로, 소속하는 기업이나 단체는 관계 없습니다.
또 게재하고 있는 sample 프로그램의 동작에 관해서도 보장하지 않으므로, 참고 정도로 해 주세요.
Reference
이 문제에 관하여(AWS Service health dashboard RSS를 읽고 업데이트가 있으면 AWS Lambda를 통해 Slack에 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TakashiKOYANAGAWA/items/23675dec691b6f0f6957텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)