我想要做的是将事件从不同的 AWS 帐户发送到我包含 eventbus 的帐户。
为此,我尝试将角色/策略附加到 EventBus,但我无法做到。我尝试使用 grantPutEvents 但也没有运气。这个怎么做?(添加/附加策略)
此外,如果我附加策略,其中主体作为其他 AWS 账户的账户 ID,资源作为 EventBus 的 ARN,这是否允许我发送事件?或者我需要做更多的事情吗?
我必须在存储桶内的文件夹上上传文件时启动 stepMachine 执行,我了解了如何在 S3 存储桶级别上配置 eventbridge。但同一个存储桶上可以有多个文件上传。当对象插入存储桶内的特定文件夹时,我需要收到通知。有没有可能的方法来实现这一目标?
amazon-s3 amazon-web-services aws-lambda aws-step-functions aws-event-bridge
我有一个使用 Python 的 lambda 函数。它连接到一个 EventBridge 规则,每次 Glue 表发生更改时都会触发该规则。
它输出的事件模式看起来像这样:
{
"version":"0",
"detail":{
"databaseName":"flights-db",
"typeOfChange":"UpdateTable",
"tableName":"flightscsv"
}
}
Run Code Online (Sandbox Code Playgroud)
我想将此输出中的tableName和databaseName值作为变量放入函数中。
我的 Lambda 函数:
import json
import boto3
def lambda_handler(event, context):
boto3_version = boto3.__version__
return_statement = 'Boto3 version: ', boto3_version,\
'Event output: ', event
return {
'statusCode': 200,
'body': json.dumps(return_statement)
}
Run Code Online (Sandbox Code Playgroud)
我期望从 return 语句中获得事件模式输出event,但事实并非如此。
测试此函数时,返回输出为event:
{\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}
该键和值在函数的测试模式中定义如下。
如何将事件模式中的值获取到变量?我是否需要配置测试模式才能获取结果event?
默认情况下,每个 AWS Step Function 执行名称都是随机生成的。我想为每个随机生成的名称添加一个前缀。我在文档中的任何地方都找不到执行此操作的方法。我设想这样做的方式是在定义 EventBridge 规则的 CloudFormation 模板中,但如果有我目前不知道的方式,我愿意接受建议。
有其他人能够做到这一点,还是我运气不好?
我有一个 AWS AppFlow 流设置,旨在接收 Salesforce 更改事件并在 Redshift 表上进行处理,以便在 Salesforce 中全天发生更改时保持 Redshift 表最新。
仅使用 AppFlow 并将源映射到 Redshift 中的目标字段似乎并不能达到我想要的效果,因为它似乎只是将更改附加到目标 Redshift 表 - 没有更新、删除等。
我认为解决这个问题的方法是将 AppFlow 的目标更改为 Amazon EventBridge,设置规则来侦听更改,定位 Lambda 函数,并根据事件详细信息对相应的表执行 Redshift 操作。
然而,在 Lambda 中进行这些更改和测试后,我遇到了事件问题。根据 Salesforce 的说法,更改事件消息应如下所示:
{
"data": {
"schema": "<schema_ID>",
"payload": {
"ChangeEventHeader": {
"entityName" : "...",
"recordIds" : "...",
"changeType" : "...",
"changedFields": [...],
"changeOrigin" : "...",
"transactionKey" : "...",
"sequenceNumber" : "...",
"commitTimestamp" : "...",
"commitUser" : "...",
"commitNumber" : "..."
},
"field1":"...",
"field2":"...",
. . …Run Code Online (Sandbox Code Playgroud) 我正在通过 CDK 在 AWS EventBridge 中创建自定义总线:
export class EventbridgeStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const targetCoreBus = new events.EventBus(this, 'TargetCoreBus', {
eventBusName: 'TargetCoreBus',
});
targetCoreBus.grantPutEventsTo(new iam.AccountPrincipal('1234567890'));
}
}
Run Code Online (Sandbox Code Playgroud)
巴士制作得很好,但我假设线路
targetCoreBus.grantPutEventsTo(new iam.AccountPrincipal('1234567890'));
Run Code Online (Sandbox Code Playgroud)
将向总线添加策略,允许指定帐户将事件放入其中。但它似乎没有做任何事情,堆栈中没有合成任何新内容,也没有向总线添加任何策略。这是预期的吗,我做错了什么吗?
在 EventBridge 上发布的源事件为:
{
version: '0',
id: '1234-5678-9102-3456-7890',
'detail-type': 'My-Detail-Type',
source: 'My-Source',
account: '328927794502',
time: '2021-01-29T23:52:48Z',
region: 'us-east-1',
resources: [],
detail: { year: '2020' }
}
Run Code Online (Sandbox Code Playgroud)
我继续使用目标转换器创建 EventBridge 规则:
对于Input Path我输入:
{"data_joined":"$.detail.year"}
Run Code Online (Sandbox Code Playgroud)
对于输入模板,我输入:
{"Data-Joined" : <data_joined>}
Run Code Online (Sandbox Code Playgroud)
现在,当此事件被转换并发送到目的地(可能是 Lambda 函数、CloudWatch 事件日志组等)时,我希望转换后的事件为:
{
version: '0',
id: '1234-5678-9102-3456-7890',
'detail-type': 'My-Detail-Type',
source: 'My-Source',
account: '328927794502',
time: '2021-01-29T23:52:48Z',
region: 'us-east-1',
resources: [],
detail: { Data-Joined: '2020' }
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,因为我无法在任何地方找到这个转换后的事件。有什么我应该做的不同的事情吗
javascript sms amazon-web-services amazon-dynamodb aws-event-bridge
与 EventBridge 不同,S3 Events 自 2015 年起支持前缀和后缀。参考:S3 文档
截至 2022 年 8 月,从EventBridge 的文档来看,它仅支持以下过滤器类型:
为什么 EventBridge 不支持后缀过滤或在使用 EventBridge 时如何使用后缀进行过滤?
我的用例:如果仅添加具有特定扩展名的文件,那么我希望创建事件。如果我使用 S3 事件,这是可能的。但是我们不能使用EventBridge,因为规则不支持后缀过滤。
有一些解决方法,即消费者可以忽略这些消息,但这似乎是我的场景中的黑客行为。
最近几天我正在尝试学习如何使用AWS,因为我想部署一些API。
到目前为止,我正在学习如何将API Gateway与Lambda 函数结合使用,这似乎是一个不错的工作流程。但是,因为我使用Flask-restplus编写 API ,所以我尝试了Zappa框架,该框架使用EventBridge (CloudWatch Events)作为我创建的每个 Lambda 函数的触发器。
所以我的问题是:
先感谢您。
zappa aws-lambda aws-api-gateway flask-restplus aws-event-bridge
我想要一个 lambda 创建 EventBridge 事件,但在调用 lambda 时出现此错误:
User: arn:aws:sts::120293923901:assumed-role/MyApiOrdersPostFunct-I1QOYC7P1R0Z/MyApiOrdersPostFunct-SJtAeYoiaguW is not authorized to perform: events:PutEvents on resource: arn:aws:events:eu-north-1:120293923901:event-bus/MyApiEventBus because no identity-based policy allows the events:PutEvents action
Run Code Online (Sandbox Code Playgroud)
我添加了政策但没有改变。
这是 lambda 调用 eventbridge。
User: arn:aws:sts::120293923901:assumed-role/MyApiOrdersPostFunct-I1QOYC7P1R0Z/MyApiOrdersPostFunct-SJtAeYoiaguW is not authorized to perform: events:PutEvents on resource: arn:aws:events:eu-north-1:120293923901:event-bus/MyApiEventBus because no identity-based policy allows the events:PutEvents action
Run Code Online (Sandbox Code Playgroud)
这是 CDK 配置。有两个策略(attachInlinePolicy、addToRolePolicy),因为我测试了这两个策略。
import { APIGatewayProxyHandler, APIGatewayProxyResult } from 'aws-lambda';
import { EventBridgeClient, PutEventsCommand } from '@aws-sdk/client-eventbridge';
const eventBridge = new EventBridgeClient({ region: 'eu-north-1' });
export const post: APIGatewayProxyHandler = …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-iam aws-lambda aws-cdk aws-event-bridge
aws-event-bridge ×11
aws-lambda ×5
amazon-iam ×3
aws-cdk ×3
amazon-s3 ×2
aws-glue ×1
events ×1
javascript ×1
salesforce ×1
scheduler ×1
sms ×1
zappa ×1