【问题标题】:Python Lambda Function not producing an output for AWS EventbridgePython Lambda 函数不为 AWS Eventbridge 生成输出
【发布时间】:2022-03-08 13:24:28
【问题描述】:

基本上,我使用这个 Example Python code snippet for Slack 来自 aws 提供的 example python Lambda function

#!/usr/bin/python3.6
import urllib3
import json
http = urllib3.PoolManager()
def lambda_handler(event, context):
    url = "https://hooks.slack.com/services/xxxxxxx"
    msg = {
        "channel": "aws-events",
        "username": "Event_Notifier",
        "text": event['Records'][0]['Sns']['Message'],
        "icon_emoji": ""
    }
    
    encoded_msg = json.dumps(msg).encode('utf-8')
    resp = http.request('POST',url, body=encoded_msg)
    print({
        "message": event['Records'][0]['Sns']['Message'], 
        "status_code": resp.status, 
        "response": resp.data
    })

很遗憾,上面的代码没有产生任何输出,也没有向 slack 通道发送消息。

所以我们进行了如下调整,现在它总是在有事件时发送一个通用消息(我们设置的),但对于团队来说这不是一个有意义的消息,它并不能真正帮助找到正确的事件消息本身。团队每次都必须去 aws 控制面板检查触发器是针对什么事件的。

#!/usr/bin/python3.6
import urllib3
import json
http = urllib3.PoolManager()
def lambda_handler(event, context):
    print(event)
    url = "https://hooks.slack.com/services/xxxxxxx"
    msg = {
        "channel": "aws-events",
        "username": "Event_Notifier",
        #"text": event['Records'][0]['Sns']['Message'],
        "text": "Upcoming Events, check here https://phd.aws.amazon.com/phd/home?region=eu-west-1#/event-log",
        "icon_emoji": ""
    }
    
    encoded_msg = json.dumps(msg).encode('utf-8')
    resp = http.request('POST',url, body=encoded_msg)
    print({
        #"message": event['Records'][0]['Sns']['Message'], 
        "message": "Upcoming Events, check here https://phd.aws.amazon.com/phd/home?region=eu-west-1#/event-log",
        "status_code": resp.status, 
        "response": resp.data
    })

现在,我们进行了进一步的更改,但现在完全停止了。

#!/usr/bin/python3.6
import urllib3
import json
http = urllib3.PoolManager()

def lambda_handler(event, context):
    print(event)
    url = "https://hooks.slack.com/services/xxxxxxx"
    last_event = event['Records'][0]['Sns']['Message']

    msg = {
        "channel": "aws-events",
        "username": "Event_Notifier",
        "text": "Upcoming Events, check here https://phd.aws.amazon.com/phd/home?region=eu-west-1#/event-log" + "```\n" + str(last_event) + "\n```",
        "icon_emoji": ""
    }
    
    encoded_msg = json.dumps(msg).encode('utf-8')
    resp = http.request('POST',url, body=encoded_msg)
    
    print({
        "message": "Upcoming Events, check here https://phd.aws.amazon.com/phd/home?region=eu-west-1#/event-log" + "```\n" + str(last_event) + "\n```",
        "status_code": resp.status, 
        "response": resp.data
    })

现在对于如何使其与 Amazon EventBridge 正常工作一无所知。

【问题讨论】:

    标签: python python-3.x amazon-web-services aws-lambda aws-event-bridge


    【解决方案1】:

    如果您正在做类似的事情,请告诉我:

    https://www.cloudkaramchari.com/blog/receive-email-in-aws-ses-and-save-in-dynamodb/

    如果是,那么我们可以自定义您的 lambda 以实现目标。

    【讨论】:

    • 嗯,我们没有按照你所说的 atm 做任何事情。只是我粘贴在问题中的代码。所以你是说,我发布的那个根本不起作用?
    【解决方案2】:

    验证有效负载,并捕获错误响应。您可以使用的松弛消息结构格式已更新。

    有关详细信息,请参阅 Slack 文档

    https://api.slack.com/messaging/webhooks#handling_errors


    您可以探索一种使用 AWS Chatbot 进行集成的更简单方法。它消除了 lambda 并直接从 SNS 处理通知解析。

    关于 Slocak 与 AWS 聊天机器人集成的 AWS 博客

    https://aws.amazon.com/blogs/mt/monitor-amazon-eventbridge-events-in-your-slack-channels-with-aws-chatbot/

    【讨论】:

    • 我尝试使用 webhook 方法与 Microsft 团队进行相同的集成,lambda 仍将执行并且不会在响应不佳时抛出错误。有效的方法是错误处理您的 webhook。
    猜你喜欢
    • 2021-05-13
    • 2021-09-02
    • 2021-08-21
    • 2021-07-12
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多