--Placez les données du serveur surveillé dans S3
.
Le format des données est le suivant.
```json:servers.json
{
"servers": [
{"name": "Google", "url": "http://www.google.co.jp"},
{"name": "Yahoo", "url": "http://www.yahoo.co.jp"}
]
}
```
--ʻLisez les données ci-dessus depuis AWS Lambda (Python) ʻet créez un accès HTTP à chaque serveur.
--Notifiez «Slack» du résultat de la surveillance.
CloudWatch Events --Schedule
.――Voyez ce que vous vouliez réaliser, car il a été entièrement traité ci-dessous. - https://www.joyzo.co.jp/blog/2325
pour accéder à
S3`. pour exécuter
Lambdasur
VPC`.Slack
-Reportez-vous à Incoming Webhooks pour obtenir l'URL de notification à Slack
.
AWS Lambda(Python)
lambda_function.py
import json
import requests
import boto3
BUCKET_NAME = 'xxxxxxxxxx'
OBJECT_NAME = 'xxxxxxxxxx/servers.json'
SLACK_POST_URL = 'https://hooks.slack.com/services/xxxxxxxxxx/xxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx'
def lambda_handler(event, context):
json_data = __getServers()
__check_server(json_data)
def __getServers():
s3 = boto3.resource('s3')
obj = s3.Object(BUCKET_NAME, OBJECT_NAME)
response = obj.get()
body = response['Body'].read()
return body.decode('utf-8')
def __check_server(json_data):
data = json.loads(json_data)
servers = data['servers']
has_error = False
for server in servers:
name = server['name']
url = server['url']
print("Check: " + name)
try:
r = requests.get(url)
if r.status_code != 200:
__send_error_message(name, url)
has_error = True
except requests.exceptions.RequestException as e:
__send_request_error_message(name, url)
has_error = True
if has_error == False:
__send_success_message()
def __send_error_message(name, url):
payload = {
"text": name + '\n' + url + '\n' + '*ERROR!*',
"icon_emoji": ":x:"
}
__send_message(payload)
def __send_request_error_message(name, url):
payload = {
"text": name + '\n' + url + '\n' + '*Request Error!*',
"icon_emoji": ":warning:"
}
__send_message(payload)
def __send_success_message():
payload = {
"text": "All Servers OK!",
"icon_emoji": ":o:"
}
__send_message(payload)
def __send_message(payload):
try:
return requests.post(SLACK_POST_URL, json=payload)
except requests.exceptions.RequestException as e:
return None
pip install requests -t .
zip -r lambda_function.zip *
―― «La possibilité de définir un VPC pour AWS Lambda» a rendu possible l'exécution de Lambda avec une adresse IP fixe comme source de données, ce qui a élargi la gamme d'utilisations.
Slack
est trop simple et pratique.