使用通用目標 - EventBridge 排程器

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

使用通用目標

通用目標是一組可自訂的參數,可讓您針對許多AWS服務叫用更廣泛的 API 作業集。例如,您可以使用通用目標參數 (UTP),使用該CreateQueue作業建立新的 Amazon SQS 佇列。

若要使用或其中一個 EventBridge 排程器 SDK 設定排程的通用目標,您必須指定下列資訊:AWS CLI

  • RoleArn— 您要用於目標之執行角色的 ARN。您指定的執行角色必須具有呼叫您要排程鎖定之 API 作業的權限。

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

    例如,對於 Amazon SQS,您指定的服務名稱為arn:aws:scheduler:::aws-sdk:sqs:sendMessage

  • 輸入 — 您使用 EventBridge 排程器傳送至目標 API 的要求參數來指定格式良好的 JSON。您在中設定的 JSON 參數和形狀Input由排程叫用的服務 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 isAuthorizedWithToken invokeModel

例如,GetQueueUrlAPI 動作的服務 ARN 如下所示:arn:aws:scheduler:::aws-sdk:sqs:getQueueURL由於 API 動作以get前綴開頭,因此「 EventBridge 排程器」不支援此目標。同樣地,不支援 Amazon MQ 動ListBrokers作做為目標,因為作業具有前置詞。list

使用通用目標的範例

您在排程Input欄位中傳遞的參數取決於您要叫用的服務 API 接受的要求參數。例如,若要以 Lambda 為目標 Invoke,您可以設定 AWS LambdaAPI 參考中列出的參數。這包括您可以傳遞給 Lambda 函數的選用 JSON 承載資料

若要判斷您可以為不同 API 設定的參數,請參閱該服務的 API 參考資料。與 Lambda 類似Invoke,某些 API 接受 URI 參數以及請求主體有效負載。在這種情況下,您可以在排程中指定 URI 路徑參數以及 JSON 承載Input

下列範例說明如何使用通用目標來叫用 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"); } }