亚马逊AWS官方博客

新增功能 – Amazon EventBridge 架构注册表现已全面推出

Amazon EventBridge 是一个无服务器事件总线,可以轻松地将应用程序连接到一起。它可以使用 AWS 服务、您自己的应用程序以及与软件即服务 (SaaS) 合作伙伴集成所提供的数据。去年在 re:Invent 上,我们推出了 EventBridge 架构注册表和发现预览版,它是一种将事件结构(架构)存储在中央位置并通过为 Java、Python 和 Typescript 生成处理事件的代码来简化在代码中使用事件的方法。

今天,我很高兴地宣布 EventBridge 架构注册表已全面推出,并且我们还增加了对资源策略的支持。资源策略可用于在不同的 AWS 账户和组织间共享架构存储库。用此方式,不同团队的开发人员可以搜索并使用另一个团队添加到共享注册表中的任何架构。

使用 EventBridge 架构注册表资源策略
公司使用不同的开发团队处理不同的服务是很常见的现象。举一个更具体的例子,我们以处理服务的两个必须相互交流的团队为例:

  • CreateAccount 开发团队开发前端 API 来从 Web/移动客户端接收请求,以为公司创建新的客户账户。
  • FraudCheck 开发团队开发后端服务来检查新创建账户的数据,以估计这些账户为假账户的风险。

每个团队都使用自己的 AWS 账户来开发其应用程序。 使用 EventBridge,我们可以实施以下架构:

  • 前端 CreateAccount 应用程序使用 Amazon API Gateway 来通过在 Python 中编写的 AWS Lambda 函数处理请求。当新账户创建后,Lambda 函数会在自定义事件总线上发布 ACCOUNT_CREATED 事件。
  • 后端 FraudCheck Lambda 函数在 Java 中构建,预计将接收 ACCOUNT_CREATED 事件来调用 Amazon Fraud Detector(我们在 re:Invent 中推出预览版的一种完全托管服务),以估计成为假账户的风险。如果风险超出特定预置,Lambda 函数将采取预防措施。例如,它可以在数据库上将该账户标记为假账户,或在事件总线上发布 FAKE_ACCOUNT 事件。

这两个团队如何协调工作,以便都能了解事件的语法并使用 EventBridge 生成处理这些事件的代码?

首先,使用能在公司组织内进行访问的权限创建自定义事件总线。

然后,CreateAccount 团队使用 EventBridge 架构发现自动填充其服务发布的 ACCOUNT_CREATED 事件的架构。该事件包含刚创建的账户的所有信息。

在事件驱动型架构中,服务可以订阅它们感兴趣的特定事件类型。要接收 ACCOUNT_CREATED 事件,基于事件总线创建一个规则,以将这些事件发送到 FraudCheck 函数。

使用资源策略,CreateAccount 团队可为 FraudCheck 团队提供 AWS 账户到所发现架构的只读访问权。此策略中的委托人为获取权限的 AWS 账户。资源为正在共享的架构注册表。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "GiveSchemaAccess",
      "Effect": "Allow",
      "Action": [
        "schemas:ListSchemas",
        "schemas:SearchSchemas",
        "schemas:DescribeSchema",
        "schemas:DescribeCodeBinding",
        "schemas:GetCodeBindingSource",
        "schemas:PutCodeBinding"
      ],
      "Principal": {
        "AWS": "123412341234"
      },
      "Resource": [
        "arn:aws:schemas:us-east-1:432143214321:schema/discovered-schemas",
        "arn:aws:schemas:us-east-1:432143214321:schema/discovered-schemas*"
      ]
    }
  ]
}

现在,FraudCheck 团队可以搜索所发现架构的内容,以找到 ACCOUNT_CREATED 事件。资源策略可使您将注册表提供给各个账户和组织,但它们不会自动显示在控制台中。要访问共享的注册表,FraudCheck 团队需要使用 AWS 命令行界面 (CLI) 并指定注册表的完整 ARN

aws schemas search-schemas \
    --registry-name arn:aws:schemas:us-east-1:432143214321:registry/discovered-schemas \
    --keywords ACCOUNT_CREATED

用此方式,FraudCheck 团队可以获得 CreateAccount 团队所创建的架构的确切名称。

