我在 AWS EventBridge 上收到一个 Webhook 事件。事件 json 正文非常大,我只需将 4 个字段传输到目标。这些字段是:
{"browser_ip":"$.detail.payload.browser_ip","created_at":"$.detail.payload.created_at","email":"$.detail.payload.email","shopify_order_id":"$.详细信息.payload.id"}
我尝试过“配置输入”-->“匹配的 eventInfo 的一部分”选项,但仅当我仅添加 1 个参数(例如“$.detail.payload”)时它才有效。当我添加多个参数时,它说输入路径无效。我找不到任何有关如何添加匹配事件信息的多个部分的示例。是否可以 ?如果是的话我做错了什么?
我正在尝试验证传入 AWS Event Bridge 的 JSON 事件。
我已按照有关如何下载代码绑定的文档进行操作。一切正常。
我还使用架构发现测试了事件桥,它工作正常,并使用 Firehose 作为目标将我的数据放入正确的目标。
我想要实现的是能够验证模式注册表中已有模式传入的事件 json。然而,这个文档关于常见问题解答;
模式注册表如何减少我需要编写的代码量?
说:
首先,您可以使用架构发现来自动识别发送到 EventBridge 事件总线的任何事件的架构,并将它们存储在注册表中,从而使您无需手动管理事件架构。其次,当您编写处理总线上的事件的应用程序时,您可以生成并下载此架构的代码绑定,以便可以直接在代码中使用强类型对象。这节省了事件处理程序的反序列化、验证和猜测的开销。
然而,在我的事件处理程序 fn 中,我看不出这是怎么可能的,除非我安装了外部 json 模式验证器(类似于我之前所做的,但只是在 Kinesis Firehose 的 lambda 转换 fn 中)。
我认为如果事件中提供了模式的特定版本号,模式验证就会自行发生。
有办法实现这一点吗?
我在使用 EventBridge 服务将 AWS 状态机返回的值之一作为输入传递到 Lambda 时遇到问题。
我在 AWS Step Functions 中创建了一个状态机来对我们域中的特定问题进行建模。状态机完成后,我想从其中一个 Lambda 内部执行另一项操作。为了实现这一点,我使用 EventBridge 创建了一条新规则:每当状态机完成时,它都会使用特定的 Json 输入触发我的 lambda。
我的问题是如何从状态机输出中提取属性并将它们作为 lambda 输入的属性传递。
假设我的状态机返回以下内容:
{
"usefulObject":{
"usefulProperty":"value"
},
"anotherProperty":"anotherValue"
}
Run Code Online (Sandbox Code Playgroud)
我想在我的 lambda 中接收以下有效负载:
{
"property":"value"
}
Run Code Online (Sandbox Code Playgroud)
最初,我认为我可以使用 EventBridge 规则上的“输入转换”选项来完成此操作,例如:
{"propertyValue":"$.usefulObject.usefulProperty"}
Run Code Online (Sandbox Code Playgroud)
{"property":<propertyValue>}
Run Code Online (Sandbox Code Playgroud)
然而,在测试过程中,我意识到事件有效负载包含的数据比状态机输出多得多。实际上,状态机输出被包装在这个“事件容器”对象中,如下所示:
{
"version": "0",
"id": "...",
"detail-type": "Step Functions Execution Status Change",
"source": "aws.states",
"account": "...",
"time": "2020-11-10T13:59:57Z",
"region": "us-east-1",
"resources": [
"...myStateMachineArn..."
],
"detail": {
"executionArn": "...myStateMachineExecutionArn...",
"stateMachineArn": "...myStateMachineArn...",
"name": "ff72036a-2917-c657-80e7-2589b7b76d59",
"status": "SUCCEEDED",
"startDate": 1605016794597,
"stopDate": 1605016797936, …Run Code Online (Sandbox Code Playgroud) json jsonpath aws-lambda aws-step-functions aws-event-bridge
有谁知道是否有一个 API 可以读取使用 EventBridge 归档功能归档的事件?
我们的目标是进行事件重播,但开箱即用的事件重播功能对我们不起作用,因为我们需要保留事件的时间顺序。作为一种解决方法,我想知道是否有一个选项可以通过拖网事件存档然后按顺序引发事件来手动执行此操作
如何在正则表达式上匹配 CloudWatch 事件。我只需要调用特定作业名称上的特定 SNS 目标。例如,如下所示,我想在 TranscriptionJobName 上进行正则表达式匹配。谢谢。
{
"source": [
"aws.transcribe"
],
"detail-type": [
"Transcribe Job State Change"
],
"detail": {
"TranscriptionJobStatus": [
"COMPLETED",
"FAILED"
],
"TranscriptionJobName": [
"transcription-localhost-*"
]
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试设置一个演示环境来尝试 SQS 作为 AWS 事件桥源。我尝试将一些文档上传到 SQS 以查看 Event Bridge 是否检测到任何更改,但我没有看到触发任何事件。如何使用 AWS Event Bridge 测试 SQS 作为源?
Resources:
Queue:
Type: AWS::SQS::Queue
Properties:
QueueName: !Sub ${AWS::StackName}
LambdaHandlerExecutionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
EventConsumerFunction:
Type: AWS::Lambda::Function
Properties:
Handler: index.lambda_handler
Role: !GetAtt LambdaHandlerExecutionRole.Arn
Code:
ZipFile: |
import json
def lambda_handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
Runtime: python3.7
Timeout: 50
EventRule:
Type: AWS::Events::Rule
Properties:
Description: eventEventRule
State: ENABLED
EventPattern: …Run Code Online (Sandbox Code Playgroud) amazon-sqs amazon-web-services amazon-cloudwatch aws-event-bridge
我通过以下方式使用开发工具包从 AWS EventBridge 检索规则列表:
var response = await ebClient.ListRulesAsync(rulesRequest, cancellationToken);
var rules = response.Rules;
Run Code Online (Sandbox Code Playgroud)
列表中的每个规则都有Name、ScheduleExpression等,但没有诸如上次执行时间或下次执行时间之类的信息。我认为这些信息可以通过 SDK 获得或以其他方式获得,但无法弄清楚。这可能吗?
提前致谢!
我有两个 AWS-Lamdbda 函数,我希望 Lambda A 确定某个时间点,例如 2022 年 5 月 4 日 10:00。然后我希望 Lambda B 被安排在这个特定的时间点运行。
我可能可以通过使用 Lambda A 以编程方式创建 AWS eventbrigde 规则并使用 cron 模式来匹配我的时间点来实现此目的。然后,在 Lambda 内部,BI 需要删除该规则,因为它是一次性使用的。
你们中有人能想出一种更优雅的方式来实现这一目标吗?
感谢您的智慧!
编辑:
我的时间点是动态的。我调用公共API来找到Lambda B运行的点,所以我不能直接使用EventBridge。我计划每天运行 Lambda A 一次,看看是否有必要运行新的 Lambda B。
我希望 Lambda 函数每 10 分钟触发一次,并且该函数从 EventBridge 接收 JSON 形式的事件。该事件将包含将在 Lambda 代码中使用的文档 ID。目前,EventBridge 不具备将自定义事件发送到规则类型计划目标的功能。这里的自定义事件是文档 ID,我希望 Lambda 函数将其作为事件接收。我怎样才能实现这个目标?
每次在名为“mybucket”的 S3 存储桶中创建 S3 对象时,我想通过 EventBridge 触发 AWS lambda 函数,但前提是其名称/密钥以“.csv”后缀结尾并且是在“”中创建的在该存储桶的“文件夹中。我目前拥有的 EventBridge 规则是这样的:
{
"detail-type": ["Object Created"],
"source": ["aws.s3"],
"detail": {
"bucket": {
"name": ["mybucket"]
},
"object": {
"key": [{
"suffix": ".csv"
}, {
"prefix": "in/"
}]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上希望这个规则能够以正确的方式工作,但事实并非如此,相反,它的行为就像后缀和前缀过滤条件之间存在 OR 关系一样。据我了解AWS文档(https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns-content-based-filtering.html#eb-filtering-complex-example)上述规则应定义后缀和前缀过滤条件之间的 AND 关系,类似于文档中给出的示例:
{
"time": [ { "prefix": "2017-10-02" } ],
"detail": {
"state": [ { "anything-but": "initializing" } ],
"c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ],
"d-count": [ { "numeric": [ …Run Code Online (Sandbox Code Playgroud) rules pattern-matching amazon-web-services suffix aws-event-bridge
aws-event-bridge ×10
aws-lambda ×3
jsonpath ×2
amazon-sqs ×1
c# ×1
json ×1
python ×1
rules ×1
suffix ×1