我希望 SNS 主题触发 Eventbridge 事件,以便我可以调用 ECS 任务。我尝试将 Eventbridge 规则连接到 SNS 主题,如下所示(这是我的 eventbridge 规则的事件模式):
{
"source": [
"aws.sns"
],
"region": [
"eu-west-1"
],
"resources": [
"arn:aws:sns:eu-west-1:xxx:myTestTopicForECS"
]
}
Run Code Online (Sandbox Code Playgroud)
但是,当我向此主题发布消息时,Eventbridge 规则不会被触发。我试图看看其他人是否也遇到这个问题,但没有找到任何东西。我该如何解决这个问题?
我正在使用 AWS 开发工具包v2.796.0
根据 putEvents 的文档,详细信息值必须是有效的 JSON 字符串。 https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEventsRequestEntry.html
但是,它不接受 JSON 数组作为字符串。
const eventBridge = new AWS.EventBridge();
const entries = {
Entries: [
{
EventBusName: "busName",
Source: "api.user",
DetailType: "detailType",
Detail: JSON.stringify({ test: { test: ["test", "test2"] } }),
},
],
};
const rs = await eventBridge.putEvents(entries).promise();
console.log(rs);
// this passes
// {
// FailedEntryCount: 0,
// Entries: [ { EventId: 'a6176012-7310-2b84-a9b5-819956e2e3f9' } ]
// }
const entries2 = {
Entries: [
{
EventBusName: "busName",
Source: "api.user",
DetailType: "detailType", …Run Code Online (Sandbox Code Playgroud) 我在 aws eventsbridge 中使用事件模式创建了一个事件规则:
{
"source": [
"aws.s3"
]
}
Run Code Online (Sandbox Code Playgroud)
目标是 CloudWatch 日志组。现在,当我在存储桶级别更改某些内容(例如存储桶权限)时,我会看到云监视中捕获的事件,但是当我在 s3 存储桶中添加/删除文件时,什么也没有发生。这里出了什么问题?
如何从客户端应用程序(例如 NodeJS 应用程序、Angular 客户端或移动客户端应用程序)订阅 AWS Event Bus 事件?
2020 年 12 月,来自 AWS 营销部门的一封电子邮件介绍了使用事件驱动架构的优势。按照文档和教程,很快我就陷入了无法找到从客户端应用程序订阅此事件的方法的困境。
该电子邮件指出:
关注事件驱动架构的 4 个理由
您是否希望在没有延迟和依赖性的情况下扩展和构建强大的应用程序?我们详细介绍了事件驱动架构的基础知识、它们的工作原理,并向您展示了入门方法。了解事件驱动架构如何帮助您:
令人失望的是,没有任何库示例可以集成到客户端代码中来订阅这些事件。谷歌搜索不会返回任何重要结果,节点当前唯一的库:@aws-sdk/client-eventbridge-node仅公开发送和销毁方法。
是否可以创建一个 EventBrisge 规则,该规则可以安排在一天中的特定时间运行并调用 API 作为自定义目标?
如果目标是 AWS 或合作伙伴服务,则似乎可以为目标设置计划,但如果它们是自定义配置的端点,则不能为目标设置计划。
我想做的就是设置一个日常例程来调用端点,以便它可以执行日常清理任务。如果有更好的方法,请问有人可以推荐吗?
编辑
在下面,EventBridge我创建了一个指向 OAuth 端点的连接,然后创建了一个指向我想要每天调用的 API 端点的 API 目标。
然后,我创建了一个事件总线和一个规则,但是当我尝试在规则上设置“计划”选项时,它会显示一条警告,其中指出:
选择自定义或合作伙伴事件总线时,不支持计划规则
我相信这意味着我无法在不通过 Lambda 的情况下使用 EventBridge 调用我自己的 API 端点。我错了吗?
我把这个问题表述如下:
EventBridge 事件是否中继到 ECS 任务?(如果不转发事件,我看不出它有多大用处)。
如果事件被中继,那么如何能够从作为任务运行的 Node 应用程序中提取它。
某些上下文到期:可以设置 EventBridge 规则来触发 ECS Fargate 任务,作为源自 CodeCommit 的事件的结果。请注意,这里的问题是接收器/目标,而不是源。当我更新我的存储库时,我能够触发 Fargate 任务。我可以使用其他事件。我的挑战在于提取转发的事件(在这种情况下,是来自 Fargate 的存储库名称、commitId 等。)
EventBridge 文档清楚地说明了如何设置触发事件的规则,但对如何提取事件却一无所知——这是有道理的,因为接收器/目标文档将有必要的参考。但是 ECS 文档并不清楚如何提取中继事件。
我能够检查元数据和 process.env。我在任何一家商店都找不到该活动。
我添加了一个 CloudWatch 日志组作为同一规则的目标,并且能够提取事件。所以它肯定会中继到一些目标,但不确定事件是否会中继到 ECS 任务。
因此,问题出现了:事件是否中继到 ECS 任务?如果是这样,您将如何访问它?
我有一个事件总线并创建了一个将事件转发到 SQS 队列的事件规则。现在,我使用默认的亚马逊管理密钥 (alias/aws/sqs) 为队列启用了加密。
启用加密后,事件不再转发。研究 AWS 文档时,我只能找到有关使用 CMK 进行加密的信息,但没有找到有关亚马逊托管密钥的信息。
我猜这是一个权限问题,但不确定。这是我的活动规则和访问策略
queueCreateInvoiceEvent:
Type: AWS::Events::Rule
DependsOn: [myQueue]
Properties:
Description: Forward INVOICE_CREATED event to SQS queue
EventBusName: ${self:custom.eventBus.name}
EventPattern: { "detail-type": ["INVOICE_CREATED"] }
Name: ${self:service.name}-${self:provider.stage}-buffer-invoice-created-event
State: ENABLED
Targets:
- Id: myQueue
Arn:
Fn::GetAtt: [myQueue, Arn]
createReceiptQueueAccessPolicy:
Type: AWS::SQS::QueuePolicy
DependsOn: [queueCreateInvoiceEvent, myQueue]
Properties:
Queues:
- { Ref: createReceiptQueue }
PolicyDocument:
Id: EventBridgeSqsAccessPolicy
Version: "2012-10-17"
Statement:
- Sid: Allow-User-SendMessage
Effect: Allow
Principal:
Service: "events.amazonaws.com"
Action:
- sqs:SendMessage
Resource:
- Fn::GetAtt: ["myQueue", "Arn"]
Condition:
ArnEquals: …Run Code Online (Sandbox Code Playgroud) 我Firehose从Eventbridge事件中读到的内容类似于:
{
"detail": {
"key1": "some value",
"key2": "some value",
"Timestamp": "2022-01-21T19:01:05Z"
}
}
Run Code Online (Sandbox Code Playgroud)
我想在将事件保存到s3. 我尝试像这样提取年份:
.detail.Timestamp| strftime("%Y")
Run Code Online (Sandbox Code Playgroud)
Timestamp我知道如果以格式给出字段,这会起作用epoch,但现在我收到错误(通过保存到文件中firehose):
{
. . .
"errorCode": "DynamicPartitioning.MetadataExtractionFailed",
"errorMessage": "strftime/1 requires parsed datetime inputs",
. . .
}
Run Code Online (Sandbox Code Playgroud)
从我的事件包含的时间戳中提取年份(和其他时间部分)的正确语法是什么?
amazon-web-services amazon-kinesis amazon-kinesis-firehose aws-event-bridge
我正在尝试在 S3 上启用 Eventbridge 通知,但收到此错误消息“无法验证以下目标配置”,我不确定导致此问题的原因。任何帮助,将不胜感激。
我正在尝试验证传入 AWS Event Bridge 的 JSON 事件。
我已按照有关如何下载代码绑定的文档进行操作。一切正常。
我还使用架构发现测试了事件桥,它工作正常,并使用 Firehose 作为目标将我的数据放入正确的目标。
我想要实现的是能够验证模式注册表中已有模式传入的事件 json。然而,这个文档关于常见问题解答;
模式注册表如何减少我需要编写的代码量?
说:
首先,您可以使用架构发现来自动识别发送到 EventBridge 事件总线的任何事件的架构,并将它们存储在注册表中,从而使您无需手动管理事件架构。其次,当您编写处理总线上的事件的应用程序时,您可以生成并下载此架构的代码绑定,以便可以直接在代码中使用强类型对象。这节省了事件处理程序的反序列化、验证和猜测的开销。
然而,在我的事件处理程序 fn 中,我看不出这是怎么可能的,除非我安装了外部 json 模式验证器(类似于我之前所做的,但只是在 Kinesis Firehose 的 lambda 转换 fn 中)。
我认为如果事件中提供了模式的特定版本号,模式验证就会自行发生。
有办法实现这一点吗?
aws-event-bridge ×10
amazon-s3 ×2
aws-sdk ×2
amazon-sns ×1
amazon-sqs ×1
aws-lambda ×1
aws-sdk-js ×1
event-bus ×1
restful-url ×1