如何在AWS中通过Cron调度向端点POST请求并携带数据?
在AWS中调度触发带数据的POST请求方案
一、通过EventBridge + Lambda运行Python脚本
完全可以实现,步骤如下:
- 创建Lambda函数,将你的Python代码调整为Lambda兼容格式(注意:Lambda默认环境没有
requests库,要么用Python内置的urllib.request替代,要么把requests打包成Lambda层) - 配置EventBridge规则,用Cron表达式设定调度时间,触发该Lambda函数
示例Lambda代码(用urllib替代requests):
import urllib.request import json def lambda_handler(event, context): url = "http://some.domain.org" post_data = {'number': '12524', 'type': 'issue', 'action': 'show'} data = json.dumps(post_data).encode('utf-8') req = urllib.request.Request(url, data=data, method='POST') req.add_header('Content-Type', 'application/json') with urllib.request.urlopen(req) as response: response_data = response.read().decode('utf-8') return {"statusCode": 200, "body": response_data}
二、EventBridge直接触发HTTP端点(无需代码)
EventBridge支持直接调用HTTP/HTTPS端点,无需中转Lambda:
- 创建EventBridge规则,选择"API Destinations"作为目标
- 配置端点的URL、请求方法为POST
- 在"Input Transformer"中定义要发送的POST数据,比如输入模板填写:
{"number": "12524", "type": "issue", "action": "show"} - 配置好IAM权限后,EventBridge会按调度规则直接发送POST请求
三、通过SNS Topic触发HTTP请求的两种方式
1. SNS直接订阅HTTP端点
- 创建SNS Topic,添加HTTP/HTTPS类型的订阅,填写你的目标端点URL
- 发送消息到SNS Topic时,把要携带的POST数据放在消息体里(比如JSON格式)
- 目标端点接收到的请求是SNS封装后的结构,需要解析
Message字段获取你传入的数据,示例接收结构:{ "Type": "Notification", "Message": "{\"number\": \"12524\", \"type\": \"issue\", \"action\": \"show\"}", ... }
2. SNS触发Lambda再发POST请求
- 创建Lambda函数(同第一种方案的代码),将Lambda设为SNS Topic的订阅者
- 发送消息到SNS Topic时,把POST数据放在消息体中
- Lambda接收SNS事件后,解析
event['Records'][0]['Sns']['Message']获取数据,再发起POST请求
内容的提问来源于stack exchange,提问作者haju
相关产品推荐
相关产品推荐

