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

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

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

要使用 AWS CLI 或其中一个 EventBridge 调度器开发工具包为您的计划配置通用目标,您需要指定以下信息:

  • RoleArn:要用于目标的执行角色的 ARN。您指定的执行角色必须具有调用作为您计划的目标的 API 操作的权限。

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

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

  • 输入:您指定的格式正确的 JSON,其中包含 EventBridge 调度器发送到目标 API 的请求参数。您在 Input 设置的 JSON 的参数和形状由您的计划调用的服务 API 决定。有关此信息,请参阅您想要设为目标的服务的 API 参考文档。

不支持的操作

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

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

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

使用通用目标的示例

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

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

以下示例展示了如何使用通用目标通过 Lambda、Amazon SQS 和 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"); } }