我想将SNS通知发送到Slack。我收到了电子邮件通知。看起来像:
Instance: i-0f9606e41cd6f1e8e has changed state
State: running
Type: c5.4xlarge
Public IP Address: 52.32.193.26
Private IP Address: 10.10.75.168
Region: us-west-2a
Name: VOSaaS-Cluster-SaaS-Longevity-055ba27d-f7c4-b70a-0954-a08ae21ccb2d-vos-node-i-0f9606e41cd6f1e8e
但我也希望在Slack通道中收到相同的输出。我已经设置了传入的webhooks,我可以收到简单的消息,但是在发送输出方面有问题。
MY_SNS_TOPIC_ARN = 'arn:aws:sns:us-west-2:421572644019:CloudWatchAlarmsForSpotInstances'
sns_client = boto3.client('sns')
ec2_spot_info = sns_client.publish(
TopicArn = MY_SNS_TOPIC_ARN,
Subject = 'EC2 Spot Instances Termination Notifications',
Message = 'Instance: ' + instance_id + ' has changed state\n' +
'State: ' + instance['State']['Name'] + '\n' +
'Type: ' + instance['InstanceType'] + '\n' +
'Public IP Address: ' + instance['PublicIpAddress'] + '\n' +
'Private IP Address: ' + instance['PrivateIpAddress'] + '\n' +
'Region: ' + instance['Placement']['AvailabilityZone'] + '\n' +
'Name: ' + name
)
slack_url='https://hooks.slack.com/services/+token'
slack_msg = {
"attachments": [
{
"title": "EC2 Spot Instance Info",
"pretext": "EC2 Spot Instances Termination Notifications",
"color": "#ed1717",
"text": ec2_spot_info
}
]
}
output = json.dumps(slack_msg)
r = requests.post(slack_url, data = output)
sns_client.publish()
调用返回响应:
{
'MessageId': 'string'
}
然而你的松弛命令正在发送这个消息:
"text": ec2_spot_info
这意味着,您发送的是包含MessageId
的字典,而不是发送消息。
相反,你应该:
message
构造为变量sns_client.publish()
打电话给Message = message
"text": message
调用松弛