AWS의 장애 정보 확인(2012/6/13 업데이트)
4월 20일 저녁 AWS 도쿄구의 SQS와 람다에서 장애가 발생했다.
AWS도 무적은 아니다.
장애가 있을 때 바로 알아차리고 싶어요.
Service Health Dashboard 확인
AWS가 고장 났을 때 이쪽 사이트에서 방송을 합니다.
https://status.aws.amazon.com/
이쪽 웹사이트인 RSS도 발송됐으니 RSS 리더가 미리 체크하면 되요.
그렇지만
각 서비스마다 체크해야 하는 RSS 파일이 나뉘어져 있습니다!!!
'Tokyo'로 검색해도 120건...모든 수동 등록은 불가능하다.
(슬랙에 알림이나 현재 물건을 보내는 것을 고려했지만 120건을 수동으로 등록할 수 없습니다.)
모든 RSS 파일이 요약된 RSS 파일 작성
람다에서 주기적으로 복제하는 작전이에요.못할 일이 없다.
만들어진 파일도 S3에 저장돼 있어 밖에서 볼 수 있다.
이 예에서는 Service Health Dashboard 태그를 지정하여 처리합니다.
Asia Pacific 태그 수가 많아 한 번에 5분 정도 걸립니다.import os
import requests
from bs4 import BeautifulSoup
base_url = 'https://status.aws.amazon.com'
rss_template = ('<?xml version="1.0" encoding="UTF-8"?>'
'<rss version="2.0">'
' <channel>'
' <title><![CDATA[AWS Service Status]]></title>'
' <link>http://status.aws.amazon.com/</link>'
' <description><![CDATA[AWS Service Status]]></description>'
' </channel>'
'</rss>'
)
def get_rss_list(block):
print('start get_rss_list')
res = requests.get(base_url)
aws_soup = BeautifulSoup(res.text, 'lxml')
tables = aws_soup.find(id=block).find_all('table')
links = []
for tr in tables[1].find('tbody').find_all('tr'):
tds = tr.find_all('td')
links.append({'service': tds[1].text, 'url': tds[3].find('a').get('href')})
return links
def get_rss_item(rss_url):
print(rss_url)
response = requests.get(rss_url)
return response.text
def add_rss_item(rss_text, rss_path, service_name, output_soup):
rss = BeautifulSoup(rss_text, 'xml')
items = rss.find_all('item')
for item in items:
category = rss.new_tag('category')
category.append(service_name)
item.append(category)
output_soup.find('channel').append(item)
def put_object(rss_string, block):
import boto3
client = boto3.client('s3')
client.put_object(
ACL='public-read',
Body=rss_string.encode('utf-8'),
Bucket=os.getenv('S3_BUCKET'),
Key='aws-status'+block+'.rss',
ContentType='application/rss+xml'
)
def lambda_handler(event, context):
block = event['block']
print(block)
output_soup = BeautifulSoup(rss_template, 'xml')
for rss in get_rss_list(block):
url = base_url + rss['url']
text = get_rss_item(url)
add_rss_item(text, url, rss['service'], output_soup)
put_object(str(output_soup), block)
전역 장애 정보를 얻을 수 있는 JSON의 존재
열심히 만든 끝에 전 구역의 고장 정보를 얻을 수 있는 JSON 파일이 있다는 것을 알게 되었다.역시 클라스메트호드.동경하다.
[소절] AWS가 과거에 발생한 고장 역사를 확인하는 방법|Developers.IO
https://dev.classmethod.jp/articles/service-health-status-history/
https://status.aws.amazon.com/data.json
그 JSON이야.RSS와 거의 동일한 정보를 얻을 수 있습니다.
이걸 RSS로 만들면 좋을 것 같은데.
처리 시간도 30초 안에 끝나기 때문에 API Gateway로 RSS를 보낼 수 있다.import requests
from bs4 import BeautifulSoup
from bs4.element import CData
from datetime import datetime, date, time, timezone, timedelta
rss_template = ('<?xml version="1.0" encoding="UTF-8"?>'
'<rss version="2.0">'
' <channel>'
' <title><![CDATA[AWS Service Status]]></title>'
' <link>http://status.aws.amazon.com/</link>'
' <description><![CDATA[AWS Service Status]]></description>'
' </channel>'
'</rss>'
)
item_template = ('<item>'
' <title></title>'
' <link>http://status.aws.amazon.com/</link>'
' <pubDate></pubDate>'
' <guid isPermaLink="false"></guid>'
' <description></description>'
' <category></category>'
'</item>')
def lambda_handler(event, context):
soup = BeautifulSoup(rss_template, 'xml')
r = requests.get('https://status.aws.amazon.com/data.json')
json = r.json()
JST = timezone(timedelta(hours=+9), 'JST')
for item in json['archive']:
title = item['summary']
pubDate = item['date']
pubDate = datetime.fromtimestamp(int(item['date']),JST).strftime('%a, %d %b %Y %H:%M:%S %Z')
guid = item['service'] + item['date']
description = item['description']
category = item['service_name']
item = BeautifulSoup(item_template, 'xml')
item.title.append(title)
item.pubDate.append(pubDate)
item.guid.append(guid)
item.description.append(CData(description))
item.category.append(category)
soup.find('channel').append(item)
response = {
'statusCode': 200,
'isBase64Encoded': False,
'headers': {'Content-Type': 'text/xml;charset=UTF-8'},
'body': str(soup)
}
return response
사이트도 해봤어요.
data.제이슨이 이력서를 확인하는 사이트를 사용해 보세요.
4월 20일 도쿄 지역의 고장 이후 버지니아의 EC2, 4/22의 클라우드 프론트도 고장이 났다.
단지 JSON 성형을 받았을 뿐, 데이터.json이 CORS와 관련된 것을 얻었기 때문에 API Gateway의 HTTP API 제작을 통해 CORS가 효과적인 HTTP 프록시를 통합시켜 회피합니다.
Reference
이 문제에 관하여(AWS의 장애 정보 확인(2012/6/13 업데이트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moritalous/items/5a48006b60ee6ddad420
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
람다에서 주기적으로 복제하는 작전이에요.못할 일이 없다.
만들어진 파일도 S3에 저장돼 있어 밖에서 볼 수 있다.
이 예에서는 Service Health Dashboard 태그를 지정하여 처리합니다.
Asia Pacific 태그 수가 많아 한 번에 5분 정도 걸립니다.
import os
import requests
from bs4 import BeautifulSoup
base_url = 'https://status.aws.amazon.com'
rss_template = ('<?xml version="1.0" encoding="UTF-8"?>'
'<rss version="2.0">'
' <channel>'
' <title><![CDATA[AWS Service Status]]></title>'
' <link>http://status.aws.amazon.com/</link>'
' <description><![CDATA[AWS Service Status]]></description>'
' </channel>'
'</rss>'
)
def get_rss_list(block):
print('start get_rss_list')
res = requests.get(base_url)
aws_soup = BeautifulSoup(res.text, 'lxml')
tables = aws_soup.find(id=block).find_all('table')
links = []
for tr in tables[1].find('tbody').find_all('tr'):
tds = tr.find_all('td')
links.append({'service': tds[1].text, 'url': tds[3].find('a').get('href')})
return links
def get_rss_item(rss_url):
print(rss_url)
response = requests.get(rss_url)
return response.text
def add_rss_item(rss_text, rss_path, service_name, output_soup):
rss = BeautifulSoup(rss_text, 'xml')
items = rss.find_all('item')
for item in items:
category = rss.new_tag('category')
category.append(service_name)
item.append(category)
output_soup.find('channel').append(item)
def put_object(rss_string, block):
import boto3
client = boto3.client('s3')
client.put_object(
ACL='public-read',
Body=rss_string.encode('utf-8'),
Bucket=os.getenv('S3_BUCKET'),
Key='aws-status'+block+'.rss',
ContentType='application/rss+xml'
)
def lambda_handler(event, context):
block = event['block']
print(block)
output_soup = BeautifulSoup(rss_template, 'xml')
for rss in get_rss_list(block):
url = base_url + rss['url']
text = get_rss_item(url)
add_rss_item(text, url, rss['service'], output_soup)
put_object(str(output_soup), block)
전역 장애 정보를 얻을 수 있는 JSON의 존재
열심히 만든 끝에 전 구역의 고장 정보를 얻을 수 있는 JSON 파일이 있다는 것을 알게 되었다.역시 클라스메트호드.동경하다.
[소절] AWS가 과거에 발생한 고장 역사를 확인하는 방법|Developers.IO
https://dev.classmethod.jp/articles/service-health-status-history/
https://status.aws.amazon.com/data.json
그 JSON이야.RSS와 거의 동일한 정보를 얻을 수 있습니다.
이걸 RSS로 만들면 좋을 것 같은데.
처리 시간도 30초 안에 끝나기 때문에 API Gateway로 RSS를 보낼 수 있다.import requests
from bs4 import BeautifulSoup
from bs4.element import CData
from datetime import datetime, date, time, timezone, timedelta
rss_template = ('<?xml version="1.0" encoding="UTF-8"?>'
'<rss version="2.0">'
' <channel>'
' <title><![CDATA[AWS Service Status]]></title>'
' <link>http://status.aws.amazon.com/</link>'
' <description><![CDATA[AWS Service Status]]></description>'
' </channel>'
'</rss>'
)
item_template = ('<item>'
' <title></title>'
' <link>http://status.aws.amazon.com/</link>'
' <pubDate></pubDate>'
' <guid isPermaLink="false"></guid>'
' <description></description>'
' <category></category>'
'</item>')
def lambda_handler(event, context):
soup = BeautifulSoup(rss_template, 'xml')
r = requests.get('https://status.aws.amazon.com/data.json')
json = r.json()
JST = timezone(timedelta(hours=+9), 'JST')
for item in json['archive']:
title = item['summary']
pubDate = item['date']
pubDate = datetime.fromtimestamp(int(item['date']),JST).strftime('%a, %d %b %Y %H:%M:%S %Z')
guid = item['service'] + item['date']
description = item['description']
category = item['service_name']
item = BeautifulSoup(item_template, 'xml')
item.title.append(title)
item.pubDate.append(pubDate)
item.guid.append(guid)
item.description.append(CData(description))
item.category.append(category)
soup.find('channel').append(item)
response = {
'statusCode': 200,
'isBase64Encoded': False,
'headers': {'Content-Type': 'text/xml;charset=UTF-8'},
'body': str(soup)
}
return response
사이트도 해봤어요.
data.제이슨이 이력서를 확인하는 사이트를 사용해 보세요.
4월 20일 도쿄 지역의 고장 이후 버지니아의 EC2, 4/22의 클라우드 프론트도 고장이 났다.
단지 JSON 성형을 받았을 뿐, 데이터.json이 CORS와 관련된 것을 얻었기 때문에 API Gateway의 HTTP API 제작을 통해 CORS가 효과적인 HTTP 프록시를 통합시켜 회피합니다.
Reference
이 문제에 관하여(AWS의 장애 정보 확인(2012/6/13 업데이트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moritalous/items/5a48006b60ee6ddad420
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import requests
from bs4 import BeautifulSoup
from bs4.element import CData
from datetime import datetime, date, time, timezone, timedelta
rss_template = ('<?xml version="1.0" encoding="UTF-8"?>'
'<rss version="2.0">'
' <channel>'
' <title><![CDATA[AWS Service Status]]></title>'
' <link>http://status.aws.amazon.com/</link>'
' <description><![CDATA[AWS Service Status]]></description>'
' </channel>'
'</rss>'
)
item_template = ('<item>'
' <title></title>'
' <link>http://status.aws.amazon.com/</link>'
' <pubDate></pubDate>'
' <guid isPermaLink="false"></guid>'
' <description></description>'
' <category></category>'
'</item>')
def lambda_handler(event, context):
soup = BeautifulSoup(rss_template, 'xml')
r = requests.get('https://status.aws.amazon.com/data.json')
json = r.json()
JST = timezone(timedelta(hours=+9), 'JST')
for item in json['archive']:
title = item['summary']
pubDate = item['date']
pubDate = datetime.fromtimestamp(int(item['date']),JST).strftime('%a, %d %b %Y %H:%M:%S %Z')
guid = item['service'] + item['date']
description = item['description']
category = item['service_name']
item = BeautifulSoup(item_template, 'xml')
item.title.append(title)
item.pubDate.append(pubDate)
item.guid.append(guid)
item.description.append(CData(description))
item.category.append(category)
soup.find('channel').append(item)
response = {
'statusCode': 200,
'isBase64Encoded': False,
'headers': {'Content-Type': 'text/xml;charset=UTF-8'},
'body': str(soup)
}
return response
data.제이슨이 이력서를 확인하는 사이트를 사용해 보세요.
4월 20일 도쿄 지역의 고장 이후 버지니아의 EC2, 4/22의 클라우드 프론트도 고장이 났다.
단지 JSON 성형을 받았을 뿐, 데이터.json이 CORS와 관련된 것을 얻었기 때문에 API Gateway의 HTTP API 제작을 통해 CORS가 효과적인 HTTP 프록시를 통합시켜 회피합니다.
Reference
이 문제에 관하여(AWS의 장애 정보 확인(2012/6/13 업데이트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moritalous/items/5a48006b60ee6ddad420텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)