{
    "Schemas": [
        {
            "RegistryName": "discovered-schemas",
            "SchemaArn": "arn:aws:schemas:us-east-1:432143214321:schema/discovered-schemas/CreateAccount@ACCOUNT_CREATED",
            "SchemaName": “CreateAccount@ACCOUNT_CREATED",
            "SchemaVersions": [
                {
                    "CreatedDate": "2020-04-28T11:10:15+00:00",
                    "SchemaVersion": 1
                }
            ]
        }
    ]
}

通过架构名称,FraudCheck 团队可以描述架构的内容:

aws schemas describe-schema \
    --registry-name arn:aws:schemas:us-east-1:432143214321:registry/discovered-schemas \
    --schema-name CreateAccount@ACCOUNT_CREATED

结果将使用 OpenAPI 规范描述架构:

{
    "Content": "{\"openapi\":\"3.0.0\",\"info\":{\"version\":\"1.0.0\",\"title\":\"CREATE_ACCOUNT\"},\"paths\":{},\"components\":{\"schemas\":{\"AWSEvent\":{\"type\":\"object\",\"required\":[\"detail-type\",\"resources\",\"detail\",\"id\",\"source\",\"time\",\"region\",\"version\",\"account\"],\"x-amazon-events-detail-type\":\"CREATE_ACCOUNT\",\"x-amazon-events-source\":\”CreateAccount\",\"properties\":{\"detail\":{\"$ref\":\"#/components/schemas/CREATE_ACCOUNT\"},\"account\":{\"type\":\"string\"},\"detail-type\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"region\":{\"type\":\"string\"},\"resources\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"source\":{\"type\":\"string\"},\"time\":{\"type\":\"string\",\"format\":\"date-time\"},\"version\":{\"type\":\"string\"}}},\"CREATE_ACCOUNT\":{\"type\":\"object\",\"required\":[\"firstName\",\"surname\",\"id\",\"email\"],\"properties\":{\"email\":{\"type\":\"string\"},\"firstName\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"surname\":{\"type\":\"string\"}}}}}}",
    "LastModified": "2020-04-28T11:10:15+00:00",
    "SchemaArn": "arn:aws:schemas:us-east-1:432143214321:schema/discovered-schemas/CreateAccount@CREATE_ACCOUNT",
    "SchemaName": “CreateAccount@ACCOUNT_CREATED",
    "SchemaVersion": "1",
    "Tags": {},
    "Type": "OpenApi3",
    "VersionCreatedDate": "2020-04-28T11:10:15+00:00"
}

通过 AWS 命令行界面 (CLI)FraudCheck 团队可以使用 put-code-binding 命令创建代码绑定(如果尚未创建),然后下载代码绑定来处理该事件:

aws schemas get-code-binding-source \
    --registry-name arn:aws:schemas:us-east-1:432143214321:registry/discovered-schemas \
    --schema-name CreateAccount@ACCOUNT_CREATED \
    --language Java8 CreateAccount.zip

FraudCheck 团队的另一个选择是,复制并粘贴(取消 JSON 字符串的转义后)所发现架构的内容,以在其 AWS 账户中创建新的自定义架构。

当架构被复制到其自己的账户后,FraudCheck 团队便可以使用 AWS Toolkit IDE 插件查看架构、下载代码绑定并从其 IDE 中直接生成无服务器应用程序。 EventBridge 团队正在努力为 AWS Toolkit 增加功能,以便能在不同账户中使用架构注册表,从而更加简化此步骤。敬请随时关注!

客户通常会设置一个特定团队来使用不同的 AWS 账户管理事件总线。为了简单起见,在此博文中,我假设 CreateAccount 团队是配置 EventBridge 事件总线的团队。若有更多账户,您可以使用 IAM 来简化与 AWS Organizations 中的 AWS 账户组共享资源的权限。

现已推出
EventBridge 架构注册表现已在除巴林、开普敦、米兰、大阪、北京和宁夏之外的所有商业区域推出。有关如何将资源策略用于架构注册表的更多信息,请参阅文档

使用架构注册表资源策略,可以更加轻松地协调在事件驱动型架构中共享信息的不同团队的工作。

欢迎与我分享您打算用它来构建什么样的应用程序!

Danilo