Je parle à l'intérieur de l'entreprise, «Ramu mais Ramu», et pour moi, un ancien C #, est-ce un langage de programmation? J'ai pensé, mais ce n'était pas le cas. (Il existe une expression lambda en C #.)
En interne, j'ai placé le runtime node.js sur AWS Lambda et l'ai notifié de slack, mais on m'a dit que la version du node est ancienne et que je vais bientôt arrêter de la prendre en charge, j'ai donc décidé de passer à Python. (Parce qu'il y avait une personne dans l'entreprise qui connaissait Python mieux que node)
AWS Lambda fournit un traitement commun sous forme de modèles, c'est donc assez facile à faire. Je vais résumer la procédure.
Suivez à peu près les étapes ci-dessous.
Le résultat final sera quelque chose comme ça.
Créez cette fois la fonction Lambda principale. Vous pouvez facilement le faire en suivant les instructions. Soyez assuré que vous pouvez facilement le recréer ou le supprimer.
Sélectionnez Lambda dans la liste des services.
Commencez à créer la fonction Lambda.
Si vous saisissez slack dans le filtre, vous pouvez créer un modèle pour slack, mais cette fois, nous le créerons avec des espaces.
Nous définirons le déclencheur plus tard, alors laissez-le vide.
SNS = Service de notification simple. C'est un service qui reçoit un traitement ou un changement de statut et vous notifie sous forme de message. Vous pouvez envoyer des messages aux e-mails et à Lamda comme celui-ci. Le service lui-même n'a pas été traduit au 06 avril 2017, mais je pense qu'il n'y a pas de problème car il est simple en anglais.
Créez un SNS et joignez l'abonnement.
Créez des abonnements.
Sélectionnez la fonction Lambda que vous venez de créer
Réglez l'alarme à partir de l'écran EC2.
Effectuer divers réglages
Les paramètres sont les suivants.
Cette fois, je l'ai réglé comme suit.
@code
lambda_handler.py
from __future__ import print_function
import boto3
import json
import logging
import os
from urllib2 import Request, urlopen, URLError, HTTPError
#paramètres de relâchement
SLACK_CHANNEL = os.environ['SLACK_CHANNEL']
HOOK_URL = os.environ['HOOK_URL']
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info("Event: " + str(event))
message = json.loads(event['Records'][0]['Sns']['Message'])
logger.info("Message: " + str(message))
alarm_name = message['AlarmName']
description = message['AlarmDescription']
new_state = message['NewStateValue']
reason = message['NewStateReason']
if new_state == 'OK':
emoji = ":+1:"
elif new_state == 'ALARM':
emoji = ":exclamation:"
slack_message = {
'channel': SLACK_CHANNEL,
'text': "*%s %s: %s*\n %s\n %s" % (emoji, new_state, alarm_name, description, reason)
}
req = Request(HOOK_URL, json.dumps(slack_message))
try:
response = urlopen(req)
response.read()
logger.info("Message posted to %s", slack_message['channel'])
except HTTPError as e:
logger.error("Request failed: %d %s", e.code, e.reason)
except URLError as e:
logger.error("Server connection failed: %s", e.reason)
@ Variable d'environnement + Arufa
À partir de l'écran Lambda, procédez comme suit:
C'est Miso, mais j'espère que vous pourrez vous y référer pour les données de test.
Une notification a été envoyée avec succès au canal sandbox. Il contient également des pictogrammes.
J'ai pu réaliser une notification de relâchement avec un programme simple. Définissez les métriques de manière appropriée et profitez d'une vie AWS confortable. (Même si vous me prévenez, cela n'a aucun sens si vous le regardez ...)
De plus, il semble que seul le SNS créé dans la même région puisse être défini à partir de Lambda, donc si vous souhaitez traverser des régions, sélectionnez Lambda à partir du SNS de chaque région.
Au début, j'ai essayé d'utiliser les variables d'environnement de Lambda, mais je n'ai pas pu l'utiliser car j'ai eu une erreur autour de base64. Si vous pouvez l'utiliser, la fonction Lambda peut être facilement réutilisée, je vais donc m'en occuper correctement à la prochaine occasion.