Чтобы протестировав этот сценарий, мы создали новый канал Slack. Когда я запускаю команду Curl из локального компьютера, она отправляет сообщение в канал Slack.
Код: Выделить всё
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX
Код: Выделить всё
import requests
import os
# Define the data to send in the Slack message
data = {
"text": "Hi, This is a test from Local"
}
# Get the Slack webhook URL from environment variables
webhook = os.environ.get("webhook_slack")
# Send the POST request to Slack
response = requests.post(webhook, json=data)
# Check and print the response status for debugging
print(f"Slack Response Status: {response.status_code}")
print(f"Slack Response Text: {response.text}")
Мост событий AWS будет вызывать функцию Lambda, это работает нормально, Однако из Lambda не отправляется никаких уведомлений в Slack.
Код: Выделить всё
import json
import os
import urllib3
SLACK_WEBHOOK_URL = os.environ['SLACK_WEBHOOK_URL']
http = urllib3.PoolManager()
def lambda_handler(event, context):
# Log the entire event for debugging
print("Received event:", json.dumps(event))
# Extract details from EventBridge event
detail = event.get("detail", {})
instance_id = detail.get("instance-id")
state = detail.get("state")
region = event.get("region")
# Log extracted details
print(f"Instance ID: {instance_id}, State: {state}, Region: {region}")
# Define message based on instance state
if state == "running":
message = f"🚀 EC2 Instance {instance_id} has been created and is now running in {region}."
elif state == "stopped":
message = f"🛑 EC2 Instance {instance_id} has been stopped in {region}."
elif state == "terminated":
message = f"💥 EC2 Instance {instance_id} has been terminated in {region}."
else:
print("State does not match expected values. Exiting.")
return # Exit if the state is not relevant
# Send notification to Slack
slack_message = {
"text": message
}
response = http.request(
"POST",
SLACK_WEBHOOK_URL,
body=json.dumps(slack_message),
headers={"Content-Type": "application/json"}
)
# Log the HTTP response status and data for debugging
print(f"Slack Response Status: {response.status}")
print(f"Slack Response Data: {response.data}")
if response.status != 200:
raise ValueError(
f"Request to Slack returned an error {response.status}, response is: {response.data}"
)
return {"status": "Notification sent successfully"}
Мы сохраняем значения env в конфигурациях лямбда
Подробнее здесь: https://stackoverflow.com/questions/791 ... s-to-slack