我在AWS Lambda中使用以下代码来触发SNS,只要它每天超过$ 85,但在AWS Lambda中测试以下代码时遇到错误
错误:
Function logs:
START RequestId: b33a86aaf5e5205 Version: $LATEST
[ERROR] KeyError: '85'
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 7, in lambda_handler
limit = int(event['85'])END RequestId: 87876769896-4f33-a104-6b2aaf5e5205
代码:
import json
import boto3
from datetime import datetime, timedelta
def lambda_handler(event, context):
limit = int(event['85'])
sns_topic = event['arn:aws:sns:us-east-1:997656776656445:billing-alarm']
client = boto3.client('cloudwatch', region_name='us-east-1')
response = client.get_metric_data(
MetricDataQueries=[
{
"Id": "m1",
"MetricStat": {
"Metric": {
"Namespace": "AWS/Billing",
"MetricName": "EstimatedCharges",
"Dimensions": [
{
"Name": "Currency",
"Value": "USD"
}
]
},
"Period": 3600,
"Stat": "Maximum",
"Unit": "None"
}
}
],
StartTime=datetime.now() - timedelta(hours=24),
EndTime=datetime.now(),
ScanBy='TimestampAscending'
)
spent = 0
for results in response["MetricDataResults"]:
values = results["Values"]
print("Timestamps of the datapoints")
print(results["Timestamps"])
print("Values of the datapoints")
print(values)
my_deltas = calculate_deltas(values)
spent = sum(my_deltas)
print("Deltas")
print(my_deltas)
print("Spent on the period")
print(spent)
if spent > limit:
print("The threshold was breached, sending notification")
sns_client = boto3.client('sns', region_name='us-east-1')
message_body = {
'default': {
'body': 'Daily spent limit breached',
'limit': limit,
'spent': spent
}
}
publish_response = sns_client.publish(
TargetArn=sns_topic,
Message=json.dumps({'default': json.dumps(message_body)}),
MessageStructure='json'
)
print(publish_response)
return {
'statusCode': 200,
'body': json.dumps({
'limit': limit,
'spent': spent,
})
}
def calculate_deltas(values):
deltas = []
max_position = len(values)
for i in range(1, max_position):
if values[i] < values[i-1]:
deltas.append(values[i])
else:
deltas.append(values[i] - values[i-1])
return deltas