Your cart is currently empty!
EC2 Action Slack Notification
I took a brief break from my Lambda function creation journey to go on vacation but, now i’m back!
This function will notify a Slack channel of your choosing when an EC2 instance enters “Starting, Stopping, Stopped, or Shutting-Down” status. I thought this might be useful for instances that reside under a load balancer. It would be useful to see when your load balancer is scaling up or down in real-time via Slack notification.
In order to use this function, you will need to create a Slack Application with an OAuth key and set that key as an environment variable in your Lambda function. If you are unsure of how to do this I can walk you through it!
Please review the function below
import logging
import requests
import boto3
import os
from urllib.parse import unquote_plus
from slack import WebClient
from slack.errors import SlackApiError
logging.basicConfig(level=logging.DEBUG)
# Check EC2 Status
def lambda_handler(event, context):
detail = event['detail']
ids = detail['instance-id']
eventname = detail['state']
ec2 = boto3.resource('ec2')
# Slack Variables
slack_token = os.environ["slackBot"]
client = WebClient(token=slack_token)
channel_string = "XXXXXXXXXXXXXXXXXXXX"
# Post to slack that the instance is running
if eventname == 'running':
try:
instance = ids
response_string = f"The instance: {instance} has started"
response = client.chat_postMessage(
channel= channel_string,
text="An Instance has started",
blocks = [{"type": "section", "text": {"type": "plain_text", "text": response_string}}]
)
except SlackApiError as e:
assert e.response["error"]
#Post to slack that instance is shutting down
elif eventname == 'shutting-down':
try:
instance = ids
response_string = f"The instance: {instance} is shutting down"
response = client.chat_postMessage(
channel= channel_string,
text="An Instance is Shutting Down",
blocks = [{"type": "section", "text": {"type": "plain_text", "text": response_string}}]
)
except SlackApiError as e:
assert e.response["error"]
elif eventname == 'stopped':
try:
instance = ids
response_string = f"The instance: {instance} has stopped"
response = client.chat_postMessage(
channel= channel_string,
text="An Instance has stopped",
blocks = [{"type": "section", "text": {"type": "plain_text", "text": response_string}}]
)
except SlackApiError as e:
assert e.response["error"]
elif eventname == 'stopping':
try:
instance = ids
response_string = f"The instance: {instance} is stopping"
response = client.chat_postMessage(
channel= channel_string,
text="An Instance is stopping",
blocks = [{"type": "section", "text": {"type": "plain_text", "text": response_string}}]
)
except SlackApiError as e:
assert e.response["error"]
As always the function is available on GitHub as well:
https://github.com/avansledright/ec2ActionPostToSlack
If you find this function helpful please share it with your friends or repost it on your favorite social media platform!
by
Tags:
Leave a Reply