Amazon EventBridge 中规则的 AWS AppSync 目标 - Amazon EventBridge

Amazon EventBridge 中规则的 AWS AppSync 目标

AWS AppSync 允许开发人员通过安全、无服务器且高性能的 GraphQL 和 Pub/Sub API 将其应用程序和服务连接到数据和事件。借助 AWS AppSync,您可以通过 GraphQL 突变将实时数据更新发布到您的应用程序。EventBridge 支持为匹配的事件调用有效的 GraphQL 突变操作。当您将 AWS AppSync API 突变指定为目标时,AWS AppSync 会通过突变操作处理事件,然后触发与该突变相关的订阅。

注意

EventBridge 支持 AWS AppSync 公共 GraphQL API。EventBridge 目前不支持 AWS AppSync 私有 API。

可以将 AWS AppSync GraphQL API 目标用于以下使用场景:

  • 推送、转换事件数据以及将其存储到您配置的数据源中。

  • 向连接的应用程序客户端发送实时通知。

注意

AWS AppSync 目标仅支持使用 AWS_IAM 授权类型调用 AWS AppSync GraphQL API。

有关 AWS AppSync GraphQL API 的更多信息,请参阅《AWS AppSync 开发人员指南》中的 GraphQL 和 AWS AppSync 架构

使用控制台为 EventBridge 规则指定 AWS AppSync 目标
  1. 创建或编辑规则。

  2. 目标下,通过依次选择 AWS 服务AWS AppSync指定目标

  3. 指定要解析和执行的突变操作以及选择集。

    • 选择 AWS AppSync API,然后选择要调用的 GraphQL API 突变。

    • 配置参数和选择集下,选择使用键值映射或输入转换器创建选择集。

      Key-value mapping

      要使用键值映射来创建选择集,请执行以下操作:

      • 为 API 参数指定变量。每个变量可以是静态值,也可以是事件负载的动态 JSON 路径表达式。

      • 选择集下,选择要包含在响应中的变量。

      Input transformer

      要使用输入转换器创建选择集,请执行以下操作:

      • 指定用于定义要使用的变量的输入路径。

      • 指定输入模板来定义要传递给目标的信息并为其设置格式。

      有关更多信息,请参阅 在 EventBridge 中创建规则时配置输入转换器

  4. 对于执行角色,选择是创建新的角色还是使用现有角色。

  5. 完成规则的创建或编辑。

示例:Amazon EventBridge 的 AWS AppSync 目标

在以下示例中,我们将介绍如何为 EventBridge 规则指定 AWS AppSync 目标,包括通过定义输入转换来设置待传送事件的格式。

假设您有一个 AWS AppSync GraphQL API Ec2EventAPI,它由以下架构定义:

type Event { id: ID! statusCode: String instanceId: String } type Mutation { pushEvent(id: ID!, statusCode: String!, instanceId: String): Event } type Query { listEvents: [Event] } type Subscription { subscribeToEvent(id: ID, statusCode: String, instanceId: String): Event @aws_subscribe(mutations: ["pushEvent"]) }

使用此 API 的应用程序客户端可以订阅由 pushEvent 突变触发的 subscribeToEvent 订阅。

您可以创建一条 EventBridge 规则,其目标通过 pushEvent 突变将事件发送到 AppSync API。当调用突变时,任何订阅的客户端都将收到该事件。

要将此 API 指定为 EventBridge 规则的目标,您需要执行以下操作:

  1. 将规则目标的 Amazon 资源名称(ARN)设置为 Ec2EventAPI API 的 GraphQL 端点 ARN。

  2. 将突变 GraphQL 操作指定为目标参数:

    mutation CreatePushEvent($id: ID!, $statusCode: String, $instanceId: String) { pushEvent(id: $input, statusCode: $statusCode, instanceId: $instanceId) { id statusCode instanceId } }

    您的突变选择集必须包含您希望在 GraphQL 订阅中订阅的所有字段。

  3. 配置输入转换器以指定在操作中如何使用来自匹配事件的数据。

    假设您选择了 “EC2 Instance Launch Successful” 示例事件:

    { "version": "0", "id": "3e3c153a-8339-4e30-8c35-687ebef853fe", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:31:47Z", "region": "us-east-1", "resources": ["arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:eb56d16b-bbf0-401d-b893-d5978ed4a025:autoScalingGroupName/sampleLuanchSucASG", "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f"], "detail": { "StatusCode": "InProgress", "AutoScalingGroupName": "sampleLuanchSucASG", "ActivityId": "9cabb81f-42de-417d-8aa7-ce16bf026590", "Details": { "Availability Zone": "us-east-1b", "Subnet ID": "subnet-95bfcebe" }, "RequestId": "9cabb81f-42de-417d-8aa7-ce16bf026590", "EndTime": "2015-11-11T21:31:47.208Z", "EC2InstanceId": "i-b188560f", "StartTime": "2015-11-11T21:31:13.671Z", "Cause": "At 2015-11-11T21:31:10Z a user request created an AutoScalingGroup changing the desired capacity from 0 to 1. At 2015-11-11T21:31:11Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1." } }

    您可以使用目标输入转换器的输入路径,定义以下变量供模板使用:

    { "id": "$.id", "statusCode": "$.detail.StatusCode", "EC2InstanceId": "$.detail.EC2InstanceId" }

    编写输入转换器模板,以定义 EventBridge 传递给 AWS AppSync 突变操作的变量。模板的计算结果必须为 JSON。根据我们的输入路径,您可以编写以下模板:

    { "id": <id>, "statusCode": <statusCode>, "instanceId": <EC2InstanceId> }