在 EventBridge 调度器中使用通用目标 - EventBridge 调度器

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 EventBridge 调度器中使用通用目标

通用目标是一组可自定义的参数,允许您为许多 AWS 服务调用更广泛的API操作集。例如,您可以使用通用目标参数 (UTP) 通过CreateQueue操作创建新的 Amazon SQS 队列。

要使用或其中一个计划程序 AWS CLI为您的 EventBridge 计划配置通用目标SDKs,您需要指定以下信息:

  • RoleArn— 代表要ARN用于目标的执行角色。您指定的执行角色必须具有调用计划所针对的API操作的权限。

  • Arn —完整服务ARN,包括您要定位的API操作,格式如下:arn:aws:scheduler:::aws-sdk:service:apiAction

    例如,对于 AmazonSQS,您指定的服务名称为arn:aws:scheduler:::aws-sdk:sqs:sendMessage

  • 输入-JSON 您指定的格式正确,其中包含 EventBridge 调度器发送到目标的请求参数。APIJSON您设置的参数和形状由API您的计划调用的服务决定。Input要查找此信息,请参阅要定位的服务的API参考资料。

不支持的操作

EventBridge 调度器不支持以以下前缀列表开头的只读APIGET操作,例如常见操作:

get describe list poll receive search scan query select read lookup discover validate batchGet batchDescribe batchRead transactGet adminGet adminList testMigration retrieve testConnection translateDocument isAuthorized invokeModel

例如,该GetQueueUrlAPI操作ARN的服务将如下所示:arn:aws:scheduler:::aws-sdk:sqs:getQueueURL。由于API操作以get前缀开头,因此 EventBridge 调度器不支持此目标。同样,不支持 Amazon MQ ListBrokers操作作为目标,因为该操作以前缀开头。list

使用通用目标的示例

您在调度Input字段中传递的参数取决于API您要调用的服务接受的请求参数。例如,要以 Lambda 为目标 Invoke,您可以设置参考中AWS Lambda API列出的参数。这包括您可以传递给 Lambda 函数的可选JSON负载

要确定可以为不同服务设置的参数APIs,请参阅该服务的API参考资料。与 Lambda 类似Invoke,有些APIs接受URI参数以及请求正文有效负载。在这种情况下,您可以在计划中指定URI路径参数和JSON有效负载Input

以下示例展示了如何使用通用目标来调用 Lambda SQS、Amazon 和 Step Functions 的常见API操作。

例 Lambda
$ aws scheduler create-schedule --name lambda-universal-schedule --schedule-expression 'rate(5 minutes)' \ --target '{"RoleArn": "ROLE_ARN", "Arn":"arn:aws:scheduler:::aws-sdk:lambda:invoke" "Input": "{\"FunctionName\":\"arn:aws:lambda:REGION:123456789012:function:HelloWorld\",\"InvocationType\":\"Event\",\"Payload\":\"{\\\"message\\\":\\\"testing function\\\"}\"}" }' \ --flexible-time-window '{ "Mode": "OFF"}'
例 Amazon SQS
import boto3 scheduler = boto3.client('scheduler') flex_window = { "Mode": "OFF" } sqs_universal= { "RoleArn": "<ROLE_ARN>", "Arn": "arn:aws:scheduler:::aws-sdk:sqs:sendMessage", "Input": "{\"MessageBody\":\"My message\",\"QueueUrl\":\"<QUEUE_URL>\"}"} } scheduler.create_schedule( Name="sqs-sdk-test", ScheduleExpression="rate(5 minutes)", Target=sqs_universal, FlexibleTimeWindow=flex_window)
例 Step Functions
package com.example; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.scheduler.SchedulerClient; import software.amazon.awssdk.services.scheduler.model.*; public class MySchedulerApp { public static void main(String[] args) { final SchedulerClient client = SchedulerClient.builder() .region(Region.US_WEST_2) .build(); Target stepFunctionsUniversalTarget = Target.builder() .roleArn("<ROLE_ARN>") .arn("arn:aws:scheduler:::aws-sdk:sfn:startExecution") .input("{\"Input\":\"{}\",\"StateMachineArn\":\"<STATE_MACHINE_ARN>\"}") .build(); CreateScheduleRequest createScheduleRequest = CreateScheduleRequest.builder() .name("<SCHEDULE_NAME>") .scheduleExpression("rate(10 minutes)") .target(stepFunctionsUniversalTarget) .flexibleTimeWindow(FlexibleTimeWindow.builder() .mode(FlexibleTimeWindowMode.OFF) .build()) .clientToken("<Token GUID>") .build(); client.createSchedule(createScheduleRequest); System.out.println("Created schedule with rate expression and Step Function universal target"); } }