

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

# 在 EventBridge 调度器中使用通用目标
<a name="managing-targets-universal"></a>

 *通用目标*是一组可自定义的参数，允许您为许多 AWS 服务调用更广泛的 API 操作。例如，您可以使用通用目标参数（UTP）通过 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue) 操作创建新的 Amazon SQS 队列。

 要使用或其中一个计划程序 AWS CLI为您的 EventBridge 计划配置通用目标 SDKs，您需要指定以下信息：
+  **RoleArn**— 要用于目标的执行角色的 ARN。您指定的执行角色必须具有调用作为您计划的目标的 API 操作的权限。
+  **Arn**：完整的服务 ARN，包括您要设为目标的 API 操作，格式如下：`arn:aws:scheduler:::aws-sdk:service:apiAction`。

   例如，对于 Amazon SQS，您指定的服务名称为 `arn:aws:scheduler:::aws-sdk:sqs:sendMessage`。
**注意**  
 通用目标 ARN 中的*service*值必须与目标服务的 AWS SDK 服务标识符匹配。此标识符可能与服务的终端节点前缀不同。例如，对于亚马逊 Cognito 身份提供商，请使用`cognitoidentityprovider`（不是`cognito-idp`）。要查找正确的服务标识符，请参阅要定位的服务的 AWS SDK 文档。
+  **输入** — 您指定的格式正确的 JSON，其中包含 EventBridge 调度器发送到目标 API 的请求参数。您在 `Input` 设置的 JSON 的参数和形状由您的计划调用的服务 API 决定。有关此信息，请参阅您想要设为目标的服务的 API 参考文档。

## 不支持的操作
<a name="unsupported-api-actions"></a>

 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
```

 例如，[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html) API 操作的服务 ARN 将如下所示：`arn:aws:scheduler:::aws-sdk:sqs:getQueueURL`。由于 API 操作以`get`前缀开头，因此 EventBridge Scheduler 不支持此目标。同样，不支持将 Amazon MQ 操作 [https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers.html#ListBrokers](https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers.html#ListBrokers) 作为目标，因为该操作以前缀 `list` 开始。

## 使用通用目标的示例
<a name="managing-targets-universal-examples"></a>

 您在计划 `Input` 字段中传递的参数取决于您要调用的服务 API 接受的请求参数。例如，要以 Lambda [https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html) 为目标，您可以设置 [AWS Lambda API 参考](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestParameters)中列出的参数。这包括您可以传递给 Lambda 函数的可选 JSON [有效负载](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestBody)。

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

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

**Example 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"}'
```

**Example 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)
```

**Example 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");
    }
}
```