标签: aws-event-bridge

使用 CDK 将策略附加到 EventBus 并将跨账户事件发送到 Eventbus

我想要做的是将事件从不同的 AWS 帐户发送到我包含 eventbus 的帐户。

为此,我尝试将角色/策略附加到 EventBus,但我无法做到。我尝试使用 grantPutEvents 但也没有运气。这个怎么做?(添加/附加策略)

此外,如果我附加策略,其中主体作为其他 AWS 账户的账户 ID,资源作为 EventBus 的 ARN,这是否允许我发送事件?或者我需要做更多的事情吗?

amazon-web-services amazon-iam aws-cdk aws-event-bridge

3
推荐指数
1
解决办法
2753
查看次数

Amazon s3 文件夹上的 EventBridge 通知

我必须在存储桶内的文件夹上上传文件时启动 stepMachine 执行,我了解了如何在 S3 存储桶级别上配置 eventbridge。但同一个存储桶上可以有多个文件上传。当对象插入存储桶内的特定文件夹时,我需要收到通知。有没有可能的方法来实现这一目标?

amazon-s3 amazon-web-services aws-lambda aws-step-functions aws-event-bridge

3
推荐指数
1
解决办法
9798
查看次数

在 lambda 函数中使用 EventBridge 事件模式字符串

我有一个使用 Python 的 lambda 函数。它连接到一个 EventBridge 规则,每次 Glue 表发生更改时都会触发该规则。

它输出的事件模式看起来像这样:

{
    "version":"0",
    "detail":{
        "databaseName":"flights-db",
        "typeOfChange":"UpdateTable",
        "tableName":"flightscsv"
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将此输出中的tableNamedatabaseName值作为变量放入函数中。

我的 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\"}

该键和值在函数的测试模式中定义如下。

eventbridge 规则定义如下: 在此输入图像描述

如何将事件模式中的值获取到变量?我是否需要配置测试模式才能获取结果event

编辑:表更改事件的日志事件图片: 在此输入图像描述

amazon-web-services aws-glue aws-event-bridge

2
推荐指数
1
解决办法
6963
查看次数

有没有办法自定义状态机执行名称?

默认情况下,每个 AWS Step Function 执行名称都是随机生成的。我想为每个随机生成的名称添加一个前缀。我在文档中的任何地方都找不到执行此操作的方法。我设想这样做的方式是在定义 EventBridge 规则的 CloudFormation 模板中,但如果有我目前不知道的方式,我愿意接受建议。

有其他人能够做到这一点,还是我运气不好?

aws-cloudformation aws-step-functions aws-event-bridge

2
推荐指数
1
解决办法
2696
查看次数

AWS AppFlow Salesforce 到 Lambda 不完整事件

我有一个 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)

salesforce amazon-web-services aws-lambda aws-event-bridge

2
推荐指数
1
解决办法
758
查看次数

无法向 EventBridge 总线授予权限

我正在通过 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)

将向总线添加策略,允许指定帐户将事件放入其中。但它似乎没有做任何事情,堆栈中没有合成任何新内容,也没有向总线添加任何策略。这是预期的吗,我做错了什么吗?

userprincipal amazon-iam aws-cdk aws-event-bridge

2
推荐指数
1
解决办法
1425
查看次数

如何使用 AWS EventBridge 角色事件转换器

在 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

1
推荐指数
1
解决办法
6985
查看次数

为什么 AWS EventBridge 规则不支持后缀匹配?

与 EventBridge 不同,S3 Events 自 2015 年起支持前缀和后缀。参考:S3 文档

截至 2022 年 8 月,从EventBridge 的文档来看,它仅支持以下过滤器类型:

  • 前缀匹配
  • 除了匹配之外什么都可以
  • 数字匹配
  • IP地址匹配-存在匹配

为什么 EventBridge 不支持后缀过滤或在使用 EventBridge 时如何使用后缀进行过滤?

我的用例:如果仅添加具有特定扩展名的文件,那么我希望创建事件。如果我使用 S3 事件,这是可能的。但是我们不能使用EventBridge,因为规则不支持后缀过滤。

有一些解决方法,即消费者可以忽略这些消息,但这似乎是我的场景中的黑客行为。

events amazon-s3 aws-event-bridge

1
推荐指数
1
解决办法
2213
查看次数

EventBridge 与 API 网关

最近几天我正在尝试学习如何使用AWS,因为我想部署一些API。

到目前为止,我正在学习如何将API GatewayLambda 函数结合使用,这似乎是一个不错的工作流程。但是,因为我使用Flask-restplus编写 API ,所以我尝试了Zappa框架,该框架使用EventBridge (CloudWatch Events)作为我创建的每个 Lambda 函数的触发器。

所以我的问题是:

  1. EventBridge 和 API Gateway 之间有什么区别?我何时应该使用它们?
  2. 在使用 API Gateway 时,我意识到最佳实践是为每个 API 创建不同的 Lambda 函数,然后将其连接到网关。那么,将整个 python 文件作为 Lambda 函数上传是一个好主意吗?(所有 API 路由都写在那里)或者我应该为每个 API 执行一个过程?

先感谢您。

zappa aws-lambda aws-api-gateway flask-restplus aws-event-bridge

0
推荐指数
1
解决办法
2730
查看次数

以编程方式编辑 AWS 事件调度程序持续时间

我们可以编辑 AWS 事件调度程序规则以通过程序、脚本或 lambda 更改持续时间吗?

在此处输入图片说明

scheduler amazon-web-services aws-lambda aws-event-bridge

0
推荐指数
1
解决办法
214
查看次数

lambda 创建事件事件的权限:PutEvents

我想要一个 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

0
推荐指数
1
解决办法
6860
查看次数