

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 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 中的{{服務}}值必須符合目標服務的 AWS SDK 服務識別符。此識別符可能與服務的端點字首不同。例如，對於 Amazon Cognito 身分提供者，請使用 `cognitoidentityprovider`（而非 `cognito-idp`)。若要尋找正確的服務識別符，請參閱您要鎖定之服務的 AWS SDK 文件。
+  **輸入** – 您使用 EventBridge 排程器傳送至目標 API 的請求參數指定的格式良好的 JSON。您在 中設定的 JSON 參數和形狀`Input`取決於您的排程調用的服務 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 排程器不支援此目標。同樣，[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)不支援 Amazon MQ 動作做為目標，因為操作以字首 開頭`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 參數，以及請求內文承載。在這種情況下，您可以在排程 中指定 URI 路徑參數和 JSON 承載`Input`。

 下列範例示範如何使用通用目標，透過 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 步驟函數**  

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